Linux fail2ban自动封禁SSH暴力破解配置教程 Linux
前言
公网服务器 SSH 每天会收到大量密码爆破,手动封禁 IP 根本封不过来。fail2ban 通过读取服务日志,识别连续失败登录,自动把恶意 IP 加入防火墙封禁,超时后自动解封,是 SSH 防爆破的标准方案。本文讲解安装、配置 SSH jail、设置封禁时长、测试触发、开机自启的完整流程,适配 CentOS7/9 与 Ubuntu。
操作步骤
1. 安装 fail2ban
# CentOS/Rocky
sudo dnf install -y epel-release
sudo dnf install -y fail2ban
# Ubuntu
sudo apt install -y fail2ban
2. 创建自定义配置(不覆盖默认文件)
sudo vi /etc/fail2ban/jail.local
写入:
[DEFAULT]
bantime = 86400
findtime = 600
maxretry = 5
[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/secure
maxretry = 5
bantime = 86400
Ubuntu 的日志路径是 /var/log/auth.log,需把 logpath 改成它。
3. 启动并设置开机自启
sudo systemctl enable --now fail2ban
sudo systemctl status fail2ban
4. 查看 SSH jail 状态
sudo fail2ban-client status sshd
5. 手动查看与解封
sudo fail2ban-client get sshd banned
sudo fail2ban-client set sshd unbanip 1.2.3.4
6. 测试触发(用错误密码连续登录)
连续输错 5 次后再次连接会被拒绝,状态里能看到该 IP。
常见坑
- logpath 写错(CentOS 用 secure,Ubuntu 用 auth.log),fail2ban 读不到日志不封禁。
- 只写 default 没启用 sshd jail,enabled 没设为 true。
- 防火墙是 nftables/ufw,fail2ban 默认动作不匹配,需配置 banaction。
- maxretry 设太小,正常用户输错密码也被封。
- 自定义端口 SSH,port 要改成实际端口,否则规则无效。
- 同时用了云安全组,fail2ban 在本机封禁,两层互不冲突。
- 日志被 logrotate 切割后路径变化,注意同步。
总结
fail2ban 防爆破核心:装包 → jail.local 启用 sshd、配 maxretry/bantime/findtime → 启动自启 → fail2ban-client status 验证。日志路径和封禁动作是两大易错点。它解决密码爆破,但更彻底的是密钥登录+关闭密码认证,两者配合最稳。
遇到问题加QQ23979811 协助处理