Fail2ban正则匹配正常但未封禁IP且出现DNS警告如何解决
核心原因:自定义过滤规则的正则表达式未正确捕获客户端IP地址。之前出现的DNS警告是Fail2Ban未从正则匹配结果中获取到合法IP,尝试将捕获到的其他异常字段做DNS解析生成,修改usedns仅能跳过解析步骤,无法解决IP捕获的本质问题。
解决步骤
第一步:修正自定义过滤规则的正则表达式
Fail2Ban要求过滤正则必须包含内置的
<HOST>捕获标记,用于提取客户端IP。你之前的正则没有将日志中的IP位置对应到<HOST>,才会出现捕获到异常值、解析出0.0.0.8的问题。
举个配置示例,若Apache错误日志中登录失败的条目格式为:[Tue Jun 11 14:32:20.123456 2024] [php:error] [pid 1234] [client 192.168.1.100:54321] 登录失败,用户名test密码错误
对应filter.d/login-ban.conf的正则应该写为:\[client <HOST>:\d+\] 登录失败.*
验证正则的IP捕获效果,执行命令:fail2ban-regex -v /var/log/apache2/error.log /etc/fail2ban/filter.d/login-ban.conf
确认输出中的IP Address list列表为真实的客户端IP,而非异常的0.0.0.8即表示正则正确。第二步:校验jail.local中规则配置
打开
jail.local检查login-ban规则的以下配置项:enabled = true:确保规则已启用logpath = /var/log/apache2/error.log:确保日志路径配置正确bantime、findtime、maxretry参数配置合理,未设置为0导致封禁不生效- 确认
banaction与服务器使用的防火墙匹配,使用iptables可留默认值,使用ufw需指定为banaction = ufw
第三步:重载服务验证效果
配置修改完成后执行命令重载Fail2Ban:
systemctl reload fail2ban
执行以下命令查看规则运行状态:fail2ban-client status login-ban
若IP list中出现触发规则的客户端IP,即表示功能恢复正常。
内容的提问来源于stack exchange,提问作者Jas Har

