Fail2Banを効果的に運用する:実体験に基づいたセキュリティ最適化ガイド
1. はじめに
Linuxサーバーを運用していると、SSHポートを開いているだけで驚くほど多くのログイン試行が発生することに気づくでしょう。これを防ぐために多くの人が利用しているツールがFail2Banです。しかし、単にインストールして設定するだけでは十分とは言えません。長期間運用していると、BANリストが数百、数千件と蓄積され、かえってサーバー性能に悪影響を及ぼすことがあります。
本記事では、筆者の実際のサーバー運用経験をもとに、Fail2Banをより効果的かつ効率的に活用する方法を紹介します。
Fail2Banのインストール方法や基本設定について知りたい方は、以下の記事もぜひご覧ください。 Linuxサーバーを守る頼れる番人、Fail2Ban
2. 実体験:3週間で1,113のIPがBANされた
筆者がテスト用に運用しているLinuxサーバーにfail2ban
を導入してから約3週間後、以下のコマンドを実行してみました:
sudo fail2ban-client status sshd
その結果は以下の通りでした:
Currently failed: 1
Total failed: 5330
Currently banned: 1110
Total banned: 1113
わずか3週間で1,113のIPアドレスが遮断され、そのうち1,110件がまだBANされたままでした。これはbantime = -1
と設定しており、永久BANを適用していたからです。
最初は「一度でも攻撃を試みたら容赦なし!」という気持ちでこの設定にしましたが、
iptables
に数千のIPが蓄積されるにつれ、システムリソースへの負担と管理の手間が懸念されるようになりました。
その結果、持続可能で戦略的なFail2Banの運用方法を考えるようになりました。
3. Fail2Ban設定改善の戦略
✅ bantimeを柔軟に調整する
- 永久BANよりも、時間制限付きBANのほうが現実的です。
- 例:
-
bantime = 86400 # 1日間のBAN findtime = 600 # 10分以内 maxretry = 3 # 3回失敗で発動
✅ recidive jailの活用
🔎 recidive jailとは?
fail2ban
が管理するfail2ban.log
をモニタリングし、複数のjailで繰り返し遮断されたIPに対して長期間の再BANを行う高度な仕組みです。簡単に言えば、常習犯に対して厳罰を与える「再犯監視システム」です。通常の
sshd
やnginx
、ftp
などのjailは短期間のBANを行いますが、recidive
jailは過去に複数回遮断された「常習IP」だけを抽出して、より長く遮断します。
- 繰り返しBANされるIPだけを長期遮断
- 一時的な攻撃者は放置、再試行する執拗なIPを確実にブロック
- 設定例:
-
[recidive] enabled = true logpath = /var/log/fail2ban.log bantime = 604800 # 1週間 findtime = 86400 maxretry = 5
✅ ログ管理を自動化する
/var/log/fail2ban.log
が肥大化する前にlogrotateで自動整理- cronやsystemd timerで
fail2ban-client status
の結果をメールで通知
4. スクリプト例
#!/bin/bash
fail2ban-client status sshd > /tmp/sshd-status.log
echo "Current Ban Count: $(grep 'Currently banned' /tmp/sshd-status.log)" | mail -s "Fail2Ban SSHD Status" your@email.com
5. まとめ:Fail2Banは武器ではなく「道具」
Fail2Banは無差別攻撃を防ぐための非常に有効なツールですが、過剰な運用は本来の目的を超えてサーバーに負担を与えることもあります。
現実的なポリシー設定と自動化の組み合わせで、Fail2Banは頼れるセキュリティパートナーになります。
次回予告
Fail2Banのログファイル
/var/log/fail2ban.log
の肥大化を防ぐlogrotateの設定方法について解説予定です。ご興味のある方はぜひフォローを!
コメントはありません。