Fail2Ban 如何有效運營:基於實戰案例的安全優化指南
1. 引言
在運營 Linux 伺服器的過程中,僅僅開放 SSH 端口,就會經歷很多次登錄嘗試。為了防止這種情況,許多人使用的工具就是 Fail2Ban。然而,僅僅安裝和設置是遠遠不夠的。因為在長期運營中,禁用列表可能會累積到數百、數千個,反而會影響伺服器性能。
本文將基於實際伺服器運營經驗,分享如何 更有效、更高效 運用 Fail2Ban 的方法。
如果您對 Fail2Ban 的安裝方法及基本設置有興趣,請參考之前的文章! 守護 Linux 伺服器的守護者,Fail2Ban
2. 實戰經驗:3 週內封禁 1,113 個 IP
在我運營的測試 Linux 伺服器上,設置 fail2ban
大約 3 週後,有一天我執行了以下命令:
sudo fail2ban-client status sshd
結果如下:
當前失敗:1
總失敗:5330
當前禁止:1110
總禁止:1113
3 週內封禁了 1,113 個 IP,其中 1,110 個仍在禁止中。這是因為我設置了 bantime = -1
,使其永久禁止。
開始時,我以為“只要試過一次的就不會被饒恕!”的心態進行設置,但當數千個被禁止的 IP 累積到
iptables
中後,我開始擔心系統資源的消耗和管理效率。
最終,我開始思考可持續和有策略的 Fail2Ban 運營方式。
3. Fail2Ban 設定改善策略
✅ 動態調整 bantime
- 與其永久封禁,不如根據時間進行封禁來得現實。
- 示例:
-
bantime = 86400 # 封禁 1 天 findtime = 600 # 10 分鐘內 maxretry = 3 # 失敗 3 次
✅ 利用 recidive jail
🔎 什麼是 recidive jail?
fail2ban
監控fail2ban.log
文件,當某個 IP 在多個 jail 中反復被禁止時,對該 IP 進行 長期再次封禁 的高級功能。簡單來說,就是對 犯罪者施加更重的懲罰的“累犯監測系統”。一般來說,
sshd
、nginx
、ftp
等各個 jail 只是短暫封禁,但recidive
jail 會選擇這些 有“累積犯罪記錄”的 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 "當前禁止數量: $(grep 'Currently banned' /tmp/sshd-status.log)" | mail -s "Fail2Ban SSHD 狀態" your@email.com
5. 結語:Fail2Ban 不是武器,而是工具
Fail2Ban 是阻止隨機攻擊的非常有用的工具,但如果使用過度,封鎖的目的不再是保護伺服器,而可能成為伺服器過載的原因。
如果與現實的封禁政策和自動化管理工具結合,Fail2Ban 將不再是爭鬧的問題,而是 堅實的安全夥伴。
預告下一篇文章
我將探討如何設置 logrotate 防止 Fail2Ban 的日誌檔案
/var/log/fail2ban.log
變大。有興趣的朋友請訂閱!
目前沒有評論。