我正在尝试监禁对 Web 服务器进行暴力攻击的主机,从而创建以下/var/log/apache2/error.log
形式的(数百行)代码
[Fri Feb 01 11:17:56.158739 2019] [:error] [pid 15870] [client 40.118.7.71:19920] script '/var/www/html/hello.php' not found or unable to stat
/etc/fail2ban/filter.d/foo.conf:
[INCLUDES]
before = apache-common.conf
[Definition]
failregex = ^%(_apache_error_client)s .* not found or unable to stat
%(_apache_error_client)s
[[]client (?P<host>\S*)[]]
但是,fail2ban-regex /var/log/apache2/error.log foo.conf
这三个更广泛和更宽泛的正则表达式均报告零匹配(但没有错误或警告)。因此fail2ban-client status foo
可以预见的是,不会报告监禁。如果没有错误,我无法进一步扩大正则表达式No 'host' group in '<host>'
。我从fail2ban自己的派生了这些正则表达式/etc/fail2ban/filter.d/*.conf
。
什么正则表达式至少可以匹配 error.log 中的每一行,正如我期望第二和第三个正则表达式那样?然后我可以扩展它以更精确地匹配我的特定行。
(apache-noscript
无论如何,过滤器不应该监禁这些主机吗?它的 failregex ^%(_apache_error_client)s script '/\S*(\.php|\.asp|\.exe|\.pl)\S*' not found or unable to stat\s*$
)可能与我的行匹配。
Ubuntu 14.04,fail2ban v0.8.11。
编辑:有关的,我正在尝试使用 fail2ban 捕获针对 /xmlrpc.php 的暴力攻击。这似乎被称为“xmlrpc攻击”。
答案1
一时兴起,我从不同的发行版中导出了正则表达式
failregex = \[client <HOST>:\d+\] script '/\S*(\.php|\.asp|\.exe|\.pl)\S*' not found or unable to stat$
几个小时后,它确实开始监禁攻击者。但我仍然感到惊讶,Apache 的 error.log 中匹配行的必要片段\[client <HOST>:\d+\]
不在 中/etc/fail2ban/filter.d/*
。版本不匹配?