使用 fail2ban 的最大禁止时间

使用 fail2ban 的最大禁止时间

我用fail2ban/firewalld它来限制类似机器人对Nginx服务器的访问。通常,相应 jail 的配置如下:

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

它按预期工作(禁令默认为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即使对于“大”禁令时间,使用 也能正常工作。这种行为的原因可能是什么?我在 CentOS 7 上使用 fail2ban v 0.9.7。

答案1

这严格来说不是一个fail2ban相关问题,而是一个netfilter内核代码错误。简而言之,您的版本ipset存在参数整数溢出timeout,因此当参数超过 32 位整数时,您会看到不可预测的行为。

您在多端口中看不到这种情况,因为它不使用此代码,而是依靠自己的设备来跟踪超时。

这是一个关联对 netfilter 代码中这个问题进行修补。

相关内容