服务器fail2ban拦截SSH爆破
为什么你的SSH需要fail2ban
SSH暴力破解是服务器最常见的攻击之一。
攻击者通过脚本不断尝试用户名和密码,一旦中招,服务器就可能沦陷。
fail2ban能动态监测日志,发现多次失败登录后自动封禁IP,彻底堵死爆破。
更重要的是,它配置简单,新手也能快速上手。
安装fail2ban:一条命令搞定
根据你的系统选择对应命令:
- CentOS / Rocky Linux / AlmaLinux:
yum install epel-release -y && yum install fail2ban -y - Ubuntu / Debian:
apt update && apt install fail2ban -y
安装完成后,先检查版本:fail2ban-server --version。
如果出现版本号,说明安装成功。
配置拦截规则:调整参数更合心意
fail2ban的主配置文件是 /etc/fail2ban/jail.conf,但我们不直接改它——新建一个 jail.local 来覆盖默认值。
这样未来升级不会丢失自定义设置。
执行以下命令创建并编辑:
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
vim /etc/fail2ban/jail.local
找到 [sshd] 区域,修改成类似这样:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log # Ubuntu/Debian 路径
# logpath = /var/log/secure # CentOS/Rocky 路径
maxretry = 5
bantime = 3600
findtime = 600
关键参数解释:
- maxretry:在
findtime秒内允许失败的次数,超过则封禁。 - bantime:封禁时长(秒),设为
-1可永久封禁。 - findtime:统计失败次数的时间窗口。
如果你的SSH端口不是22,需要相应修改 port 的值。
启动fail2ban并设置开机自启
配置完成后,启动服务:
systemctl start fail2ban
systemctl enable fail2ban
systemctl status fail2ban # 查看是否正常运行
如果状态显示 active (running),说明服务已经跑起来了。
测试拦截效果:模拟SSH爆破
在另一台机器上,故意用错误密码登录你的服务器几次(超过刚才设置的 maxretry):
ssh wronguser@你的服务器IP
连续输错密码后,再次尝试连接时会被拒绝。
你可以用 fail2ban-client status sshd 查看已被封的IP列表:
fail2ban-client status sshd
输出中 Banned IP list: 后如果看到你的测试IP,说明拦截成功。
也可以直接查看封禁日志:tail -f /var/log/fail2ban.log。
避坑提醒与高频问题
- 配置文件优先级:
jail.local优先级高于jail.conf。不要在jail.conf里直接改,否则升级会被覆盖。 - 防火墙冲突:fail2ban默认通过iptables或firewalld封禁IP。如果你自己配置了防火墙规则,要确保没有手动开白名单绕过。
- SSH端口非22:一定要在
[sshd]中正确设置port,否则fail2ban无法正确识别SSH连接。 - 日志路径错误:Ubuntu是
/var/log/auth.log,CentOS是/var/log/secure。不同系统务必核对。 - 如何解封IP:
fail2ban-client set sshd unbanip 被封的IP。
如果遇到fail2ban不生效,
先检查 fail2ban-client status sshd 的 Currently failed 是不是在增加,
如果一直为0,
说明日志路径或filter配置不对。
总结
通过以上几步,你的SSH爆破风险就能大大降低。
fail2ban还能扩展保护HTTP、FTP等服务,但保护SSH是最紧迫的。
建议你配置后持续观察几周,根据实际情况微调 bantime 和 maxretry。
遇到异常时,优先查看日志和状态命令,大部分问题都可以自己解决。