服务器被入侵怎么办:排查、清理与应急

从识别入侵迹象到隔离取证、清理加固的完整应急流程,核心原则:重要数据先取证备份,拿不准就重装。

发现服务器行为异常时,先别慌,也别急着删东西。入侵响应的正确顺序是:确认迹象 → 隔离止损 → 取证备份 → 清理或重装 → 事后加固。下面以 Ubuntu/Debian 为例说明每一步。

一、识别入侵迹象

常见的可疑信号包括:

  • CPU 或内存长期跑满,但没有对应的正常业务(常见于挖矿程序)。
  • 外发流量异常增大,或连向陌生 IP、陌生端口。
  • 出现你不认识的进程、定时任务或新建的用户。
  • 登录记录里有陌生 IP 或异常时间的成功登录。

二、排查:找到问题所在

看进程和资源

top                 # 实时看 CPU/内存占用最高的进程
ps aux --sort=-%cpu | head    # 按 CPU 排序列出进程

对可疑进程,记下 PID,查它的可执行文件路径:ls -l /proc/<PID>/exe。

看网络连接

ss -tunp            # 列出所有 TCP/UDP 连接及对应进程

重点关注 ESTAB(已建立)的外联,以及监听在非常规端口的进程。

看登录记录

last -a             # 最近登录/退出记录及来源 IP
lastb               # 失败的登录尝试(暴力破解迹象)

再翻认证日志,查陌生 IP 的成功登录:

grep -i "accepted" /var/log/auth.log

检查持久化后门

攻击者常会留下"回来的路",逐一排查:

crontab -l                        # 当前用户计划任务
ls -l /etc/cron.* /etc/crontab    # 系统级计划任务
cat ~/.ssh/authorized_keys        # 是否被塞入陌生公钥

同时检查 /etc/passwd 是否有陌生用户、systemctl list-units --type=service 是否有可疑服务。

三、应急:隔离与取证

一旦确认被入侵,先隔离止损:

  • 立即修改所有相关密码(系统账户、数据库、面板)。
  • 通过防火墙切断异常外联,例如临时封锁可疑出站:ufw deny out to <IP>;必要时收紧安全组,只留你自己的 IP 能 SSH。

关键原则:重要数据先取证备份,再动手清理。 保留证据同时也保住你的数据:

# 打包关键日志与配置留证
tar czf /root/forensic-$(date +%F).tar.gz \
  /var/log /etc/crontab /etc/passwd ~/.ssh

把网站数据、数据库导出、日志拷到另一台干净机器上,不要覆盖原有备份。

四、清理还是重装?

如果只是单一已知漏洞、影响面清晰,可定点清理:杀掉恶意进程、删除后门文件与计划任务、移除陌生公钥和用户,再打补丁。

但只要你无法确认系统是否被植入了隐藏后门(rootkit),最稳妥的做法就是重装系统,然后从入侵前的干净备份恢复数据。不要图省事保留可疑系统——被二次控制的代价远高于重装。

五、事后加固

恢复上线前完成加固:

  • 禁用密码登录,改用 SSH 密钥;修改默认 SSH 端口。
  • 安装 fail2ban 拦截暴力破解,配置好防火墙(ufw)只放行必要端口。
  • 保持系统更新:apt update && apt upgrade。
  • 建立定期离线备份和基本监控告警,以便下次更早发现异常。

小结

入侵响应的黄金顺序是"先确认、再隔离、后取证、最后清理或重装"。用 top/ss/last 定位异常,检查计划任务和 authorizedkeys 找后门。动手前一定先把重要数据取证备份,拿不准系统是否干净就直接重装并从干净备份恢复,最后补齐密钥登录、防火墙和定期备份等加固措施。