fail2banをUbuntuに入れてもsshdジェイルはデフォルトで無効だった

  • fail2ban
  • Ubuntu
  • SSH
  • Security

この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。

sshへのブルートフォース対策としてfail2banを入れたので、その手順と、あとで気づいた見落としをまとめておく。

やったこと

インストール。

sudo apt update
sudo apt install fail2ban

jail.confは直接編集せず、jail.localにコピーしてそっちを編集する。パッケージ更新で上書きされないようにするため。

cd /etc/fail2ban/
sudo cp -p jail.conf jail.local

社内ネットワークからのアクセスはbanしたくないのでignoreipを追加。

#ignoreip = 127.0.0.1/8 ::1
ignoreip = 192.168.128.0/24

自動起動を有効にして起動。

sudo systemctl enable fail2ban
sudo systemctl start fail2ban

ステータス確認。

sudo systemctl status fail2ban
● fail2ban.service - Fail2Ban Service
Active: active (running)
Main PID: xxxxx (fail2ban-server)

active (running)になってるので、ここまでは何も間違ってないように見えた。

見落としていたこと

上記の手順、ignoreipしか触っていない。[sshd]セクションを何もいじっていないので、実は肝心のSSHジェイルが有効になっているか確認していなかった。

fail2banはサービスとしては起動していても、個々のジェイル(sshdなど)はenabled = trueが明示されていないと動かない。つまりsystemctl statusがactive (running)でも、SSHへの不正アクセスを実際に検知・banしているとは限らない。サービスは生きてるけど中身は空、という状態になり得る。

確認コマンド。

sudo fail2ban-client status sshd

これでエラーになる、あるいはジェイル一覧にsshdが出てこない場合は有効になっていない。

jail.localの[sshd]セクションで明示的に有効化する必要がある。

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = %(sshd_log)s

設定後は再起動して反映。

sudo systemctl restart fail2ban
sudo fail2ban-client status sshd

statusでCurrently bannedなどの項目が出てくれば有効化できている。

その他気になった点

  • bantimeのデフォルトは10分程度と短い。ssh向けにこの値のまま運用するなら短すぎる可能性がある。banルールをデフォルトのままにするなら、この時間で十分かは別途検討したほうがよさそう。
  • ignoreipにCIDRで許可した範囲は、fail2ban-client set <jail> unbanipのような一時的な操作と違ってjail.localに書けば再起動後も保持される。

結論

fail2banは「サービスが起動している」ことと「ジェイルが有効になっている」ことは別。ignoreipだけ設定して満足せず、fail2ban-client status <jail名>で実際に監視対象になっているか確認したほうがいい。