fail2ban定期在nginx中查找403请求

我想查找403个请求并禁止他们,这里是我的日志格式

112.253.6.182 - - [08/Sep/2014:17:42:56 -0400] "GET / HTTP/1.1" 403 579 "baidu" "Mozilla/4.0" 50.117.86.72 106.37.177.251 - - [08/Sep/2014:17:42:56 -0400] "GET /index.php HTTP/1.1" 404 576 "baidu" "Mozilla/4.0" 204.44.65.173 190.254.173.14 - - [08/Sep/2014:17:42:56 -0400] "GET /index.php HTTP/1.1" 404 576 "baidu" "Mozilla/4.0" 204.44.65.173 41.222.196.37 - - [08/Sep/2014:17:42:56 -0400] "GET / HTTP/1.1" 403 579 "baidu" "Mozilla/4.0" 50.117.86.72 

我的failreg是:

 failregex = ^<HOST> -.*"(GET|POST).*.php.*\ 403\ .*$ 

ignoreregex =

但是当我使用fail2ban-regex命令testing它时,它会返回到下面

 Failregex: 32 total |- #) [# of hits] regular expression | 1) [32] ^<HOST> -.*"(GET|POST).*.php.*\ 403\ .*$ `- Ignoreregex: 0 total Date template hits: |- [# of hits] date format | [3266] Day/MONTH/Year:Hour:Minute:Second `- Lines: 3266 lines, 0 ignored, 32 matched, 3234 missed Missed line(s): too many to print. Use --print-all-missed to print all 3234 lines 

你能帮我做一个正则expression式匹配403请求和打印出来的IP。 提前致谢

Solutions Collecting From Web of "fail2ban定期在nginx中查找403请求"

首先,你的例子日志entrys是/ 403和404, /你的正则表达式试图匹配PHP扩展和403代码。 难怪你没有任何的匹配。

所以,如果你的兴趣只是一个403错误条目,不管路径,这应该工作。

 ^<HOST> .* "(GET|POST) [^"]+" 403 

要调试你的正则表达式,你可以使用这个片段 。 请注意, <HOST>fail2ban预处理为(?:::f{4,6}:)?(?P<host>\S+)

根据@ saaj的回答,虽然四行日志没有匹配,但从完整日志的测试结果可以看出有32个匹配。 也就是说,新的模式(不包括php的扩展名)显然会捕获更多的403s。

比较简单的模式是: ^<HOST> .* 403

这可以从命令行进行测试:

fail2ban-regex '112.253.6.182 - - [08/Sep/2014:17:42:56 -0400] "GET / HTTP/1.1" 403 579 "baidu" "Mozilla/4.0" 50.117.86.72' '^<HOST> .* 403'

为了一个积极的结果,

fail2ban-regex '106.37.177.251 - - [08/Sep/2014:17:42:56 -0400] "GET /index.php HTTP/1.1" 404 576 "baidu" "Mozilla/4.0" 204.44.65.173' '^<HOST> .* 403'

对于否定的结果。