fail2ban监狱工作不正常

我试图用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 eg # 192.168.1.1 - - "GET /something.cgi # [Definition] failregex = ^<HOST> -.*GET.*(\.asp|\.exe|\.pl|\.cgi|\scgi) ignoreregex = 

但是如果访问日志中的引用者拥有脚本标签,这也会产生一个命中。 例如:(我已经混淆了IP和引用者,并且我截断了多行,在真正的日志中,这四行是在一行上)。

 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" 

我怎样才能改变正则expression式GET /xxxxx HTTP部分find.asp等?

那么在正则expression式中有非常有趣的东西,正则expression式是贪婪的。

即使他们在开始的时候得到了比赛,他们也会继续寻找,并且将会进入最后的比赛。 在你的情况下,它匹配这个“referrer.com/default.aspx”,因为你有正则expression式来匹配.asp,它也会匹配任何与.asp *。

所以,在使用正则expression式时,你需要非常具体。

为此,你应该试试这个:

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

像这样的东西应该工作得很好。 如果无论如何它不起作用,现在你知道什么是问题,我相信你可以用正则expression式挖一点点来修复它。

希望这有助于。