fail2ban是linux中防御ssh暴力破解最直接有效的日志驱动守门人,通过监控auth.log或secure日志自动调用iptables/nftables临时封禁异常ip;需安装后创建jail.local配置enabled=true、maxretry=3、findtime=600、bantime=1h、ignoreip及正确logpath,并验证fail2ban-client状态与日志联动。

Fail2ban 是 Linux 运维中防御 SSH 暴力破解最直接有效的工具,它不替代防火墙,而是基于日志自动封禁异常 IP,配置简单、生效快、解封自动。
安装 Fail2ban 并启用服务
不同系统一行命令搞定:
- 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,否则升级时会被覆盖:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local sudo nano /etc/fail2ban/jail.local
重点调整两处:
-
[DEFAULT]区块:
linux-performance-analyzer下载Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
-
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 次即封,兼顾安全与容错) -
backend = auto(适配 iptables 或 nftables,新系统必备)
-
-
[sshd]区块:-
enabled = true(必须打开) -
logpath = /var/log/auth.log(Ubuntu/Debian)或/var/log/secure(RHEL/CentOS) - 确保路径与真实日志一致,否则 fail2ban “看不见”失败记录。
-
验证配置是否真正生效
改完配置不能只重启就完事,必须逐项确认:
- 重启服务:
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(或/var/log/secure)需有最新Failed password记录,否则 fail2ban 无数据可分析。
日常防护补充建议
Fail2ban 是守门人,但门锁本身也得结实:
- 密码登录务必设强密码;更推荐提前启用 SSH 密钥认证,并在
/etc/ssh/sshd_config中设PasswordAuthentication no - 若服务器长期暴露公网,可配合
ufw或nftables限制 SSH 端口仅对可信 IP 开放 - 定期检查
sudo fail2ban-client status sshd,发现误封可用sudo fail2ban-client set sshd unbanip xxx.xxx.xxx.xxx手动解封
不复杂但容易忽略。










