個人サーバー向け fail2ban 統合監視無料セルフホスト

散らばった fail2ban を、
ひとつの画面で見て、止めます。

SSem SecuMon は、VPS・自宅サーバーを自分で運用する個人のための無料の fail2ban 統合監視コンソールです。各サーバーに小さなエージェントを置くだけで、いま誰がブロックされているか、何回目の再犯かをひとつの画面で確認でき、バン · アンバン · アドレス帯ブロック · 国別ブロックまで署名付きコマンドで実行できます。

Linux サーバー + fail2ban · nftables · エージェントは受信ポートを開けません · コンソールは自分のサーバーにセルフホスト

secumon ダッシュボードバン一覧ターゲット執行国別ブロック admin · ADMIN
現在のバン128サーバー3台の合計
本日の新規37昨日より12件多い
再犯 IP19累積3回以上
自動ブロック6直近24時間
バン推移 · 24時間web-01vpn-gw
サーバーエージェント 3
  • web-0112秒前
  • vpn-gw8秒前
  • home-nas21秒前
現在バン中の IP128
IPサーバーjail再犯段階国残り時間
203.0.113.45web-01 · vpn-gwsshd4段階目 · 8時間XA5時間12分
198.51.100.7vpn-gwsshd2段階目 · 2時間XB1時間40分
203.0.113.201home-nassshd3段階目 · 4時間XC3時間5分
192.0.2.88web-01apache-auth1段階目 · 1時間XD24分

画面例のサーバー名・IP・国は架空のものです(IP はドキュメント用の予約アドレス帯、国コード XA–XD は例示用)。

個人のサーバーも、毎日狙われています

インターネットに公開されたサーバーは、1日に数千回もの接続試行を受けます。fail2ban が防いでくれますが、サーバーが2台以上になるだけで見えないものが出てきます。

サーバーごとに別々に確認しなければなりません

誰がブロックされたかを知るには、サーバーごとに SSH でログインして fail2ban-client を叩く必要があります。同じ IP が複数のサーバーを狙っていることも見えません。

指数バンも、いずれは解除されます

再犯ほど長くブロックしますが、時間が経てばまた開きます。3回目に来る相手はミスではなく、執拗に狙い続けている相手です。

アドレス帯ブロックは、間違えやすい作業です

数千ものアドレス帯をサーバーごとにファイアウォールへ登録し、更新し続けるのは手間がかかります。一度でも間違えると、自分の接続まで切れてしまいます。

ひと目でわかる

確認 · ブロック · 広範囲のブロックを、ひとつのコンソールで行います。以下の画面はすべて架空のサンプルデータです。

ひとつの IP を最後まで追跡します

バン一覧で IP をクリックすると、その IP をバンしたサーバー、バン履歴、現在の段階と次回バンの予測時間が1か所にまとまります。

  • 同じ IP をバンしたサーバーをまとめて表示
  • 国は内蔵の参照表で判定 — 外部 API の利用上限を消費しません
  • その場でアンバン · アドレス帯ブロック · AbuseIPDB に報告
203.0.113.45XA再犯4回
バンしたサーバー
web-01 · vpn-gw
現在の段階
4段階目 · 8時間
次回バン予測
16時間
レピュテーション
100 / 100

バン履歴 — 1時間 → 2時間 → 4時間 → 8時間

アンバンアドレス帯ブロックAbuseIPDB に報告

広くブロックするときは、二重に確認します

アドレス帯ブロックは最も危険な機能なので、ミスを防ぐ仕組みを何重にも用意しています。ブロックするアドレス帯をもう一度入力しないと実行されず、デフォルトでは30日後に自動で解除されます。

  • IPv4 /16 · IPv6 /48 より広いアドレス帯は拒否
  • プライベートアドレス · ループバック · 自分で指定したアドレス帯はブロック不可
  • 複数のアドレス帯 × 複数のサーバーを一度に
アドレス帯ブロック
アドレス帯
203.0.113.0/24
アドレス数
256個
サーバー
web-01 · vpn-gw
期間
30日後に自動解除

保護アドレス帯(プライベートアドレス・VPN・自分のサーバー)はブロックできません。

キャンセルブロック

国単位でもブロックできます

233か国の中から選んだ国の IP アドレス帯を、サーバーのファイアウォールに登録します。オンにするとすぐにリストを取得し、30秒以内にすべてのサーバーへ適用します。

  • 変更がなければ、サーバーへ再送しません
  • 確立済み接続の応答と DNS はブロックしないよう、ルールの順序を固定
  • オンにする前に、アドレス帯の数を先に表示します
国別ブロック 2か国 · アドレス帯 4,600件
  • XA国 Aアドレス帯 3,120件
  • XB国 Bアドレス帯 1,480件
  • XC国 Cアドレス帯 9,860件
  • XD国 Dアドレス帯 640件

権威 DNS(53)は常に許可されます。メール受信・VPN を運用している場合は、先にガイドを確認してください。

何ができるのか

見ること、止めること、そして自動で止めることまで — 個人サーバー数台に必要なぶんだけを詰め込みました。

統合ダッシュボード

すべてのサーバーの現在のバン · 累積バン · 再犯 IP · 推移をひとつの画面で確認できます。サーバー1台に絞り込んで見ることもできます。

再犯段階の表示

fail2ban の指数バン(1 · 2 · 4 · 8…倍)を読み取り、いま何段階目か、次はどれだけブロックされるかを表示します。

バン · アンバン

画面から直接コマンドを送ります。サーバーのエージェントが署名を確認してから実行し、結果はコマンド履歴に残ります。

アドレス帯ブロック

広さの制限 · 保護アドレス帯 · 確認入力 · 自動解除(デフォルト30日)でミスを防ぎます。すでにより広い範囲でブロック済みなら、スキップします。

再犯 IP の自動ブロック

累積3回以上バンされた IP を、すべてのサーバーで30日間ブロックします。単一 IP のみ、1回あたり最大20件、すべて記録して通知します。

公開ブロックリスト

Spamhaus DROP · FireHOL level1 を1日1回取得し、すべてのサーバーに適用します。自分のアドレス帯と重なる項目は先に除外します。

国別ブロック

選んだ国のアドレス帯を、サーバーのファイアウォールの専用リストに登録します。オフにするとそのリストだけを空にします — ほかのブロックはそのままです。

AbuseIPDB · Telegram

バンされた IP だけを AbuseIPDB に報告し、レピュテーションを照会します。自動ブロックとリストの変更は Telegram で通知します。キーはコンソールサーバーにだけ置きます。

監査ログ · 2段階認証

すべての執行 · 報告 · ログインが記録されます。閲覧専用 · オペレーター · 管理者の3つのロールと、TOTP による2段階認証を使います。

どのように動作するのか

コンソールがサーバーへコマンドを送り込むことはありません。サーバーのエージェントが先にコンソールへ接続して状態を送り、署名付きコマンドを受け取って自分で検証してから実行します。

  1. 状態報告 エージェントは30秒ごとに fail2ban とファイアウォールの状態を読み取り、自分の鍵で署名してコンソールへ送ります。
  2. 1か所に集約 コンソールはすべてのサーバーの状態をひとつのデータベースに集めます。どのサーバーも同じ画面に表示されます。
  3. コマンドはキューへ バン · ブロックを押すと、コンソールはコマンドに署名してキューに入れるだけで、サーバーへは接続しません。
  4. 検証してから実行 エージェントは、署名 · 対象サーバー · 有効期限(60秒)· 重複をすべて確認できたコマンドだけを実行します。
  5. root はラッパーひとつだけ エージェントは root ではありません。特権操作は、許可された動作だけを受け付ける root ラッパーひとつを経由します。

ファイアウォールはこの順序で判定します

SecuMon は fail2ban のルールと混ざらない、専用の nftables テーブルを使います。ブロックは3つの層に分かれているので「なぜブロックされたのか」がわかり、ひとつの層を更新してもほかの層はそのままです。

  1. 1確立済み接続の応答許可
  2. 2DNS (53)許可
  3. 3手動 · 自動ブロックブロック · 期間が過ぎると解除
  4. 4公開ブロックリストブロック
  5. 5国ブロック

セキュリティ原則

サーバーを守るために導入したツールが、新たな穴にならないように作りました。

  • サーバーは受信ポートを開けません。エージェントが常に先にコンソールへ接続します。
  • すべてのコマンドは Ed25519 で署名されます。60秒で期限切れになり、1回だけ、指定されたサーバーでのみ実行されます。
  • 許可された動作は5つだけです。状態確認 · バン · アンバン · アドレス帯ブロック · ブロック解除 — シェルを介さず、引数の配列だけで実行します。
  • 自分の接続経路はブロックしません。プライベートアドレス · ループバック · 自分で指定したアドレス帯はコンソールがブロックを拒否し、コマンドはサーバー側のラッパーがもう一度検査します。
  • シークレットはファイルでのみ渡します。API キー · Telegram トークン · 署名鍵はコンソールサーバーのファイルとして注入し、パスワードは PBKDF2 でハッシュ化します。
  • ログインを守ります。TOTP による2段階認証、5回失敗で15分ロック、状態を変更するリクエストごとに CSRF トークンを検証します。

ご利用にあたって

保護するサーバー
Linux(systemd)+ fail2ban · nftables · sqlite3。amd64 · arm64。Ubuntu 22.04 · CentOS 8 で動作を確認しています。
コンソールサーバー
1台。JDK 21 · Tomcat 11 · PostgreSQL 17。Docker で起動すると簡単です。
ネットワーク
各サーバーからコンソールのアドレスへ HTTPS で接続できれば十分です。コンソールは VPN または内部ネットワークの内側に置くことをおすすめします。
時刻
すべてのサーバーの時刻を NTP で合わせます。署名の時刻が60秒以上ずれると拒否されます。
表示言語
コンソール画面とログメッセージは現在韓国語のみで提供しています。この紹介とガイドは10言語で読めます。
料金
無料です。個人サーバーのために作りました。

準備中インストールファイルの配布は準備中です。

必要なものとインストール手順は、無料ガイドで先にご確認ください。

無料ガイドを見る

無料ガイドで始めましょう

必要なものから最初のブロックまで、個人サーバー1台を前提に順を追って案内します。
国別ブロックの前に必ず知っておくべきことも、あわせてまとめました。

無料ガイドを見る

ご質問は halo@levelupsoft.com まで