fail2ban を用いて SSH への侵入検知
【概要】Fail2banでSSH不正アクセス試行を検知し、デフォルトでnftables連携により自動ブロックする。設定はjail.localで行い、statusコマンドやログで運用状況を確認し、必要に応じてIPアドレスのBAN解除が可能である。
Fail2ban のインストール(Ubuntu 上)
Fail2ban は、SSH や他の様々なサービスのログファイルを読み取って、侵入試行を検知し、自動的にアクセス元IPをLinuxファイアウォール(Ubuntu 24.04 LTS ではデフォルトで nftables)に登録することでブロックするソフトウェアである。本記事では、Ubuntu 24.04 LTS の標準リポジトリで提供される Fail2ban の利用を想定している。
以下のコマンドを実行する.
# パッケージリストの情報を更新
sudo apt update
sudo apt -y install fail2ban
インストール後、Fail2ban サービスは自動起動されるよう設定されている場合が多い。サービスが動作しているか確認したい場合は、systemctl status fail2ban
コマンドを使用する.
補足: Ubuntu 24.04 LTS の初期リリースには特定の条件下で Fail2ban が正常に起動しないバグがあったが、24.04.1 以降で修正されている.
Fail2ban の設定
Fail2ban の設定は主に `/etc/fail2ban/jail.conf` ファイルで行われるが、設定を変更する場合は直接このファイルを編集せず、`/etc/fail2ban/jail.conf` を `/etc/fail2ban/jail.local` にコピーして編集することが強く推奨される.これにより、将来のアップデートで `jail.conf` が上書きされても独自の設定が維持されるためである.
既定の設定では、sshd などの jail に対して、一定時間内でのログインの失敗が「3」を超えると、600秒(10分)ロックされるようになっている.この設定は `/etc/fail2ban/jail.local` または `/etc/fail2ban/jail.d/` 内のファイルで変更できる.例えば、SSH サーバの待ち受けポートをデフォルトの22番から変更している場合は、対応する jail 設定(通常は [sshd]
セクション)の port
パラメータを適切に修正する必要がある.

設定ファイルの編集後、変更を Fail2ban に反映させるには、sudo fail2ban-client reload
コマンドを実行する.これにより、サービスを停止することなく設定が再読み込みされる.完全にサービスを再起動する場合は sudo systemctl restart fail2ban
コマンドを使用する.
補足: Ubuntu 24.04 LTS の Fail2ban では、デフォルトでファイアウォール連携のアクションとして nftables が使用される.これにより、不正アクセスの試行元 IP アドレスは nftables のルールセットに追加され、以降の接続が拒否される.
運用の確認と管理:
Fail2ban が正常に機能しているか、どの jail がアクティブで、どの IP アドレスが BAN されているかなどを確認するには、fail2ban-client status
コマンドを使用する.特定の jail の状態を確認するには、例えば SSH であれば fail2ban-client status sshd
を実行する.
Fail2ban のログは主に /var/log/fail2ban.log
ファイルで確認できる.
誤って正規のユーザーや自分の IP アドレスを BAN してしまった場合は、以下のコマンドで手動で BAN を解除できる.
sudo fail2ban-client set unbanip
には対象の jail 名(例: sshd
)、
には BAN を解除したい IP アドレスを指定する.