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

时间:2018-03-12 10:29:45

标签: haproxy rancher fail2ban cattle

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

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

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

目前我在虚拟日志中有fail2ban setup with regex that is working,但fail2ban没有禁止任何IP。

viewDidLayoutSubviews表明jail已经启动,但即使我的请求不正确,也有0次禁止。

1 个答案:

答案 0 :(得分:0)

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

出现问题的原因有三个:

1)HAProxy正在运行一个服务器时间为UTC的docker镜像,而您的服务器可能位于不同的时区。

2)HAProxy正在Cattle托管网络中的docker容器中运行,这意味着iptables的传入数据包为Forward packets and not Input packets

3)Cattle处理转发的方式是bit ugly,因此不允许自定义fail2ban规则

在我的情况下,由于HAProxy位于具有不同时区的泊坞窗图像中,因此,fail2ban忽略禁止尝试,因为时间是几个小时。更改服务器时间修复了第一个问题。

我现在可以看到使用时确实禁止IP:

fail2ban-client status <my-jail>

但问题仍然存在,即使我能看到正确的IP被禁止,我仍然可以完全正常访问服务器。

这是因为Rancher设置iptables的方式。为了解决这个问题,我改编了我的/etc/fail2ban/jail.local:

[DEFAULT]
...
chain = INPUT
...

要:

[DEFAULT]
...
chain = CATTLE_FORWARD
...

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