问题出现得很突然,日志倒是留得挺全。CentOS 7.9 上装 fail2ban 防 SSH 爆破,服务状态正常,jail 列表里 sshd 也是 enabled,可爆破照旧,fail2ban-client status sshd 显示失败次数一直是零。

刚开始盯着「failregex 和 sshd 的实际日志格式对不上,正则匹配不到」,折腾了半个多小时,排掉了。

把日志和配置对完,能解释这个现象的基本就这几处。jail 里 logpath 指向 /var/log/auth.log,CentOS 上实际是 /var/log/secure。还有一种是backend 设成 polling,文件轮转后 inode 变了就跟丢。

少数情况下是firewalld 没开,banaction 用的 firewallcmd 执行失败但不报错。

动手时先看 jail 实际读的是哪个文件

fail2ban-client status sshd

再往下用自带工具测正则能否匹配

fail2ban-regex /var/log/secure /etc/fail2ban/filter.d/sshd.conf

接着改对 logpath 和 backend 后重启

systemctl restart fail2ban && fail2ban-client status sshd

末了确认封禁动作真的落到防火墙

firewall-cmd --list-rich-rules | head

白天有业务在跑,能验证的部分都压到了晚上做。

改完先别撤,确认这几项。fail2ban-client status sshd 里失败次数随爆破增长,Banned IP list 出现来源地址,firewalld 里能看到对应的 rich rule。

这里还有个坑。先用 fail2ban-regex 验正则,不然改多少遍配置都白搭;banaction 要和系统实际的防火墙匹配,用 nftables 的机器别配成 iptables。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189