
Fail2Ban は、ログを監視して不正アクセスの兆候を検知し、攻撃元の IP アドレスを自動的に遮断する Linux 向けのセキュリティツールである。
Linux サーバーでは SSH や Web 管理画面、認証付きページなどに対して、パスワードを総当たりで試すブルートフォース攻撃が日常的に行われている。このような攻撃は短時間に多数のログイン試行を行うことが特徴であり、適切な対策を行わない場合は認証情報が突破される可能性がある。
Fail2Ban はサーバーのログイン失敗ログを監視し、一定回数以上の失敗を検知すると、そのアクセス元 IP を Firewall で自動的に遮断する仕組みを持つ。これにより、同じ送信元からの継続的な攻撃を抑制し、サーバーへの負荷や不正侵入のリスクを低減できる。
このページでは、Fail2Ban の基本的な仕組みと、本環境でどのように利用しているかを整理する。
Fail2Ban の目的は、ログから不正なアクセス試行を検知し、攻撃元 IP を自動的に遮断することである。
主な利用例は次の通り。
| 監視対象 | 攻撃内容 |
|---|---|
| SSH | パスワード総当たり攻撃 |
| Web管理画面 | ログイン試行の繰り返し |
| Basic認証 | パスワードブルートフォース |
| Webアプリ | ログインフォーム攻撃 |
Fail2Ban を導入することで、ログイン攻撃を受け続ける状態を防ぎ、攻撃元の IP アドレスを Firewall で自動的にブロックできる。
Fail2Ban は、複数の設定要素を組み合わせて動作する。
| 要素 | 役割 |
|---|---|
| logpath | 監視するログファイル |
| filter | 攻撃パターンを検知する |
| jail | 監視設定をまとめたルール |
| maxretry | 失敗回数の上限 |
| findtime | 失敗回数をカウントする時間 |
| bantime | BAN を継続する時間 |
Fail2Ban は下の図の流れで動作する。
ログを読む
→ 攻撃パターンを検知する
→ 一定回数を超えたら
→ Firewall で IP を遮断する
Fail2Ban を建物の警備システムに例えると次のようになる。
logpath → 監視カメラ(ログを見る場所)
filter → 怪しい行動を検知する仕組み
maxretry → 何回まで警告するか
findtime → その回数を数える時間
bantime → 追い出して入れない時間
jail → これらをまとめた警備ルール
Fail2Ban はログファイルを監視し、特定のパターンに一致するログを検知すると、攻撃元 IP を遮断する。
Fail2Ban はアプリケーションそのものを守るというより、ログを使って攻撃元を見つけ、Firewall 側で遮断する仕組みとして動作する。
Fail2Ban は、次のようなログを監視対象にできる。
・SSH の認証失敗ログ
・Apache の Basic 認証失敗ログ
・Web アプリケーションのログイン試行ログ
・セキュリティ製品の検知ログ
監視対象のログに合わせて、jail や filter を設定する。
Wiki.js のログイン処理は通常の Web 認証とは少し異なり、ログイン失敗時でも HTTP ステータス 200 を返すことがある。
そのため、
・401
・403
といった HTTP エラーコードだけでは、ログイン失敗を判定できない場合がある。
本環境では Apache の access_log を利用して、Wiki.js のログイン試行を検知している。
実際の設定手順はこちら。
Wiki.js のログイン試行は、次のようなログとして記録される。