Fail2ban是Linux系统中防御SSH暴力破解最实用、部署成本最低的守门人,通过分析/var/log/auth.log或/var/log/secure中的失败登录记录,自动调用iptables或nftables封禁异常IP,封禁时长可配且到期自动解封。

Fail2ban 是 Linux 系统中防御 SSH 暴力破解最实用、部署成本最低的守门人——它不替代防火墙,而是通过分析 /var/log/auth.log(Debian/Ubuntu)或 /var/log/secure(RHEL/CentOS)中的失败登录记录,自动调用 iptables 或 nftables 封禁异常 IP,封禁时长可配,到期自动解封。
安装与服务启用
一行命令完成安装并开机自启:
- Ubuntu/Debian:
sudo apt update && sudo apt install -y fail2ban - CentOS/RHEL 8+:
sudo dnf install -y fail2ban(EPEL 已内置)
安装后服务默认启用,运行 sudo systemctl status fail2ban 应显示 active (running)。若未启动,执行 sudo systemctl enable --now fail2ban。
配置关键参数(务必修改 jail.local)
切勿直接编辑 /etc/fail2ban/jail.conf,先生成本地配置:
然后编辑 /etc/fail2ban/jail.local,重点调整以下两处:
-
[DEFAULT] 区块:设置全局白名单和基础策略
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 203.0.113.5(填入你常用运维 IP)bantime = 1h(建议 30 分钟至 24 小时,慎用永久封禁 -1)findtime = 600(10 分钟内累计失败次数才计数)maxretry = 3(3 次失败即触发,兼顾安全与误操作容忍) -
[sshd] 区块:启用并确认路径适配
enabled = truelogpath = /var/log/auth.log(Ubuntu/Debian)logpath = /var/log/secure(RHEL/CentOS)backend = auto(自动适配 iptables/nftables,新系统推荐)
验证是否真正生效
配置保存后必须验证,避免“静默失效”:
- 重启服务:
sudo systemctl restart fail2ban - 查当前封禁状态:
sudo fail2ban-client status sshd(输出应含 “Currently banned: X”) - 实时观察动作:
sudo tail -f /var/log/fail2ban.log,尝试用错误密码 SSH 登录一次,几秒内应看到Found xxx.xxx.xxx.xxx和Ban xxx.xxx.xxx.xxx日志 - 确认日志在写入:
sudo tail -n 3 /var/log/auth.log,需有最新Failed password记录,否则 Fail2ban 无数据可分析
日常管理与避坑要点
几个高频问题点直接影响防护效果:
- 若使用密码登录,必须设强密码;更推荐提前启用 SSH 密钥认证,并在
/etc/ssh/sshd_config中设PasswordAuthentication no后重启 SSH - 误封自己?解封命令:
sudo fail2ban-client set sshd unbanip 1.2.3.4 - 封禁规则未生效?检查
sudo iptables -L -n | grep f2b-(iptables)或sudo nft list chain inet fail2ban filter_input(nftables) - 日志轮转(logrotate)后路径不变,Fail2ban 默认兼容;但若自定义了日志路径,需同步更新
logpath


















