在调试模式下运行 fail2ban 并调查 IP 表后,我发现了问题。
出现此问题的原因有 3 个:
1) HAProxy 正在运行一个 docker 映像,其服务器时间为 UTC,并且您的服务器可能位于不同的时区。
2) HAProxy 在 Cattle 托管网络的 docker 容器中运行,这意味着传入的数据包是转发数据包,而不是iptables 的输入数据包。
3) Cattle 处理转发的方式有点难看,因此不允许自定义 fail2ban 规则
在我的情况下,由于 HAProxy 位于具有不同时区的 docker 映像中,fail2ban 忽略了禁止尝试,因为时间已经过去了几个小时。更改服务器时间解决了第一个问题。
我现在可以看到使用以下 IP 时确实被禁止了:
fail2ban-client status <my-jail>
但是问题仍然存在,即使我可以看到正确的 IP 被禁止,我仍然可以完全正常地访问服务器。
这是因为 Rancher 设置 iptables 的方式。为了解决这个问题,我将 /etc/fail2ban/jail.local 从:
[DEFAULT]
...
chain = INPUT
...
至:
[DEFAULT]
...
chain = CATTLE_FORWARD
...
现在用户被正确地禁止,因为时区匹配,然后被放入转发链中的监狱,从而丢弃来自被禁止用户的请求。