服务器被SSH暴力破解怎么办?fail2ban部署、端口加固与入侵痕迹排查

一、先看事实:你的服务器每天都在被爆破
任何有公网IP的服务器,SSH端口(22)都会被自动化扫描器持续光顾。看一眼日志就明白:
grep "Failed password" /var/log/auth.log | wc -l
# 一台普通公网服务器,一天几百到几千次失败登录是常态
爆破者的字典是 admin/root/ubuntu/teset123 这类弱口令组合。只要你的root密码足够强+默认配置没乱改,被"试出来"的概率其实很低;但裸奔的代价是日志爆炸、带宽被耗,而且只要成功一次,服务器就变成对方的挖矿机或肉鸡。下面按"立即加固→部署自动封禁→疑似被黑的排查"三段走。
二、五层SSH加固(按优先级)
第1层:禁用root密码登录
编辑/etc/ssh/sshd_config,两行配置:
PermitRootLogin prohibit-password # root只允许密钥登录
PasswordAuthentication no # 全局禁用密码登录(配好密钥后再做)
操作顺序注意:先按服务器SSH密钥登录配置:免密登录设置与安全加固指南把密钥配好、开个新终端验证能登,再改配置重启sshd——顺序反了会把锁在门外的自己锁死。
第2层:改掉默认22端口
改成一个高位端口(如50022),能挡掉九成的无差别扫描。这不是真正的安全措施(端口扫描器照样能发现),但大幅减少日志噪音,让真告警不被淹没。
第3层:fail2ban自动封禁
这是对付暴力破解的主力工具——监控日志,失败N次自动封IP:
apt install fail2ban
# /etc/fail2ban/jail.local 最小配置
[sshd]
enabled = true
maxretry = 5 # 5次失败即封
findtime = 600 # 10分钟窗口内计数
bantime = 86400 # 封禁24小时
启动后用fail2ban-client status sshd查看当前被封的IP列表。改了SSH端口记得在jail.local里同步port = 50022,否则fail2ban监控不到。
第4层:防火墙只放行需要的来源
SSH只对办公网段/VPN开放是最狠的防护:
ufw allow from 203.0.113.0/24 to any port 50022 proto tcp
运维在外的情况给跳板机(堡垒机)留口,内网机器只接受跳板机访问。防火墙与整体安全硬件的规划见服务器防火墙与安全硬件选型。
第5层:基础线补齐
系统更新常态化、不装来路不明的包、每台机器独立密码/密钥。企业多台服务器的完整加固清单见服务器安全基线配置指南:从BIOS密码到防火墙的企业级加固方案。
三、怎么判断是否已经被入侵
危险信号:CPU莫名满载(挖矿)、对外流量异常(当肉鸡)、出现陌生账号、sshd配置被改、定时任务里有奇怪的下载命令。排查四步:
- 登录痕迹:
last -F | head -30和lastb | head -30看成功/失败登录,对照自己运维的IP清单找陌生的 - 当前进程:
top找CPU高的陌生进程名(挖矿木马常伪装成[kworker]样式但不在[]里),ls -l /proc/可疑PID/exe定位真实文件路径 - 持久化后门:查crontab(root和所有用户)、/etc/cron.*、systemd里陌生服务、/root/.ssh/authorized_keys有没有被塞公钥
- 对外连接:
ss -tnp看异常外联目标(矿池端口3333/4444等)
确认被入侵后的处置原则:不要边杀毒边保留现场——重要业务先迁移,整机重装是最干净的选项;取证需求(保留日志、镜像)交给专业响应。完整的被黑应急流程见服务器被黑了怎么办?中毒、勒索、挖矿的应急响应完整流程。
四、Windows服务器怎么办
同样的逻辑平移到RDP:3389改高位端口、启用账户锁定策略(失败N次锁账户)、网络层限制来源网段、开启远程桌面只允许NLA。RDP相关的连接故障排查另见服务器远程桌面连接不上?RDP连接失败的八大原因排查。
五、结语
SSH暴力破解是概率游戏,防守方赢在让"试出来"的成本无穷大:密钥登录+fail2ban+防火墙白名单三件套(一个下午能全部落地)之后,扫描流量再大也只是日志里的背景噪音。做完加固记得持续盯日志——安全不是一次性动作,监控告警体系的搭建方法见企业服务器性能监控与告警体系搭建。

