
核心要点(TL;DR)
- SSH 暴力破解可通过日志分析快速识别,重点查 /var/log/secure 或 auth.log。
- 立即禁用密码登录并启用密钥认证,能从根本上阻断暴力破解。
- 使用 Fail2ban 自动封禁恶意 IP,配合防火墙规则提升防护效率。
- 定期检查异常进程与网络连接,防止攻击者留后门。
凌晨三点,监控告警突然响起:服务器 CPU 飙高、SSH 登录日志里塞满了来自全球各地的失败尝试。这不是演习,而是你的服务器正在被暴力破解。如果置之不理,攻击者可能已经拿到 shell,植入后门、窃取数据。本文面向运维和站长,提供一套从紧急排查到长期加固的实战步骤,让你在 30 分钟内控制局面。
一、紧急排查:确认是否已被入侵
首先,别急着改密码。先登录服务器(如果还能登录),检查以下关键点:
- 登录日志分析:CentOS 查看
/var/log/secure,Ubuntu 查看/var/log/auth.log。运行grep 'Failed password' /var/log/secure | wc -l统计失败次数。如果数字在几分钟内达到几百,说明正在被爆破。 - 成功登录记录:
grep 'Accepted password' /var/log/secure,检查是否有非你本人或非白名单 IP 的成功登录。特别注意陌生 IP 和异常时间。 - 当前登录用户:
who或w,查看是否有未知会话。 - 异常进程:
top或ps aux --sort=-%cpu | head -20,寻找占用资源极高的陌生进程,如挖矿程序。 - 网络连接:
netstat -antp或ss -antp,检查是否有可疑的外连,尤其是 3333、4444 等常见木马端口。 - 计划任务:
crontab -l和ls -la /etc/cron.*,攻击者常留后门。 - 用户账号:
cat /etc/passwd,检查是否有新增的 UID 为 0 的账号。
如果发现异常,立即断开网络或关机,保留现场后重装系统。若一切正常,进入下一步加固。
二、立即加固:阻断暴力破解
确认未被入侵后,立即采取以下措施,让攻击者无从下手。
1. 修改 SSH 默认端口
编辑 /etc/ssh/sshd_config,将 Port 22 改为其他端口(如 22222),然后重启 SSH:systemctl restart sshd。注意防火墙需放行新端口。
2. 禁用密码登录,启用密钥认证
这是最有效的防护。在客户端生成密钥对:ssh-keygen -t rsa -b 4096,然后上传公钥:ssh-copy-id -p 22222 user@host。测试密钥登录成功后,编辑 sshd_config,设置:
PasswordAuthentication no PubkeyAuthentication yes
重启 SSH 服务。此后,密码爆破彻底失效。
3. 使用 Fail2ban 自动封禁
安装 Fail2ban:yum install fail2ban 或 apt install fail2ban。创建本地配置 /etc/fail2ban/jail.local,内容如下:
[sshd] enabled = true port = 22222 filter = sshd logpath = /var/log/secure maxretry = 3 bantime = 3600
启动并启用:systemctl enable --now fail2ban。查看封禁列表:fail2ban-client status sshd。
4. 配置防火墙白名单
如果管理 IP 固定,使用 iptables 或 firewalld 只允许特定 IP 访问 SSH 端口。例如:firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="1.2.3.4" port port="22222" protocol="tcp" accept',然后重载防火墙。
三、深度清理:检查后门与持久化
即使没有明显入侵迹象,也建议执行以下检查,确保系统干净。
- 检查 SUID 文件:
find / -perm -4000 -type f 2>/dev/null,对比正常列表。 - 检查隐藏文件:
find / -name ".*" -type f 2>/dev/null | grep -v "/proc\|/sys"。 - 检查 SSH 授权密钥:
cat ~/.ssh/authorized_keys,移除未知公钥。 - 检查系统日志:
journalctl -u sshd --since "1 hour ago",寻找异常。 - 使用 rootkit 检测工具:如 rkhunter、chkrootkit,但需注意误报。
四、长期防护:构建纵深防御
单一措施不够,建议组合以下策略:
| 措施 | 作用 | 实施难度 |
|---|---|---|
| 密钥认证 | 杜绝密码爆破 | 低 |
| Fail2ban | 自动封禁恶意 IP | 低 |
| 防火墙白名单 | 限制访问来源 | 中 |
| 双因素认证 | 增加额外验证 | 中 |
| 跳板机 | 隐藏真实服务器 | 高 |
对于高安全需求场景,可考虑部署 AegisX 的入侵检测与自动响应能力,实时阻断暴力破解并告警。
五、行动建议
立即执行以下清单:1) 检查日志确认是否被入侵;2) 修改 SSH 端口并禁用密码登录;3) 部署 Fail2ban;4) 配置防火墙白名单;5) 定期审计日志与进程。安全是持续的过程,建议每月进行一次安全检查,并关注最新漏洞情报。
常见问题(FAQ)
如何判断服务器是否正在被 SSH 暴力破解?
查看 SSH 日志中频繁的失败登录记录即可判断。Linux 系统通常记录在 /var/log/secure(CentOS)或 /var/log/auth.log(Ubuntu)。使用命令 grep 'Failed password' /var/log/secure | wc -l 统计失败次数,若短时间内数量激增,或出现大量来自不同 IP 的尝试,即表明正在被暴力破解。
SSH 暴力破解成功后攻击者通常会做什么?
攻击者成功登录后,通常会立即创建隐藏账号、植入挖矿木马或后门程序,并尝试横向移动。常见迹象包括:异常进程占用 CPU、新增未知用户、计划任务中出现可疑脚本、以及对外发起大量网络连接。应尽快检查这些方面,防止损失扩大。
除了改端口和禁用密码,还有哪些有效的 SSH 防护措施?
可以部署 Fail2ban 自动封禁多次失败的 IP,使用防火墙限制访问来源 IP,启用双因素认证(2FA),以及定期更新 SSH 服务端软件。此外,将 SSH 服务绑定到内网地址或通过跳板机访问,也能大幅减少暴露面。
如何配置 SSH 密钥登录并禁用密码认证?
首先在客户端生成密钥对:ssh-keygen -t rsa -b 4096,然后将公钥上传到服务器:ssh-copy-id user@host。接着编辑服务器 /etc/ssh/sshd_config,设置 PasswordAuthentication no 和 PubkeyAuthentication yes,最后重启 SSH 服务:systemctl restart sshd。务必先测试密钥登录成功后再禁用密码。
使用 Fail2ban 防护 SSH 时需要注意什么?
注意配置合理的封禁时间和阈值,避免误封正常用户。默认配置可能封禁时间过短,建议设置 bantime = 3600 或更长。同时确保 Fail2ban 的日志路径与系统实际一致,并定期检查封禁列表,防止重要 IP 被误封。