fail2ban 是防止 ssh 密码暴力破解最直接有效的手段,通过实时分析日志自动封禁异常 ip,流程为识别失败登录→达阈值→调用防火墙封禁→定时解封,支持主流发行版并需配置 jail.local 及适配防火墙后端。

安装与启动(一步到位)
Ubuntu/Debian 系统执行:
sudo apt update && sudo apt install fail2ban -y
CentOS/RHEL 系统先启用 EPEL,再安装:
sudo yum install epel-release -y && sudo yum install fail2ban -y
安装完成后服务会自动启用并运行。确认状态:
sudo systemctl is-active fail2ban
返回 active 即表示正常运行。
配置 jail.local(避免覆盖默认文件)
不要直接改 /etc/fail2ban/jail.conf,而是创建本地配置:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
编辑该文件:
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
sudo nano /etc/fail2ban/jail.local
在 [sshd] 区块中确保以下几项已设置:
- enabled = true(必须开启)
- maxretry = 4(建议设为 4~6,兼顾安全与容错)
- findtime = 300(5 分钟内累计失败达 maxretry 就触发)
- bantime = 1h(封禁 1 小时,也可写成 3600 或 1d)
- ignoreip = 127.0.0.1/8 192.168.1.0/24 203.0.113.5(填你自己的办公 IP 或内网段)
- logpath = /var/log/auth.log(Ubuntu/Debian)或 logpath = /var/log/secure(CentOS/RHEL)
适配系统防火墙后端
新版 Ubuntu/Debian 默认用 nftables,旧版或 CentOS 多用 iptables。Fail2ban 需匹配实际后端才能生效:
- 检查当前防火墙:
sudo systemctl status nftables或sudo iptables -L -n | head -3 - 在
[DEFAULT]区块中指定:backend = auto(推荐)或 backend = systemd - 避免使用已弃用的
backend = polling,否则可能漏封
验证与日常管理
修改完配置后重启服务:
sudo systemctl restart fail2ban
立即验证是否生效:
-
sudo fail2ban-client status sshd—— 查看封禁总数和当前被封 IP 列表 -
sudo tail -f /var/log/fail2ban.log—— 实时观察 “Ban” 和 “Unban” 日志 - 故意输错 SSH 密码 4 次(在另一终端),等待约 30 秒后检查是否出现在封禁列表
- 手动解封:
sudo fail2ban-client set sshd unbanip 192.0.2.100
注意:操作前务必开两个 SSH 连接窗口,防误封导致失联。










