Fail2ban は、ログを監視して、認証失敗を繰り返す送信元IPを一定時間遮断する仕組みです。 SSH や Web サーバーのログを読み、条件に合致した相手をパケットフィルタのルールへ自動追加します。
仕組みは3つの部品で決まる
| 用語 | 意味 |
|---|---|
| filter | ログのどのパターンを「失敗」とみなすか(正規表現) |
| jail | どのログを、何回で、どれだけ遮断するかの設定 |
| action | 遮断の実行方法(パケットフィルタへの追加など) |
調整するのは主に jail の3つの値です。maxretry(何回で遮断するか)、findtime(何秒以内の失敗を数えるか)、bantime(どれだけ遮断するか)。
位置づけを間違えない
Fail2ban は補助です。これを入れても、次の問題は何も解決しません。
- パスワード認証を許可している
- 弱いパスワードを使っている
- 管理画面を全世界に公開している
先にやるべきは、SSH の鍵認証化とパスワード認証の無効化、そして UFW による公開範囲の制限です。Fail2ban はその後で、ログを汚し続ける自動攻撃の量を減らすために入れます。
自分を遮断してしまう事故
パスワードを打ち間違えて自分のIPが遮断される、というのは実際によく起きます。対策は2つです。
- 自宅や事務所の固定IPを
ignoreipに登録しておく - 遮断されたときの解除方法(
fail2ban-client set <jail> unbanip <IP>)を、遮断される前に確認しておく
設定を編集する場所に注意
配布元の設定ファイル(jail.conf)を直接書き換えると、パッケージ更新で上書きされて設定が消えます。編集するのは jail.local 側です。同じ構造の「.local」ファイルを作り、変更したい項目だけを書きます。
実務で見るポイント
- 導入したら、実際に遮断が発生しているかログで確認する。動いていない設定は珍しくない
- 遮断は一時的なもの。恒久的にブロックしたい相手は別の手段で扱う
- ログの形式が変わると filter が効かなくなる。サーバー更新後は動作を確認する