Fail2ban需三要素对齐才生效:日志路径正确、触发条件合理、防火墙动作执行;必须用jail.local覆盖配置,启用sshd jail并设maxretry=3、findtime=10m、bantime=1h、ignoreip含运维IP、logpath匹配实际日志,再验证banaction与防火墙规则是否生效。

Fail2ban 不是装完就起效的“自动开关”,它靠实时读取 SSH 认证日志、识别失败模式、再调用系统防火墙封禁 IP。真正起作用的是三件事对齐:日志路径写对了、触发条件设合理了、防火墙动作真执行了。
安装与配置起点必须规范
别动 /etc/fail2ban/jail.conf —— 它会在升级时被覆盖。正确做法是:
- 运行
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local创建本地配置 - Debian/Ubuntu 执行
sudo apt update && sudo apt install -y fail2ban;RHEL/CentOS 先启用 EPEL,再安装 - 安装后立即启用并启动:
sudo systemctl enable --now fail2ban - 确认服务状态:
sudo systemctl status fail2ban显示 active (running)
SSH 防护关键参数要贴合实际
编辑 /etc/fail2ban/jail.local,在 [sshd] 区块中确保以下设置:
-
enabled = true—— 开关必须打开,否则整个 jail 不工作 -
maxretry = 3—— 公网服务器建议设为 3,比默认 5 更早拦截扫描器 -
findtime = 10m—— 10 分钟滑动窗口,兼顾灵敏与防误判 -
bantime = 1h—— 封禁 1 小时可打断多数自动化脚本;慎用-1(永久封禁) -
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 203.0.113.55—— 填入你日常管理的 IP 或网段,防止输错密码把自己锁在外面 -
logpath = /var/log/auth.log(Ubuntu/Debian)或/var/log/secure(RHEL/CentOS)—— 必须和真实日志路径完全一致
防火墙联动必须验证到位
Fail2ban 只发指令,封禁靠底层防火墙执行。常见失效就卡在这步:
- 查当前后端:
sudo fail2ban-client get sshd banaction;若返回iptables-multiport但系统没 iptables,需补装 - 新版系统多用 nftables,可在
[DEFAULT]段加backend = auto或backend = systemd - 验证规则是否写入:
sudo iptables -L f2b-sshd -n(iptables)或sudo nft list chain inet fail2ban filter_input | grep sshd(nftables) - 实时看动作是否发生:
sudo tail -f /var/log/fail2ban.log,出现Ban xxx.xxx.xxx.xxx表示链路通了
日常运维和应急要点
配置不是一劳永逸,得定期检查和响应:
- 查当前封禁情况:
sudo fail2ban-client status sshd,关注 “Currently banned” 数值 - 手动解封某个 IP:
sudo fail2ban-client set sshd unbanip 203.0.113.55 - 若发现攻击 IP 已成功登录,先封源 IP,再排查账户、密钥、定时任务等入侵痕迹
- 建议前置加固:SSH 改高位端口、禁用密码登录(
PasswordAuthentication no)、只允密钥认证


















