我正在运行的应用程序记录了错误的登录信息,例如:
Tue, 19 Mar 13 20:46:03 +0000 failed login from iphere !
Tue, 19 Mar 13 20:46:03 +0000 failed login from iphere !
Tue, 19 Mar 13 20:46:03 +0000 failed login from iphere !
我正在尝试禁止无法登录 IP 的人,以防止暴力攻击。注意:iphere 显然是真实 IP。不,不是 127.0.0.1,因为在配置中它被排除在禁止范围之外 :)
我尝试过的方法
- 搜索并阅读了大约 10 份指南...
- 重新安装Fail2ban
- 将后端设置为轮询而不是自动,许多人报告这是一个错误
- 检查了所有日志
- 测试了正则表达式
- 确认 fail2ban 正常运行
- 使 findtime 和 badtime 变得非常长,以查看是否是时区问题(应用程序存储 GMT 时间戳,而服务器处于 GMT+1)
Fail2ban 使用默认的、未更改的 SSH jail/filter!我尝试登录 SSH 几次,结果被禁止。所以是我的配置出了问题。
我发现一个很好的指南是: http://www.voip-info.org/wiki/view/Fail2Ban+(with+iptables)+And+Asterisk
我应用的修复程序如下:启动/重启时发生 fail2ban.action.action 错误 启动/重启时发生多个 fail2ban.action.action 错误。似乎存在与 iptables 的“竞争”条件。我通过编辑 /usr/bin/fail2ban-client 并添加 time.sleep(0.1) 彻底解决了系统上的问题。这是我在 fail2ban 日志中看到的错误,通过上述方法解决了该问题。
日志文件
日志文件显示 jail 启动正常。除了默认的 SSH 过滤器外,我还可以看到写入 /var/log/myapp.log 的行 fail2ban-client -d 给出了以下内容:
['add', 'myapp', 'polling']
['set', 'myapp', 'addlogpath', '/var/log/myapp.log']
['set', 'myapp', 'maxretry', 3]
['set', 'myapp', 'addignoreip', '127.0.0.1/8']
['set', 'myapp', 'findtime', 60000]
['set', 'myapp', 'bantime', 1800]
['set', 'myapp', 'addfailregex', '.*failed login from <HOST> .*']
下面您将找到我的配置文件。
筛选
/etc/fail2ban/filter.d/myapp.conf
[Definition]
failregex = .*failed login from <HOST> .*
我使用以下方法测试了过滤器:
fail2ban-regex /var/log/myapp.log /etc/fail2ban/filter.d/myapp.conf
结果(没什么特别的,只是匹配列表和这个):成功,匹配总数为 254
所以过滤器应该没问题。
监狱
[myapp]
enabled = true
port = all
filter = myapp
logpath = /var/log/myapp.log
findtime = 60000
bantime = 1800
maxretry = 3
banaction = iptables-multiport-log
设置这些之后,我显然执行了 fail2ban-client 重新加载和服务 fail2ban 重新启动。
可以这么说,根本没有实施任何禁令。我在这个问题上花了不少时间,但我认为这应该是一件小事,所以我觉得在这里问一下比较好。