我想找到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命令测试它时,它返回如下
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

你能帮我做一个匹配403个请求的正则表达式并打印出ip吗。提前谢谢

最佳答案

首先,您的示例日志条目是/的403和/index.php的404,而regex试图匹配php扩展和403代码。难怪你没有对手。
因此,如果您的兴趣只是403错误条目,而不考虑路径,那么这应该是可行的。

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

要调试正则表达式,可以使用this snippet。注意,fail2ban将<HOST>预处理为(?:::f{4,6}:)?(?P<host>\S+)

关于regex - fail2ban常规在nginx中找到403请求,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25778420/

10-14 15:35