You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx中ModSecurity的Fail2Ban多线正则配置失效问题排查

处理Nginx+ModSecurity下Fail2Ban正则匹配失效问题

问题背景

需优化Nginx环境中ModSecurity对应的Fail2Ban配置,目标为:

  • 正则覆盖完整ModSecurity审计日志块
  • 无需设置maxline参数
  • 精准触发IP封禁(客户端IP在modsec_audit.log中出现指定次数403/429错误时执行封禁)

新编写的正则在regex测试工具中验证通过,但应用到Fail2Ban 0.11.2中完全无法匹配日志。

现有配置

旧正则

^\[\S+ \S+\] \S+ ?(?:<IP6>|<IP4>) \S+ \S+ \S+\n[\s\S]*\n---([a-zA-Z0-9]{8})---F--\nHTTP\/[0-9]\.[0-9] ?(403|429)\s

新正则

---[a-zA-Z0-9]{8}---A--\n\[\d{2}\/[a-zA-Z]+\/\d{4}:\d{2}:\d{2}:\d{2} \S+\] \d+\.\d+ ?(?:<IP6>|<IP4>) \d{2,5} ((\d{1,3}\.){3}\d{1,3}|([0-9a-fA-F]{0,4}:){1,7}[0-9a-fA-F]{0,4}) \d{2,5}\n(.*\n){1,}?HTTP\/(1|2)\.(1|0) ?(403|429)(.*\n){1,}?---[a-zA-Z0-9]{8}---Z--

当前Fail2Ban过滤器配置

[Definition]
datepattern = ^\[%%d/%%m/%%Y:%%H:%%M:%%S\s
failregex = ^---[a-zA-Z0-9]{8}---A--\n\[\d{2}\/[a-zA-Z]+\/\d{4}:\d{2}:\d{2}:\d{2} \S+\] \d+\.\d+ ?(?:<IP6>|<IP4>) \d{2,5} ((\d{1,3}\.){3}\d{1,3}|([0-9a-fA-F]{0,4}:){1,7}[0-9a-fA-F]{0,4}) \d{2,5}\n(.*\n){1,}?HTTP\/(1|2)\.(1|0) ?(403|429)(.*\n){1,}?---[a-zA-Z0-9]{8}---Z--

ignoreregex =

问题原因分析

  1. 日期格式不匹配:datepattern使用%m(数字月份),但ModSecurity日志中的月份为英文缩写(如Jan/Feb),导致Fail2Ban无法正确解析日志时间,干扰匹配逻辑。
  2. 多行处理机制差异:Fail2Ban的正则引擎对多行日志的处理与通用测试工具不同,直接用\n分割行无法适配其日志读取方式,且未启用单行模式让.匹配换行符。
  3. IP捕获组不规范:未用(?P<ip>)明确标记IP捕获组,Fail2Ban无法识别需封禁的目标IP。

解决方案

1. 修正日期格式

将datepattern修改为匹配英文月份缩写的格式:

datepattern = ^\[%%d/%%b/%%Y:%%H:%%M:%%S\s

2. 调整正则表达式

启用单行模式(?s)处理跨换行内容,明确标记IP捕获组,简化正则结构:

failregex = ^---[a-zA-Z0-9]{8}---A--\s*\[(?P<date>\d{2}/[a-zA-Z]+/\d{4}:\d{2}:\d{2}:\d{2} \S+)\] \d+\.\d+ ?(?:<IP6>|<IP4>) \d{2,5} (?P<ip>(?:\d{1,3}\.){3}\d{1,3}|(?:[0-9a-fA-F]{0,4}:){1,7}[0-9a-fA-F]{0,4}) \d{2,5}(?s).*HTTP/(1|2)\.(1|0) ?(403|429).*---[a-zA-Z0-9]{8}---Z--

3. 验证配置

使用Fail2Ban自带工具测试正则匹配情况:

fail2ban-regex /var/log/modsec_audit.log /etc/fail2ban/filter.d/your-filter.conf

根据输出结果调整正则,确保匹配到目标日志块。

内容的提问来源于stack exchange,提问作者sivsoft

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 02:41:03