一,现象:
原来的过滤规则
failregex = ^<HOST> .* "(GET|POST|HEAD).*HTTP.*" (404|400|403|503) .*$
ignoreregex =.*(robots.txt|favicon.ico|jpg|png)
一条nginx的记录
35.203.211.193 - - [21/Oct/2024:04:59:19 +0800] "\x00\x00\x00f\xFESMB@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
\x001234567890123456$\x00\x01\x00\x01\x00\x00\x00\x00\x00\x00
\x001234567890123456\x00\x00\x00\x00\x00\x00\x00\x00\x02\x02" 400 150 "-" "-" "-" 0.310
测试:原过滤规则对类似的nginx日志记录无效
[root@web filter.d]# fail2ban-regex /logs/www.access_log /etc/fail2ban/filter.d/nginx404.conf --print-all-matched
二,解决
给过滤规则新增加一行,如下:
^<HOST> .* ".*\\x.*" (404|400|403|503) .*$
增加后如下:
failregex = ^<HOST> .* "(GET|POST|HEAD).*HTTP.*" (404|400|403|503) .*$
^<HOST> .* ".*\\x.*" (404|400|403|503) .*$
ignoreregex =.*(robots.txt|favicon.ico|jpg|png)
测试效果:
[root@web filter.d]# fail2ban-regex /logs/www.access_log /etc/fail2ban/filter.d/nginx404.conf --print-all-matched
...
| 35.203.211.193 - - [21/Oct/2024:04:59:19 +0800] "\x00\x00\x00f\xFESMB@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x001234567890123456$\x00\x01\x00\x01\x00\x00\x00\x00\x00\x00\x001234567890123456\x00\x00\x00\x00\x00\x00\x00\x00\x02\x02" 400 150 "-" "-" "-" 0.310
...
已经可以看到原来未检测的记录了
标签:filter,404,过滤,403,fail2ban,400,x00 From: https://www.cnblogs.com/architectforest/p/18491860