2

我想在我的 Rancher 代理上设置 fail2ban。

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

我想根据 HTTP 和 HTTPS 端口的不同标准(太多失败的登录、太多的请求等)禁止用户。

目前,我使用在虚拟日志中工作的正则表达式进行了 fail2ban 设置,但 fail2ban 没有禁止任何 IP。

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

4

1 回答 1

0

在调试模式下运行 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
...

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

于 2018-03-12T10:36:56.690 回答