我想在我的Rancher代理上设置fail2ban。
我有一个运行托管网络的Cattle环境,其中每个Rancher代理运行一个用作Web服务器+负载均衡器的HAProxy。
我想根据HTTP和HTTPs端口的不同标准(太多登录失败,请求太多等)禁止用户。
目前我在虚拟日志中有fail2ban setup with regex that is working,但fail2ban没有禁止任何IP。
viewDidLayoutSubviews
表明jail已经启动,但即使我的请求不正确,也有0次禁止。
答案 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
...
现在用户被正确禁止,因为时区匹配,然后被放入正向链中的监狱,从而丢弃被禁用户的请求。