如何使用 Rancher Load Balancer (HAProxy) 设置 fail2ban



我想在我的牧场主代理上设置 fail2ban。

我有一个运行托管网络的 Cattle 环境,其中每个牧场主代理都运行一个用作 Web 服务器 + 负载均衡器的 HAProxy。

我想根据不同的条件(太多失败的登录,太多的请求等)禁止用户使用HTTP和HTTPs端口。

目前,我使用正则表达式设置了fail2ban,该正则表达式在虚拟日志中工作,但fail2ban并未禁止任何IP。

fail2ban-client status <my-jail>显示监狱已经启动,但即使我做了不正确的请求,也有 0 个禁令。

在调试模式下运行 fail2ban 并调查 IP 表后,我发现了问题。

出现此问题的原因有 3 个:

1) HAProxy 正在运行服务器时间采用 UTC 的 docker 映像,您的服务器可能位于不同的时区。

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
...

现在,用户被正确禁止,因为时区匹配,然后被放入转发链中的监狱,从而丢弃被禁止用户的请求。

最新更新