服务器被入侵怎么办:排查、清理与应急
从识别入侵迹象到隔离取证、清理加固的完整应急流程,核心原则:重要数据先取证备份,拿不准就重装。
发现服务器行为异常时,先别慌,也别急着删东西。入侵响应的正确顺序是:确认迹象 → 隔离止损 → 取证备份 → 清理或重装 → 事后加固。下面以 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 找后门。动手前一定先把重要数据取证备份,拿不准系统是否干净就直接重装并从干净备份恢复,最后补齐密钥登录、防火墙和定期备份等加固措施。