Linux
使用fail2ban的最大bantime
我
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
與對應
ipset
的fail2ban-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 程式碼中此問題的更新檔的連結。