13 10 月 2026

服务器被入侵不是"会不会"的问题,而是"什么时候"的问题。暴露在公网的机器,弱密码、未打补丁的程序、开放的数据库端口,都是入口。

这篇讲的是发现异常之后的处置流程:怎么判断是否真被入侵、怎么止血、怎么排查入侵路径、怎么恢复。

防患于未然更重要:做好快照与备份。财富云计算 的云服务器支持快照功能;内网服务、游戏服务端可选 NAT 型(无独立公网 IP,价格比独立 IP 机型省一半以上,暴露面更小)。

一、被入侵的常见信号

出现以下任一情况,就要警惕:

信号说明
CPU 长期 100% 但没跑什么业务极可能是挖矿木马
流量异常暴涨被当肉鸡发攻击包,或被盗链
有陌生进程、陌生用户被植入后门
文件被篡改(首页被挂暗链/赌博内容)网站被入侵
SSH 登录记录里有异地 IP密码泄露或被爆破成功
crontab 里有看不懂的任务木马的持久化手段
收到服务商的 abuse 投诉你的机器在攻击别人
数据被加密、勒索信息勒索软件
命令执行异常(ls/ps 被替换)rootkit
防火墙规则被改攻击者为自己留后门

二、第一步:先止血(隔离,不要急着删文件)

很多人第一反应是"赶紧删掉马",这是错的——删了就失去证据,也找不到入侵路径,恢复后会被再次入侵。

1)先断网或限制访问

# 方案 A:云平台控制台直接解绑/禁用公网 IP(最快)
# 方案 B:系统内停掉网络(谨慎,会断掉你的 SSH)
# 方案 C:防火墙只放行你自己的 IP
ufw reset
ufw allow from 你的IP
ufw enable

注意:如果攻击者还在活动,可能在你操作时反制。优先在云平台控制台操作(那里是你的控制面)。

2)保存现场证据

# 打包关键日志和状态(存到本地或另一台机器)
mkdir -p /tmp/forensics
cp -a /var/log/ /tmp/forensics/ 2>/dev/null
ps aux > /tmp/forensics/ps.txt
netstat -tulnp > /tmp/forensics/netstat.txt
crontab -l > /tmp/forensics/crontab_root.txt
cat /etc/passwd > /tmp/forensics/passwd.txt
tar -czf /tmp/forensics.tar.gz /tmp/forensics

3)修改所有密码

  • 服务器 root 密码
  • 所有用户密码
  • 数据库密码
  • 云控制台账号密码(并开启二次验证)
  • 检查是否被添加了新的 SSH 公钥

三、第二步:判断是不是真被入侵

1)看登录记录

last                      # 成功登录记录
lastb                     # 失败登录记录(需 root)
lastlog                   # 每个用户最近登录
who / w                   # 当前在线
cat /var/log/auth.log | grep -i "accepted"
cat /var/log/secure | grep -i "accepted"    # CentOS

看有没有:陌生 IP、陌生时间、root 直接登录成功。

2)看进程

ps aux
top -c
pstree -p

重点关注:

  • CPU 占用高的陌生进程
  • 进程名伪装成系统进程(kworker、systemd-xxx、随机字符串)
  • 没有对应二进制文件路径的进程
  • 从 /tmp、/dev/shm、隐藏目录启动的进程(木马最爱藏这里)
# 查看进程的真实可执行文件
ls -l /proc/<PID>/exe
# 查看进程的启动命令
cat /proc/<PID>/cmdline | tr '\0' ' '
# 查看进程的工作目录
ls -l /proc/<PID>/cwd

3)看网络连接

ss -tulnp
ss -tnp                   # 已建立的连接
netstat -anp
lsof -i

重点看:

  • 监听在异常端口的服务
  • 连向境外 IP 的 ESTABLISHED 连接(可能是远控 C2 通信)
  • 大量 SYN_SENT(可能在对外攻击)
# 看连接最多的外部 IP
ss -tnp | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head

4)看计划任务(木马的常用持久化手段)

crontab -l                        # 当前用户
crontab -l -u root
ls -la /etc/cron*                 # 系统级
cat /etc/crontab
ls /etc/cron.d/ /etc/cron.daily/ /etc/cron.hourly/
systemctl list-timers             # systemd 定时器
ls -la /etc/systemd/system/       # 看有没有陌生的 service

特别注意 /etc/cron.d/ 和 systemd service 里有没有陌生的文件,很多挖矿木马会写一条定时任务,每隔几分钟重新拉起。

5)看启动项

ls -la /etc/init.d/
ls -la /etc/rc.local
cat /etc/rc.local
ls -la /etc/profile.d/
cat ~/.bashrc                     # 看有没有被追加恶意命令
cat ~/.profile

6)看账号

cat /etc/passwd                   # 有没有新增的陌生用户
awk -F: '($3 == 0) {print}' /etc/passwd    # ⚠️ 有没有额外的 UID=0 账号(后门!)
awk -F: '($2 == "") {print}' /etc/shadow   # 空密码账号
ls -la /root/.ssh/authorized_keys          # 有没有被塞入陌生公钥
cat /root/.ssh/authorized_keys

7)看文件系统

# 找最近被修改的文件(7 天内)
find / -type f -mtime -7 -not -path "/proc/*" -not -path "/sys/*" -not -path "/var/log/*" 2>/dev/null | head -50

# 找可疑的 SUID 文件(提权后门)
find / -perm -4000 -type f 2>/dev/null

# 找可写的系统目录
find /etc /usr/bin /usr/sbin -type d -perm -o+w 2>/dev/null

# 看 /tmp /dev/shm(木马常用)
ls -la /tmp /dev/shm /var/tmp

8)看命令是否被替换(rootkit)

# 对比命令的修改时间
ls -l /bin/ps /bin/ls /bin/netstat /usr/bin/top /usr/bin/who

# 用 rpm/dpkg 校验系统文件
rpm -Va                          # CentOS
dpkg -V                          # Debian

# 或用专门工具(需安装)
apt install chkrootkit rkhunter -y
chkrootkit
rkhunter --check

四、第三步:找到入侵路径

这是最关键也最容易被跳过的一步。不找到入口就恢复,等于等着被打第二次。

常见入口对照表

入口检查方法
SSH 弱密码lastb 有大量失败后成功的记录
SSH 密钥泄露authorized_keys 里有陌生公钥
数据库端口对外开放`ss -tulnp \grep 3306` 监听 0.0.0.0
Redis 未授权访问6379 对外开放且无密码
Web 程序漏洞(上传/注入/RCE)查 Web 访问日志里的攻击请求
第三方组件漏洞(如 Log4j、永恒之蓝)查程序版本
面板漏洞(宝塔/宝塔 phpmyadmin)查面板端口是否对外
Docker 未授权 API2375 端口对外开放
程序后门(供应链攻击)查最近部署的代码

查 Web 攻击痕迹

# 找上传的 webshell
find /var/www -name "*.php" -mtime -30 2>/dev/null | head -30
grep -rn "eval(\|base64_decode\|system(\|exec(\|passthru(\|shell_exec\|assert(" /var/www --include="*.php" | head -30

# 查访问日志里的可疑请求
grep -E "(\.\./|union.*select|<script|eval\(|base64_decode|/etc/passwd|cmd=|exec=)" /var/log/nginx/access.log | head -30

# 找一句话木马常见文件名
find /var/www -iname "*shell*" -o -iname "*cmd*" -o -iname "*x.php" 2>/dev/null

查漏洞利用时间线

# 找到 webshell 的创建时间
stat /var/www/html/shell.php
# 然后去日志里看那个时间点前后的请求
grep "12/Oct/2026:14:" /var/log/nginx/access.log

五、第四步:清理与恢复

方案 A:重装系统(最彻底,推荐)

对于确认被深度入侵的机器,不要试图手工清理——rootkit 可能已经替换系统命令,你看到的一切都可能是假的。

# 1. 备份业务数据(只备份数据,不要备份系统程序)
#    - 网站源码(先审计过,确认没有后门)
#    - 数据库导出
#    - 配置文件
mysqldump -u root -p --all-databases > /data/all.sql
tar -czf /data/www.tar.gz /var/www/html

# 2. 把备份下载到本地

# 3. 云平台重装系统(选择最新镜像)

# 4. 全新环境:打补丁、改端口、密钥登录、防火墙、fail2ban

# 5. 只恢复数据,程序重新下载安装最新版

# 6. 导入数据库前先检查有没有恶意内容

方案 B:手工清理(仅在确认范围有限时)

# 1. 杀掉恶意进程
kill -9 <PID>
# 注意:可能有守护进程会重新拉起,先处理计划任务

# 2. 删除计划任务
crontab -r                     # 清空当前用户
rm -f /etc/cron.d/恶意文件
systemctl disable --now 恶意服务

# 3. 删除恶意文件
# 先备份一份再删(留证据)
cp /tmp/木马 /tmp/evidence/
rm -f /tmp/木马

# 4. 清理后门账号
userdel -r 恶意用户
# 清理 authorized_keys 里的陌生公钥

# 5. 修复权限
chmod 600 /root/.ssh/authorized_keys
chmod 700 /root/.ssh

# 6. 更新系统与软件
apt update && apt upgrade -y

# 7. 修改所有密码和密钥

手工清理后强烈建议:持续观察 1~2 周,每天看进程、连接、计划任务。

恢复业务数据

# 数据库恢复
mysql -u root -p < all.sql

# 网站文件恢复(只恢复你确认干净的静态资源、配置)
# ⚠️ 不要直接把旧的程序文件原样拷回去

重要:被入侵过的网站程序,不要直接复用。重新下载官方最新版,再导入主题/插件/数据,因为木马可能已经注入到程序源码里。


六、第五步:加固(防止再次被入侵)

一份上线加固清单:

# 1. SSH 密钥登录 + 关密码 + 改端口
# /etc/ssh/sshd_config
# Port 2299
# PasswordAuthentication no
# PermitRootLogin no

# 2. 防火墙只开必要端口
ufw default deny incoming
ufw allow 2299/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable

# 3. 装 fail2ban
apt install fail2ban -y

# 4. 服务不用 root 跑
# 5. 数据库/Redis 只监听 127.0.0.1 或内网
# 6. 定期打补丁
apt update && apt upgrade -y
# 或开自动安全更新
apt install unattended-upgrades -y
dpkg-reconfigure -plow unattended-upgrades

# 7. 开启快照/备份
# 8. 云控制台开二次验证
# 9. 网站目录禁止执行(上传目录)
# 10. 装监控告警

Nginx 上传目录禁止执行 PHP:

location /uploads/ {
    location ~ \.php$ {
        deny all;
    }
}

详见本站《网站常见漏洞与基础防护》。


七、挖矿木马专章(最常见的入侵类型)

典型表现:CPU 长期跑满、kworker 之类的伪装进程、连境外矿池。

快速定位

top -c                       # 看谁在吃 CPU
ls -l /proc/<PID>/exe        # 看真实路径
cat /proc/<PID>/cmdline

常见位置

/tmp/、/var/tmp/、/dev/shm/
/root/.ssh/、~/.bashrc
/etc/cron.d/、/etc/systemd/system/
/usr/lib/systemd/system/

常见矿池域名/IP

木马会连接 pool.minexmr.com、xmr.pool 之类,或者直连 IP:端口(3333、8080、443 等)。

ss -tnp | grep -v "127.0.0.1"
# 看看有没有连向奇怪的 IP
# 可疑 IP 去 https://www.abuseipdb.com 查一下

清理步骤

# 1. 杀进程(先处理守护,否则杀完又起来)
systemctl stop 恶意服务
crontab -r
kill -9 <PID>

# 2. 删文件
rm -f /tmp/xxx /etc/cron.d/xxx

# 3. 清理 SSH 后门
cat /root/.ssh/authorized_keys     # 删掉陌生的

# 4. 检查有没有新增用户
cat /etc/passwd

# 5. 加固:改密码、关端口、装 fail2ban

八、勒索软件

表现:文件被加密(后缀变成 .locked、.xxxx),留下 README.txt 勒索信。

处置:

  1. 立即断网(防止横向扩散)
  2. 不要支付赎金(不保证解密,且助长犯罪)
  3. 保留样本,去 No More Ransom 看是否有解密工具
  4. 从备份恢复——这是唯一可靠的办法
  5. 排查入口(通常是弱密码、未打补丁、开放的远程桌面/RDP)

预防:3-2-1 备份原则,且备份要有版本控制/离线副本(否则备份也会被加密)。详见《服务器备份与快照策略》。


九、应急响应速查表

发现异常
 │
 ├─ ① 隔离:断网 / 只放行自己 IP
 ├─ ② 存证:打包日志、进程、连接、计划任务
 ├─ ③ 改密:所有密码 + 云控制台 + 开 2FA
 │
 ├─ ④ 排查:
 │     last/lastb        登录记录
 │     ps aux/top        异常进程
 │     ss -tnp           异常连接
 │     crontab -l        计划任务
 │     /etc/passwd       后门账号
 │     authorized_keys   后门公钥
 │     find -mtime -7    最近改的文件
 │
 ├─ ⑤ 找入口:
 │     Web 日志?弱密码?开放端口?组件漏洞?
 │
 ├─ ⑥ 恢复:
 │     推荐重装系统 + 只恢复数据
 │     或手工清理 + 观察两周
 │
 └─ ⑦ 加固:
       密钥登录、防火墙、fail2ban、
       最小权限、打补丁、备份、监控

十、日常该做的准备

被入侵时最值钱的是准备,不是技术:

  • [ ] 开启自动快照(每天一次,保留 7 天)
  • [ ] 异地备份(对象存储,开启版本控制)
  • [ ] 恢复演练(每季度一次,确认备份能用)
  • [ ] 记录一份"恢复手册"(换个人也能操作)
  • [ ] 装监控告警(CPU、流量异常)
  • [ ] 云控制台开二次验证
  • [ ] 关键操作有日志审计
  • [ ] 保存一份应急联系渠道(服务商工单)

快照是最后一道防线。财富云计算 的云服务器支持快照与镜像,建议在部署完成后立即配置自动快照策略——被入侵时能快速回滚到干净状态。做内网服务、游戏服务端推荐 NAT 型(无独立公网 IP,价格比带独立 IP 机型省一半以上),不直接暴露在公网,被扫描和攻击的概率大幅降低。

相关阅读:

  • 《fail2ban 防暴力破解实战配置》
  • 《SSH 密钥登录与账号安全配置》
  • 《网站常见漏洞与基础防护》
  • 《服务器备份与快照策略》
延伸阅读
  1. 网站环境怎么选:LNMP 手动 / 宝塔面板 / Docker / 云开发
  2. 问卷表单系统搭建:SurveyKing / Formbricks,数据自己收
  3. 图床搭建:Lsky Pro / Lychee,自托管图片托管方案
  4. 邮件列表搭建:listmonk 自托管 Newsletter,把读者握在自己手里
  5. 文档站点搭建:MkDocs / VuePress / Docsify,产品文档与技术手册方案
  6. RSS 阅读器搭建:FreshRSS 自托管,把信息流拿回自己手里
  7. 短链接服务搭建:Shlink 自托管,链接数据自己掌握
  8. 网站状态监控页搭建:Uptime Kuma,服务器挂了第一时间知道
更多阅读
  1. 上一篇:fail2ban 防暴力破解实战配置:自动封禁所有可疑 IP
  2. 下一篇:网站常见漏洞与基础防护:SQL 注入、XSS、文件上传、越权
发表评论 11