fail2ban を用いて SSH への侵入検知

【概要】Fail2ban は SSH への不正アクセス試行をログから検知し、送信元 IP アドレスをファイアウォールに登録してブロックする。Ubuntu 24.04 LTS での既定の連携先は nftables である。設定は jail.local で行い、fail2ban-client status コマンドとログで動作を確認し、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 コマンドを実行する.

Fail2ban の設定

Fail2ban の設定は /etc/fail2ban/jail.conf で行われるが、このファイルは直接編集せず、/etc/fail2ban/jail.local を作成して変更したい項目だけを記述する.パッケージの更新で jail.conf が上書きされても、jail.local の設定は残るためである.

既定では、findtime(既定 10 分)の間に maxretry(既定 5 回)のログイン失敗があると、その IP アドレスを bantime(既定 10 分)の間ブロックする.これらの値は /etc/fail2ban/jail.local または /etc/fail2ban/jail.d/ 内のファイルで変更する.SSH サーバの待ち受けポートを 22 番から変更している場合は、[sshd] セクションの port の値を、使用しているポート番号に合わせる.

設定ファイルを編集したら、sudo fail2ban-client reload コマンドで設定を読み込ませる.サービスを再起動する場合は sudo systemctl restart fail2ban コマンドを実行する.

補足: Ubuntu 24.04 LTS では rsyslog が既定で入らないため /var/log/auth.log が存在しない場合がある.この環境で [sshd] の jail が起動しないときは、jail.local[sshd] セクションに backend = systemd を指定し、systemd のジャーナルからログを読み取らせる.

運用の確認と管理:

どの jail が動作しているかを確認するには、fail2ban-client status コマンドを実行する.個別の jail の状態と BAN 中の IP アドレスを確認するには、SSH であれば fail2ban-client status sshd を実行する. Fail2ban のログは /var/log/fail2ban.log で確認できる.

正規のユーザや自分の IP アドレスを BAN してしまった場合は、以下のコマンドで BAN を解除する.

sudo fail2ban-client set <jail名> unbanip <IPアドレス>

<jail名> には対象の jail 名(例: sshd)、<IPアドレス> には BAN を解除する IP アドレスを指定する.