Fail2ban 正则表达式有效但未禁止。而是发出 DNS 警告

Fail2ban 正则表达式有效但未禁止。而是发出 DNS 警告

我在使用 fail2ban 时遇到了以下问题(已解决),并将其错误地放在了 stack overflow 上,所以我现在将其放在这里。

因此,我已经阅读问题好几天了,但似乎没有找到任何解决方案。我正在 Web 服务器实验室上进行一些测试,我设置了两个 VM(Ubuntu 20.04)服务器和客户端。在服务器上,我配置了一个 PHP 登录应用程序,每当有人登录失败时都会向我提供此日志。

root@local:/var/log/apache2# tail -f error.log
[Fri Jun 18 10:13:37.657446 2021] [php7:notice] [pid 2465] [client 192.168.1.11:44750] [error] failed login, referer: http://192.168.1.10/index.php
[Fri Jun 18 10:13:41.434454 2021] [php7:notice] [pid 2465] [client 192.168.1.11:44750] [error] failed login, referer: http://192.168.1.10/index.php
[Fri Jun 18 10:13:46.236750 2021] [php7:notice] [pid 2465] [client 192.168.1.11:44750] [error] failed login, referer: http://192.168.1.10/index.php

并且配置了 Fail2Ban v0.10.2 来捕获它。/etc/fail2ban/jail.local:

[login-ban]
enabled   = true
port      = http,https
filter    = login-ban
logpath  = /var/log/apache2/error.log
maxretry = 3
findtime  = 180
bantime = 60

/etc/fail2ban/filter.d/login-ban.conf:

[Definition]
failregex =  ^\[.*\]\s\[.*]\s\[.*].*\[client.*<HOST>\].*\[error\].*
ignoreregex =

现在,如果我使用 fail2ban-regex 检查,正则表达式就可以完美运行:

fail2ban-regex /var/log/apache2/error.log /etc/fail2ban/filter.d/login-ban.conf --print-all-matched

我明白了

|- Matched line(s):
|  [Fri Jun 18 10:36:07.312503 2021] [php7:notice] [pid 780] [client 192.168.1.11:44754] [error] failed login, referer: http://192.168.1.10/index.php
|  [Fri Jun 18 10:36:14.417955 2021] [php7:notice] [pid 784] [client 192.168.1.11:44756] [error] failed login, referer: http://192.168.1.10/index.php

但是 fail2ban 并没有禁止该 IP,而且 fail2ban.log 向我发出了 DNS 警告:

2021-06-18 10:50:22,083 fail2ban.ipdns          [2154]: WARNING Determined IP using DNS Lookup: 8 = {'0.0.0.8'}
2021-06-18 10:50:22,085 fail2ban.filter         [2154]: INFO    [login-ban] Found 0.0.0.8 - 2021-06-18 10:50:22

我尝试将 usedns 参数设置为“no”和“raw”,唯一能做到的就是摆脱 dns 警告日志,仍然没有禁止并且没有记录尝试登录的主机。

我希望这些信息足够,并且可以帮助到像我一样的人。

答案1

解决方案

用户@sebres 回答我:

只需停止使用 catch-alls (.* 等),例如,可以进行以下更正以使其正常工作

- ... \[client.*<HOST>\] ...
+ ... \[client <HOST>:\d+\] ...

RE .* 是贪婪的,因此它匹配尽可能多的字符,并且 <HOST> 可以匹配任何内容(主机名),而不仅仅是地址,如果您的 fail2ban 版本 >= 0.10,最好使用 <ADDR>。

并且由于几个万能词,您的整个表达是“脆弱的”(因此锚点并没有真正被抓住)。

*** 所以我按照他的建议做了更改,最终结果是这样的:

^\[.*\[client <ADDR>:\d+\].*\[error\].*

现在一切都正常了。希望这对你有帮助!

相关内容