fail2ban jail 无法正常工作

fail2ban jail 无法正常工作

我正在尝试使用 fail2ban 阻止对 nginx 的不可用脚本请求。

# Noscript filter /etc/fail2ban/filter.d/nginx-noscript.conf:
#
# Block IPs trying to execute scripts such as .php, .pl, .exe and other funny scripts.
#
# Matches e.g.
# 192.168.1.1 - - "GET /something.cgi
#
[Definition]
failregex = ^<HOST> -.*GET.*(\.asp|\.exe|\.pl|\.cgi|\scgi)
ignoreregex =

但是如果访问日志中的 referrer 包含脚本标记,这也会造成命中。例如这一行:(我混淆了 IP 和 referer,并截断为多行,但在实际日志中,这 4 行位于一行。)

1.2.3.4 - - [16/Dec/2013:18:01:10 +0100] "GET / HTTP/1.1" 
301 178 "http://referrer.com/default.aspx" 
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.41 Safari/537.36"

我怎样才能改变正则表达式以便仅.aspGET /xxxxx HTTP部分中查找等?

答案1

嗯,正则表达式中有一个非常有趣的事情,那就是正则表达式是贪婪的。

即使他们在句子开头就找到了匹配项,他们也会继续查找并寻找句子中最后一个可用的匹配项。 在您的例子中,它匹配的是这个“referrer.com/default.aspx”,因为您有正则表达式来匹配 .asp,它还会匹配任何带有 .asp* 的匹配项。

因此,使用正则表达式时需要非常具体。

为此,你应该尝试这个:

failregex = ^<HOST> -.*GET.*(\.asp|\.exe|\.pl|\.cgi|\scgi)\"\s\d*

类似这样的方法应该可以很好地工作。如果无论如何它不起作用,现在您知道问题是什么了,我相信您可以通过对正则表达式进行一些挖掘来修复它。

希望这有帮助。

相关内容