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

如何在Fail2ban中编写匹配带端口或逗号后缀IP地址的正则表达式

如何在Fail2ban中编写匹配带端口或逗号后缀IP地址的正则表达式

嗨Storm,别担心英语的问题~我来帮你搞定这个Fail2ban的正则匹配难题!

从你给出的日志片段来看,问题确实出在IP地址后面跟着的:端口,或者直接,——默认的<HOST>占位符没法自动忽略这些后缀,所以我们需要自定义正则来精准提取纯IP地址。

核心思路

我们需要写一个正则,既能匹配IP:端口,的格式,也能匹配IP,的格式,同时只捕获前面的IP部分作为封禁目标。

具体配置方法

  1. 编辑你的Fail2ban过滤规则文件(比如/etc/fail2ban/filter.d/smtp-spam.conf,文件名可以自定义)
  2. 写入以下配置内容:
[Definition]
# 先定义一个匹配IPv4地址的正则(如果需要严格匹配0-255的网段,可以用注释里的版本)
_host = \b(?:\d{1,3}\.){3}\d{1,3}\b
# 严格版IPv4正则:_host = \b(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\b

# 匹配日志行的完整正则,覆盖两种IP后缀情况
failregex = ^\[[^\]]+\] SMTP Spam attack detected from <_host>(?::\d+,|,).*$
ignoreregex = 

配置解释

  • ^\[[^\]]+\] :匹配日志开头的时间戳部分(比如[08/Apr/2023 17:48:27] )
  • <_host>:就是我们上面定义的IP地址正则,负责捕获纯IP
  • (?::\d+,|,):非捕获组,用来匹配IP后面的两种后缀情况——要么是:端口号,,要么是直接,
  • .*$:匹配日志行剩下的所有内容

验证正则是否有效

配置好后,你可以用Fail2ban自带的测试工具验证:

fail2ban-regex "/var/log/your-smtp-log.log" "/etc/fail2ban/filter.d/smtp-spam.conf"

如果输出里显示“Matches”数量正确,就说明正则生效了。

额外扩展

如果你的日志里还存在IP后面没有任何后缀的情况(比如直接以IP结尾),可以把正则里的后缀部分改成(?::\d+,|,|$),这样就能同时匹配IP单独出现的场景。

这样应该就能完美匹配你日志里的各种IP格式啦,有问题再随时问~

备注:内容来源于stack exchange,提问作者Storm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 14:53:00