Fail2ban 正则表达式工作但不禁止。改为 DNS 警告
Fail2ban regex working but not banning. DNS warning instead
所以,我已经阅读了几天的问题,但似乎没有在任何地方找到解决方案。
我正在 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.11.1 配置为捕获它。
/etc/fail2ban/jail.本地:
[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 警告日志,仍然没有禁止也没有记录主机正在尝试登录。
我希望这是足够的信息,并且这会像我一样帮助其他人。
OFFTOPIC: 请将此问题移至 serverfault 或其他更合适的网站(这对于 SO 来说是 offtopic)
至于您的问题,请停止使用包罗万象(.*
等),
e. G。使其工作的一项更正可能是:
- ... \[client.*<HOST>\] ...
+ ... \[client <HOST>:\d+\] ...
RE .*
是贪心的,所以它匹配尽可能多的字符,<HOST>
可以匹配任何东西(主机名),而不仅仅是地址,最好使用 <ADDR>
, 如果你的 fail2ban 版本 >= 0.10.
而且你的整个表达是“脆弱的”,因为有几个包罗万象(所以锚并没有真正被采用)。
所以,我已经阅读了几天的问题,但似乎没有在任何地方找到解决方案。 我正在 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.11.1 配置为捕获它。 /etc/fail2ban/jail.本地:
[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 警告日志,仍然没有禁止也没有记录主机正在尝试登录。
我希望这是足够的信息,并且这会像我一样帮助其他人。
OFFTOPIC: 请将此问题移至 serverfault 或其他更合适的网站(这对于 SO 来说是 offtopic)
至于您的问题,请停止使用包罗万象(.*
等),
e. G。使其工作的一项更正可能是:
- ... \[client.*<HOST>\] ...
+ ... \[client <HOST>:\d+\] ...
RE .*
是贪心的,所以它匹配尽可能多的字符,<HOST>
可以匹配任何东西(主机名),而不仅仅是地址,最好使用 <ADDR>
, 如果你的 fail2ban 版本 >= 0.10.
而且你的整个表达是“脆弱的”,因为有几个包罗万象(所以锚并没有真正被采用)。