跨境独立站服务器fail2ban拦截SSH爆破登录
为什么需要Fail2ban保护SSH
跨境独立站服务器暴露在公网后,SSH端口几乎每时每刻都会收到来自各地的暴力破解尝试。
攻击者利用脚本不断尝试弱口令,一旦成功登录,服务器就可能被植入后门、挖矿程序或被用于发送垃圾邮件。
Fail2ban通过分析日志文件,检测到连续登录失败后自动将源IP加入iptables黑名单,直接拦截后续连接,让暴力破解彻底失效。
安装Fail2ban前的准备工作
- 一台运行CentOS 7/8、Ubuntu 20.04+或Debian 10+的跨境独立站服务器
- 已拥有root权限或sudo权限的SSH账号
- 确认系统已安装iptables或firewalld(大多数云服务器默认自带)
- 保证服务器时间同步(用
date命令检查,不准确的话先执行apt install ntpdate && ntpdate ntp.aliyun.com或yum install ntpdate -y && ntpdate ntp.aliyun.com)
如果使用的是宝塔面板等可视化面板,同样需要通过SSH终端执行命令。
三步完成Fail2ban安装与配置
第一步:安装Fail2ban
根据系统版本执行对应命令:
# CentOS / Rocky Linux / AlmaLinux
yum install epel-release -y
yum install fail2ban -y
# Ubuntu / Debian
apt update
apt install fail2ban -y
安装完成后,启动并设置开机自启:
systemctl enable fail2ban
systemctl start fail2ban
检查状态:
systemctl status fail2ban
输出显示active (running)说明启动成功。
第二步:配置SSH防护规则
Fail2ban的主配置文件为/etc/fail2ban/jail.conf,但官方建议通过/etc/fail2ban/jail.local覆盖自定义设置,避免升级时被覆盖。
创建并编辑jail.local:
nano /etc/fail2ban/jail.local
粘贴以下配置(可根据需求修改参数):
[DEFAULT]
# 封禁时间:单位秒,3600秒=1小时
bantime = 3600
# 查找失败次数的时间窗口:单位秒,600秒=10分钟
findtime = 600
# 在findtime内失败次数达到此值即封禁
maxretry = 3
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log # Ubuntu/Debian路径
# logpath = /var/log/secure # CentOS/RHEL路径
注意:
- 如果SSH端口不是默认22,需将port = ssh改为实际端口号,例如port = 2222
- 日志路径根据系统选择,Ubuntu/Debian为/var/log/auth.log,CentOS为/var/log/secure,如果路径错误Fail2ban将无法读取日志。
保存文件(nano中按Ctrl+X,输入Y回车确认)。
第三步:重启Fail2ban并查看状态
systemctl restart fail2ban
# 查看当前监狱(jail)状态
fail2ban-client status
# 查看sshd监狱的详细信息
fail2ban-client status sshd
如果配置正确,sshd监狱会显示Status: OK,且Currently failed: 0,Total banned: 0。
必须注意的三个避坑点
- 别把自己封在外面:配置
maxretry = 2或bantime = 86400(一天)可能导致自己输错几次密码就被封掉。建议先使用较宽松的maxretry = 5、bantime = 600测试一天,确认稳定后再收紧。如果自己被封,可通过云服务商VNC控制台登录服务器,执行fail2ban-client set sshd unbanip 你的IP解封。 - 日志路径要核对:不同系统的日志文件不同,路径写错会导致Fail2ban无法检测登录失败。用命令
ls -l /var/log/secure或ls -l /var/log/auth.log确认日志文件存在。如果使用容器或特殊配置,可能需要自定义logpath。 - SSH端口非默认时的处理:如果
port参数只写ssh,Fail2ban会默认拦截端口22。一定要将port改为实际端口号,例如port = 2222。另外,防火墙也需要放行该端口(一般已放行)。
快速验证效果并查看封禁记录
模拟一次SSH爆破登录:在另一台机器上尝试用错误密码登录你的服务器。
连续输错3次以上后,回到服务器执行:
fail2ban-client status sshd
输出中Banned IP list应出现刚才尝试的IP。
再用该IP重试SSH登录,你会看到连接被拒绝。
查看Fail2ban的日志文件(默认/var/log/fail2ban.log)了解详细封禁和恢复记录:
tail -f /var/log/fail2ban.log
常见问题解答
Q:Fail2ban启动失败,提示找不到日志文件怎么办?
A:检查jail.local中logpath配置是否与系统真实路径一致。CentOS默认日志路径是/var/log/secure,Ubuntu是/var/log/auth.log。如果日志文件不存在,可能是rsyslog未记录认证日志,安装rsyslog并重启服务即可。
Q:我想永久封禁某个IP怎么操作?
A:在[sshd]下添加bantime = -1表示永久封禁。更灵活的方式是手动添加iptables规则:iptables -A INPUT -s 1.2.3.4 -j DROP(但重启会失效,需要保存规则或使用fail2ban的action扩展)。
Q:Fail2ban会影响服务器性能吗?
A:基本不会。Fail2ban只监控few个日志文件,资源消耗极低。但日志增长过快时(例如频繁爆破),建议开启日志轮转(logrotate),避免磁盘写满。
结语
配置好Fail2ban后,跨境独立站服务器的SSH安全性会大幅提升。
建议每周用fail2ban-client status sshd检查一次封禁情况,结合日志了解攻击趋势。
如果你还需要保护Nginx、Apache等Web服务,可以在jail.local中继续添加相应的监狱规则(如[nginx-http-auth])。