Fail2Ban运行状态需验证三要素:服务存活、日志解析活跃、封禁规则生效;通过fail2ban-client status查看jail匹配数增长,tail -f /var/log/fail2ban.log排查日志读取异常,iptables -L f2b-sshd -n或nft list确认防火墙规则真实写入,三者缺一不可。

Fail2Ban 的运行状态不能只靠“没报错”来判断,真正关键的是它是否在持续监控、能否及时匹配攻击、封禁动作有没有生效。监控核心在于三件事:服务进程存活、日志解析活跃度、封禁规则实际生效。告警必须围绕这三点设计,否则容易漏掉静默失效或规则失配的情况。
检查 Fail2Ban 服务与日志解析状态
服务运行只是基础,重点要看它是否真正在读日志、触发计数:
- 执行 fail2ban-client status 查看各 jail 当前状态,确认 Number of jails 和启用的 jail 列表一致,且每个 jail 显示 Enabled 和 Found 数值在缓慢增长(说明日志正被解析)
- 用 fail2ban-client status sshd(或其他 jail 名)查看具体 jail 的匹配统计,若 Currently banned 长期为 0,但 auth.log 中有明显失败登录,说明 filter 规则可能失效或日志路径配置错误
- 检查 tail -f /var/log/fail2ban.log,留意是否有 Warning: Unable to read log file 或 No file matches current glob 类提示,这是日志路径权限或通配符配置出错的直接信号
验证防火墙封禁规则是否真实生效
Fail2Ban 封 IP 是调用 iptables/nftables 实现的,必须确认规则已写入并生效:
- 运行 iptables -L f2b-sshd -n(或对应 jail 名),查看封禁链是否存在、条目是否随攻击增加而更新;若链为空或不存在,说明 action 动作未执行成功
- 对使用 nftables 的系统,执行 nft list chain inet fail2ban filter_input(路径依实际配置而定),确认 fail2ban 相关 chain 和 rule 存在
- 对比 fail2ban-client get sshd banned 输出的 IP 列表,和 iptables -L f2b-sshd -n | awk '{print $4}' 提取的 IP 是否一致,不一致说明封禁未同步或规则被其他工具覆盖
配置可落地的实时告警指标
告警不是越多越好,应聚焦高价值信号,避免噪音:
-
服务中断告警:通过 systemd 监控
systemctl is-active --quiet fail2ban || echo "Fail2Ban down",配合 cron 每分钟检测,异常即触发钉钉/邮件 - 日志断流告警:若某 jail 在 5 分钟内 Found 计数无变化,且该服务(如 Nginx)本身有正常访问,说明日志路径失效或 filter 失效,需立即检查
-
封禁失效告警:当
fail2ban-client get sshd banned返回非空,但iptables -L f2b-sshd -n无对应规则时,判定 action 异常,触发高优先级告警 - 避免依赖单一日志量——比如只监控 auth.log 行数增长,无法区分是正常登录还是攻击,必须结合 fail2ban 自身状态输出做判断
不复杂但容易忽略

















