VPS被暴力破解怎么查有没有被入侵
公网上开着SSH端口的VPS,基本每天都在被扫描器试探,这是常态,不代表真的出事了。但如果哪天感觉服务器变卡、流量异常暴涨、或者单纯不放心,想确认一下到底有没有被人摸进来,有几个地方能看出端倪。
先看登录日志,谁在敲你的门
Debian/Ubuntu系统日志在/var/log/auth.log,CentOS系是/var/log/secure,查一下有没有成功登录的可疑记录:
1 | grep "Accepted password for root" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr |
这条会列出所有用密码成功登录过root的IP和次数,如果看到自己完全不认识的IP出现在这里,那就要警惕了。顺手也看看失败尝试有多猛:
1 | grep "Failed password for root" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | more |
失败次数一大堆很正常,是扫描器在瞎试,重点看有没有成功,而不是失败了多少次。
再用last命令看一眼系统级的登录历史,同样是找有没有陌生IP或者陌生用户名:
1 | last |
查有没有多出来的账号
攻击者拿到权限之后,常见操作是悄悄加一个自己的账号方便以后回来,而不是每次都靠爆破:
1 | cat /etc/passwd |
看看里面有没有自己从没建过的用户,尤其是那些UID看起来正常、却完全没印象的名字。确认是可疑账号,先禁用别急着删,方便留证据:
1 | usermod -L 用户名 |
crontab里有没有被塞了东西
木马和挖矿程序喜欢靠定时任务保持存活,就算你手动把进程杀了,crontab里的任务过一会儿又会把它重新拉起来:
1 | crontab -l |
看有没有自己完全没设置过的任务,尤其是那些指向/tmp、/dev/shm这类临时目录,或者是一长串下载执行命令的可疑条目。
看看有没有异常进程在偷跑CPU
1 | top |
留意有没有名字很怪异(一串随机字符、或者伪装成系统进程但拼写差一点)的进程,长期占用大量CPU或者内存。确认是恶意进程,先别急着杀:
1 | ps aux | grep 可疑进程名 |
先记下PID和完整路径,方便后面清理干净,直接杀了容易漏掉背后重新拉起它的守护脚本。
排查完,发现真的中招了怎么办
如果前面这几步查出了确凿的痕迹——陌生IP登录成功、多出来的账号、crontab被塞了东西——说明这台VPS已经不能再信任了。这时候单纯改改密码、杀几个进程,很难保证清理干净,攻击者留后门的方式太多,一个没找全,过阵子又会被摸回来。
比较稳妥的做法是直接重装系统,相当于把整台机器推倒重来,具体命令可以看dd命令大集合。重装完成之后,第一件事就是把SSH安全这块做扎实,别再裸奔——Linux一键初始化SSH加固脚本这篇里的密钥登录、禁用密码认证这几项,能把绝大多数暴力破解直接挡在门外,不用等到出事了才排查。