fail2ban监控自定义审计日志并触发阻断的关键在于三步闭环:写对正则识别行为、配好监狱绑定日志与动作、确保日志路径和权限可读;需提取真实日志样本定位ip字段,编写专用filter文件定义failregex,创建jail配置启用监控,并验证调试。

Fail2Ban 监控自定义审计日志并触发阻断,关键在于三步闭环:写对正则识别行为、配好监狱绑定日志与动作、确保日志路径和权限可读。不是所有日志格式都能直接套用默认规则,必须按实际日志内容定制。
一、提取真实日志样本并定位 IP 字段
先确认你的审计日志真实格式。比如某系统记录失败登录如下:
[2026-06-10 09:15:22] AUDIT: auth_fail user=guest ip=203.12.44.178 reason=invalid_credential重点是找出 IP 出现的位置和固定前缀(这里是 ip=),再验证该字段是否始终为标准 IPv4/IPv6 格式。避免用模糊匹配(如 .*)导致误抓或漏抓。
二、编写专用 filter 文件
在 /etc/fail2ban/filter.d/ 下新建文件,例如 myaudit.conf:
- 定义
failregex,用<host></host>标签精准捕获 IP:
- 加一行
ignoreregex排除内部健康检查或白名单 IP(可选):
- 保存后用命令测试正则是否生效:
三、创建 jail 配置启用监控
在 /etc/fail2ban/jail.d/ 下新建 myaudit.local:
- 指定日志路径(确保 Fail2Ban 进程有读权限):
logpath = /var/log/audit/myapp.log- 绑定刚写的 filter:
filter = myaudit- 设定触发条件(示例:5 分钟内失败 4 次即封):
maxretry = 4findtime = 300-
bantime = 1800(封禁 30 分钟) - 启用并指定动作(默认 iptables):
enabled = trueaction = iptables[name=myaudit, port=all, protocol=all]
四、验证与调试要点
- 重启服务:
systemctl restart fail2ban - 查看 jail 是否加载成功:
fail2ban-client status myaudit - 手动模拟一条匹配日志追加到文件,等几秒后执行:
fail2ban-client status myaudit,观察 “Currently banned” 数量是否增加 - 检查 iptables 规则是否生成:
iptables -L f2b-myaudit -n - 注意 SELinux 或 auditd 的日志轮转策略——如果日志被
logrotate清空或重命名,Fail2Ban 可能丢失上下文,建议在logrotate配置中添加copytruncate或使用sharedscripts触发fail2ban-client reload











