Linux服务器如何配置Fail2ban?SSH暴力破解防护实战
2026-09-13 4 0
为什么Linux服务器需要Fail2Ban
公网Linux服务器只要开放SSH端口,通常就会持续收到自动化扫描和密码尝试。攻击者往往通过字典不断尝试 root、admin 等常见账户,如果服务器仍然允许密码登录,风险会进一步增加。
Fail2Ban的工作方式比较简单:监控SSH认证失败日志,当某个IP在规定时间内连续失败达到阈值后,就通过防火墙临时封禁这个IP。它并不能替代SSH密钥、权限控制和防火墙,但非常适合作为服务器的第一层自动化防护。
安装Fail2Ban
Ubuntu、Debian可以直接安装:
sudo apt update
sudo apt install fail2ban -y
安装完成后启动服务:
sudo systemctl enable --now fail2ban
检查运行状态:
sudo systemctl status fail2ban
如果看到 active (running),说明Fail2Ban已经正常运行。
配置SSH暴力破解防护
不要直接修改默认的 jail.conf,建议创建独立的 jail.local:
sudo nano /etc/fail2ban/jail.local
加入下面的配置:
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
backend = systemd
[sshd]
enabled = true
port = ssh
这里几个参数比较重要:
- bantime = 1h 表示封禁IP 1小时。
- findtime = 10m 表示在10分钟内统计失败次数。
- maxretry = 5 表示同一个IP达到5次失败后执行封禁。
现在很多Linux发行版使用systemd journal记录服务日志,因此 backend = systemd 对这类环境尤其重要。如果服务器仍然使用 /var/log/auth.log 等传统日志文件,则需要根据实际日志位置进行配置。Fail2Ban官方项目也明确支持从日志文件中检测认证失败。
保存后重新加载:
sudo systemctl restart fail2ban
检查SSH防护是否生效
查看Fail2Ban当前状态:
sudo fail2ban-client status
如果配置正确,一般可以看到:
Jail list: sshd
继续查看SSH规则:
sudo fail2ban-client status sshd
重点关注:
Currently banned
Total banned
Banned IP list
其中 Currently banned 是当前正在封禁的IP数量,Banned IP list 可以查看具体被封禁的地址。
如果没有检测到任何失败记录,可以先检查SSH日志。例如使用systemd的服务器可以执行:
sudo journalctl -u ssh --since "1 hour ago"
部分发行版服务名称可能是 sshd:
sudo journalctl -u sshd --since "1 hour ago"
如何手动解封IP
如果误封了自己的IP,可以使用:
sudo fail2ban-client set sshd unbanip 192.168.1.100
将IP替换成实际地址。
也可以查看当前封禁列表:
sudo fail2ban-client status sshd
服务器管理员应该特别注意白名单配置。如果自己的固定办公IP经常连接服务器,可以考虑设置 ignoreip,避免因为输错密码导致自己被封。
例如:
[DEFAULT]
ignoreip = 127.0.0.1/8 192.168.1.100
Fail2Ban之外,还应该做什么
Fail2Ban并不是SSH安全的全部。更推荐使用SSH密钥认证,并尽量关闭密码登录。Red Hat的安全指南同样建议使用密钥认证降低攻击面,并可以通过 PermitRootLogin 限制root直接登录。
例如确认已经配置好SSH密钥后,可以在 /etc/ssh/sshd_config 中考虑:
PasswordAuthentication no
PermitRootLogin no
修改SSH配置后先检查:
sudo sshd -t
确认没有语法错误,再重新加载SSH服务:
sudo systemctl reload sshd
不同发行版的服务名称可能是 ssh,修改前最好保持当前SSH连接不要关闭,并通过另一个终端测试新的登录方式,避免配置错误后无法远程进入服务器。Red Hat文档也要求SSH配置修改后重新加载或重启 sshd 才能生效。
另外,修改SSH默认端口只能减少针对22端口的自动化扫描,并不能真正阻止攻击者发现SSH服务。真正重要的是密钥认证、访问控制和防火墙策略。
总结
对于公网Linux服务器,一个实用的SSH安全方案可以采用 Fail2Ban + SSH密钥 + 禁止密码登录 + 禁止root直接登录 + 防火墙限制 的组合。
其中Fail2Ban负责自动发现大量失败登录并临时封禁IP,SSH密钥负责提高认证安全性,防火墙则进一步限制不必要的网络访问。完成配置后,定期通过 fail2ban-client status sshd 和系统日志检查防护是否正常,比单纯安装Fail2Ban更加可靠。