SSH 被暴力破解怎么办?实战排查与防护加固 核心要点图解,SSH 暴力破解可通过日志分析快速识别,重点查 /var/log/secure 或 auth.log。;立即禁用密码登录并启用密钥认证,能从根本上阻断暴力破解。;使用 Fail2ban 自动封禁恶意 IP,配合防火墙规则提升防护效率。;定期检查异常进程与网络连接,防止攻击者留后门。
SSH 被暴力破解怎么办?实战排查与防护加固 · 核心要点一图读懂(AegisX)

核心要点(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 被误封。