Linux系统VPS服务器SSH暴力破解防护配置指南
文章分类:行业新闻 /
创建时间:2025-09-01
使用Linux系统的VPS服务器时,SSH(Secure Shell,安全外壳协议)暴力破解是绕不开的安全挑战。攻击者通过批量尝试用户名和密码组合,试图突破服务器防线,一旦成功就可能导致数据泄露、恶意程序植入等严重后果。本文结合实际运维经验,从现象识别到防护配置,为你提供一套可落地的SSH暴力破解防护方案。
SSH暴力破解的典型特征与识别
SSH暴力破解攻击有明显的行为特征:短时间内同一IP地址反复尝试登录,系统日志会留下大量"Failed password"记录。要识别这类攻击,第一步是查看认证日志。在终端输入命令:
cat /var/log/auth.log | grep 'Failed password'
这条命令会筛选出所有密码登录失败的记录。如果发现类似"Failed password for invalid user root from 192.168.1.1 port 43212 ssh2"的条目反复出现,且源IP(示例中192.168.1.1)在30分钟内出现超过10次失败尝试,基本可判定为暴力破解攻击。
进一步统计攻击IP的活跃程度,可使用复合命令:
cat /var/log/auth.log | grep 'Failed password' | awk '{print $11}' | sort | uniq -c | sort -nr
输出结果中,第一列是失败次数,第二列是攻击IP。例如显示"23 103.245.222.15",说明该IP在日志统计周期内尝试了23次密码登录。
三步构建SSH防护体系
第一步:修改默认端口降低暴露风险
SSH默认使用22号端口,攻击者扫描工具会优先探测这个端口。将端口改为1024-65535之间的未被使用端口(如2222),能显著降低被针对性扫描的概率。具体操作:
1. 编辑SSH服务配置文件:`sudo nano /etc/ssh/sshd_config`
2. 找到"Port 22"行,修改为"Port 2222"(建议选择非常用端口,如5912)
3. 保存退出后重启服务:`sudo systemctl restart sshd`
注意:修改后需用新端口连接服务器(如`ssh user@server_ip -p 2222`),建议记录新端口避免遗忘。
第二步:启用密钥认证替代密码登录
密码认证存在被撞库破解的风险,密钥认证通过公私钥对验证,安全性更高。操作步骤如下:
- 本地生成密钥对(Windows用Git Bash,Linux/macOS直接终端操作):`ssh-keygen -t rsa -b 4096`(按提示回车即可,建议设置密钥密码增强保护)
- 上传公钥到服务器:`ssh-copy-id -i ~/.ssh/id_rsa.pub user@server_ip -p 新端口号`
- 禁用密码认证:编辑`sshd_config`文件,将"PasswordAuthentication yes"改为"no",保存后重启SSH服务。
注意:私钥文件(~/.ssh/id_rsa)需妥善保管,丢失后无法恢复,建议同时备份到安全存储设备。
第三步:安装Fail2ban自动封禁攻击IP
Fail2ban是开源的入侵防御工具,通过监控日志自动封禁频繁失败的IP。以Debian/Ubuntu系统为例:
1. 安装工具:`sudo apt-get update && sudo apt-get install fail2ban -y`
2. 复制默认配置(避免覆盖官方文件):`sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local`
3. 编辑jail.local文件,在[sshd]部分添加:
maxretry = 5 # 5次失败尝试
findtime = 10m # 10分钟内统计
bantime = 1h # 封禁1小时
4. 启动服务并设置开机自启:`sudo systemctl start fail2ban && sudo systemctl enable fail2ban`
配置完成后,Fail2ban会实时监控/auth.log,对触发规则的IP自动添加iptables封禁规则。
通过修改默认端口减少暴露面、启用密钥认证提升身份验证强度、配合Fail2ban自动防御,这三重防护能有效抵御90%以上的SSH暴力破解攻击。实际运维中建议定期检查/auth.log日志,调整Fail2ban的maxretry和bantime参数(如生产环境可降低maxretry至3),持续优化防护策略。