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
2
crontab -l
cat /etc/crontab

看有没有自己完全没设置过的任务,尤其是那些指向/tmp/dev/shm这类临时目录,或者是一长串下载执行命令的可疑条目。

看看有没有异常进程在偷跑CPU

1
top

留意有没有名字很怪异(一串随机字符、或者伪装成系统进程但拼写差一点)的进程,长期占用大量CPU或者内存。确认是恶意进程,先别急着杀:

1
ps aux | grep 可疑进程名

先记下PID和完整路径,方便后面清理干净,直接杀了容易漏掉背后重新拉起它的守护脚本。

排查完,发现真的中招了怎么办

如果前面这几步查出了确凿的痕迹——陌生IP登录成功、多出来的账号、crontab被塞了东西——说明这台VPS已经不能再信任了。这时候单纯改改密码、杀几个进程,很难保证清理干净,攻击者留后门的方式太多,一个没找全,过阵子又会被摸回来。

比较稳妥的做法是直接重装系统,相当于把整台机器推倒重来,具体命令可以看dd命令大集合。重装完成之后,第一件事就是把SSH安全这块做扎实,别再裸奔——Linux一键初始化SSH加固脚本这篇里的密钥登录、禁用密码认证这几项,能把绝大多数暴力破解直接挡在门外,不用等到出事了才排查。