Linux

使用fail2ban的最大bantime

  • September 24, 2017

fail2ban/firewalld用來限制對Nginx伺服器的類似機器人的訪問。通常,對應的 jail 的配置如下所示:

[nginx-botsearch]
#banaction = iptables-multiport
enabled = true
filter = nginx-botsearch
logpath = /var/log/nginx*/*access*.log
maxretry = 3
bantime = 3600

這按預期工作(banaction 預設為firewallcmd-ipset),即iptables -L命令顯示INPUT_direct鏈中的條目:

REJECT     tcp  --  anywhere             anywhere             multiport dports http,https match-set fail2ban-nginx-botsearch src reject-with icmp-port-unreachable

與對應ipsetfail2ban-nginx-botsearch

但是,當 增加時,我注意到一個奇怪的行為bantime。一切都按預期工作bantime <= 4294967。當我設置bantime = 4294968並重新載入fail2ban服務時,輸出中的條目iptables失去(未創建 ipset),實際上,使用該ab實用程序進行測試表明該禁令未強制執行。有趣的是,banaction = iptables-multiport甚至將作品用於“大型”bantimes。這種行為的原因可能是什麼?我在 CentOS 7 上使用 fail2ban v 0.9.7。

這不是嚴格的fail2ban相關問題,而是netfilter核心程式碼中的錯誤。簡而言之,您的版本的參數ipset有整數溢出timeout,因此當它超過 32 位整數時,您會看到不可預知的行為。

您不會在 multiport 中看到這一點,因為它不使用此程式碼,而是依靠自己的設備來跟踪超時。

這是netfilter 程式碼中此問題的更新檔的連結。

引用自:https://serverfault.com/questions/875104