Linux 服务器入侵应急响应完整清单与实战指南
来源:四海风闻 | 发布日期:2026-06-29
凌晨服务器被黑,CPU 占满、异常登录告警、入侵者已留下后门。这种极端场景下,保持冷静并执行标准化流程才是最快的恢复路径。
核心原则:断网不关机,保护好现场。 很多人第一反应是重启——这是最错误的操作,会销毁所有现场证据。正确的做法是先断网隔离(保留内网通道用于排查),再一步步取证、清理、修复。
第一步:快速止损——断网隔离
立即断开外网连接,但保留内网连接以便排查。在防火墙或交换机层封禁服务器 IP,仅在隔离内网环境中操作。
# 1. 立即断开外网(保留内网连接用于排查)
iptables -A INPUT -s 0.0.0.0/0 -j DROP
iptables -A OUTPUT -d 0.0.0.0/0 -j DROP
# 或者在交换机/防火墙上封禁该服务器IP
封完外网后立即检查当前登录会话,找到可疑连接直接踢出:
# 2. 检查当前登录用户
w
who
last | head -20
# 3. 踢出可疑连接(如 pts/1)
pkill -kill -t pts/1
第二步:取证——保护现场
在清理恶意进程之前,先保存当前所有证据。这些快照是后续入侵分析和取证的核心依据。
保存系统状态快照
# 保存当前进程快照(树形结构,方便分析父子关系)
ps auxf > /tmp/ps_snapshot.txt
# 保存网络连接(antlp = all numeric tcp listening 程序名)
netstat -antlp > /tmp/netstat_snapshot.txt
ss -antlp >> /tmp/netstat_snapshot.txt
# 保存登录日志
last > /tmp/last_log.txt
lastb > /tmp/failed_login.txt
# 保存当前用户
who > /tmp/current_users.txt
检查可疑进程
# 查看 CPU 异常进程(-b 单次模式,-n 1 采一次)
top -c -b -n 1 | head -20
# 查看隐藏进程:对比 ps 输出和 /proc 目录
ps aux | awk '{print $2}' | sort > /tmp/ps_pids.txt
ls /proc | grep -E '^[0-9]+$' | sort > /tmp/proc_pids.txt
diff /tmp/ps_pids.txt /tmp/proc_pids.txt
# 查看异常定时任务
crontab -l
cat /etc/crontab
ls -la /etc/cron.d/
diff 出来的内容如果 ps 中有但 /proc 中不存在,或者 /proc 中有但 ps 中不存在,即说明存在进程级隐藏——恶意程序常通过 hook(如 adore-ng rootkit)隐藏进程。
第三步:清理——斩草除根
在确认入侵证据已保存后,开始排查所有后门和持久化手段。
查找后门和恶意脚本
# 查找最近一天修改的文件(排除 /proc 虚拟文件系统)
find / -mtime -1 -type f 2>/dev/null | grep -v proc
# 查找 SUID 程序(常见提权手段)
find / -perm -4000 -type f 2>/dev/null
# 查找 SGID 程序
find / -perm -2000 -type f 2>/dev/null
# 检查 SSH 公钥(常被留做永久后门)
cat ~/.ssh/authorized_keys
cat /root/.ssh/authorized_keys
# 检查启用的系统服务(找出伪装服务的恶意程序)
systemctl list-unit-files --type=service | grep enabled
清理恶意进程
# 找到挖矿病毒常见进程名(如 kdevtmpfsi)
ps aux | grep -i kdevtmpfsi
# 查看进程详情(替换 PID 为实际值)
ls -l /proc/PID/exe
cat /proc/PID/cmdline
# 结束进程
kill -9 PID
# 删除恶意文件(常见隐藏路径)
rm -f /tmp/.X11-unix/.rsync/c
第四步:修复——堵住漏洞
清理完恶意程序后,必须分析入侵途径,堵住攻击者进来的入口。
检查入侵途径
# 检查弱口令账户(UID >= 1000 的普通用户)
awk -F: '$3>=1000 {print $1}' /etc/passwd
# 检查 sudo权限(找出意外授权的账户)
cat /etc/sudoers | grep -v "^#" | grep -v "^$"
# 检查 SSH 配置
grep "PermitRootLogin\|PasswordAuthentication" /etc/ssh/sshd_config
# 检查开放的监听端口
netstat -tlnp
加固 SSH
# 修改 SSH 配置并重启
vim /etc/ssh/sshd_config
# 关键加固项:
# Port 2222 # 改默认端口
# PermitRootLogin no # 禁止 root 登录
# PasswordAuthentication no # 禁用密码登录(仅密钥登录)
# MaxAuthTries 3 # 限制认证尝试次数
systemctl restart sshd
安装基础防护
# 安装 fail2ban(防暴力破解)
yum install -y fail2ban
systemctl enable fail2ban
systemctl start fail2ban
# 安装 rkhunter(Rootkit 检测)
yum install -y rkhunter
rkhunter --check
应急响应检查清单
以下表格覆盖入侵排查的核心检查项,可对照逐条执行:
| 检查项 | 命令 | 风险等级 |
|---|---|---|
| 异常进程 | ps auxf, top |
🔴 高 |
| 网络连接 | netstat -antlp |
🔴 高 |
| 登录日志 | last, lastb |
🟡 中 |
| 定时任务 | crontab -l, /etc/cron* |
🔴 高 |
| SSH 公钥 | ~/.ssh/authorized_keys |
🔴 高 |
| 最近修改文件 | find / -mtime -1 |
🟡 中 |
| SUID 程序 | find / -perm -4000 |
🟡 中 |
第五步:复盘——防止再次发生
入侵处理后,必须完成以下复盘步骤:
写应急响应报告模板
## 事件概述
- 时间:2026-06-29 03:15
- 服务器:prod-web-01
- 影响范围:CPU 异常 100%,挖矿进程
## 入侵分析
- 入侵途径:SSH 弱口令
- 恶意程序:/tmp/.systemd-service
- 持久化手段:crontab 定时任务
## 处理过程
1. 03:20 断网隔离
2. 03:25 取证保存
3. 03:35 清理恶意进程
4. 03:45 修复漏洞并加固
5. 04:00 恢复服务
## 改进措施
- [ ] 全网弱口令扫描
- [ ] 部署入侵检测系统
- [ ] 完善监控告警规则
安全意识三原则
| 原则 | 要义 |
|---|---|
| 断网不关机 | 保留现场证据,排查才有依据 |
| 处理完立即改密码 | 入侵者可能记录了旧密码,不换等于门没锁 |
| 必须复盘 | 同样的弱点不能再被利用第二次 |
服务器安全不是等出了事才处理,而是平时就要做好准备。日常加固比事后补救成本低得多。
关联页面
| 页面 | 关联点 |
|---|---|
| linux-mining-virus-investigation-guide | 挖矿病毒专项排查(从告警到清除的完整流程) |
| server-security-hardening-checklist | 新机器上线前必做 20 项安全加固(防患于未然的基线) |
| ssh-brute-force-protection-guide | SSH 暴力破解防护实战(Fail2ban + 密钥加固) |
| server-performance-four-dimensions | 服务器性能监控策略(快速发现异常指标) |