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

fail2ban过滤正则表达式匹配失败问题技术咨询

解决fail2ban正则匹配失败的问题

让我们一步步排查你的正则问题,先拆解日志格式和当前正则的核心错误:

你的原始日志行

2018-02-06 07:40:20,954 fail2ban.actions [26058]: NOTICE [postfix-sasl] Ban 192.168.2.14

当前正则的关键问题

  • 特殊字符未转义:正则里的.(点号)和[](中括号)是特殊语法,必须用\转义才能匹配日志里的原字符。比如你写的([a-z])\w+.([a-z])\w+,这里的.会被当作“任意字符”而非日志里的点号;[([a-z])\w+-([a-z])\w+]里的中括号会被解析为字符集,完全不符合[postfix-sasl]的格式。
  • 进程ID匹配错误:日志里的[26058]是带中括号的数字串,你写的[\d ]只能匹配单个数字或空格,无法覆盖整个进程ID部分。
  • 缺少IP捕获规则:正则末尾的Ban *没有匹配后续的IP地址,fail2ban需要识别IP才能完成封禁,通常用内置占位符<HOST>来匹配任意IP/主机地址。

修正后的正则表达式

failregex = ^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3} fail2ban\.actions \[\d+\]: NOTICE \[([a-z0-9-]+)\] Ban <HOST>$

如果想兼容更多服务名称格式,可以简化成更通用的版本:

failregex = ^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3} \w+\.\w+ \[\d+\]: NOTICE \[\w+\] Ban <HOST>$

验证方法

用fail2ban-regex工具测试修正后的正则:

fail2ban-regex "2018-02-06 07:40:20,954 fail2ban.actions [26058]: NOTICE [postfix-sasl] Ban 192.168.2.14" "^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3} fail2ban\.actions \[\d+\]: NOTICE \[([a-z0-9-]+)\] Ban <HOST>$"

执行后应该会显示匹配成功,且正确捕获到目标IP。

额外提示

  • <HOST>是fail2ban的内置占位符,能自动识别IPv4、IPv6或主机名,比手动编写IP正则更可靠。
  • 如果需要匹配更多变体日志,可以适当用.*?匹配非关键部分,但要注意避免过度模糊导致误匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:21:08