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 アドレスを指定する.