Fail2Ban自定义Apache过滤器匹配失败问题求助
Fail2Ban自定义Apache过滤器匹配失败问题求助
嗨,我来帮你排查这个问题!你的核心问题在于自定义的failregex开头部分和你的Apache日志格式不匹配,导致正则完全无法匹配目标日志行。
咱们来拆解分析下:
- 你的Apache日志是默认的组合日志格式,行开头直接是客户端IP(也就是Fail2Ban识别的
<HOST>):72.139.194.229 - - [17/Nov/2023:01:08:57 +0000] "GET /dns-query HTTP/1.1" 302 4942 "-" "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Mobile Safari/537.36" - 但你写的failregex开头是
^.+?:\d+ <HOST> -.*",其中^.+?:\d+是用来匹配类似server.example.com:80这样的服务器地址+端口的,而你的日志里根本没有这部分内容,正则从第一步就匹配失败了。
解决方案
直接去掉failregex开头多余的服务器地址匹配部分,调整后的配置如下:
[Definition] #badagents = 360Spider|ZmEu|Auto Spider 1.0|zgrab/[0-9]*\.[0-9a-zA-Z]*|Wget\(.*\)|MauiBot.*|AspiegelBot.*|SemrushBot.*|PHP/.* badagents = failregex = ^<HOST> - - \[.*\] "(GET|POST|HEAD) /+dns-query.*$ ignoreregex =
修改后再运行测试命令:
fail2ban-regex /var/log/apache2/access.log /etc/fail2ban/filter.d/apache-custom.conf
应该就能看到匹配数变成1,不再出现missed line的提示了。
小提示
如果以后不确定日志对应的正则怎么写,可以参考Fail2Ban自带的Apache过滤器(比如/etc/fail2ban/filter.d/apache-auth.conf),里面的正则都是针对常见Apache日志格式优化过的,能给你不少参考思路。
备注:内容来源于stack exchange,提问作者learningtech
相关产品推荐
相关产品推荐

