服务器被入侵不是"会不会"的问题,而是"什么时候"的问题。暴露在公网的机器,弱密码、未打补丁的程序、开放的数据库端口,都是入口。
这篇讲的是发现异常之后的处置流程:怎么判断是否真被入侵、怎么止血、怎么排查入侵路径、怎么恢复。
防患于未然更重要:做好快照与备份。财富云计算 的云服务器支持快照功能;内网服务、游戏服务端可选 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/forensics3)修改所有密码
- 服务器 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>/cwd3)看网络连接
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 | head4)看计划任务(木马的常用持久化手段)
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 ~/.profile6)看账号
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_keys7)看文件系统
# 找最近被修改的文件(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/tmp8)看命令是否被替换(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 未授权 API | 2375 端口对外开放 | |
| 程序后门(供应链攻击) | 查最近部署的代码 |
查 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 勒索信。
处置:
- 立即断网(防止横向扩散)
- 不要支付赎金(不保证解密,且助长犯罪)
- 保留样本,去 No More Ransom 看是否有解密工具
- 从备份恢复——这是唯一可靠的办法
- 排查入口(通常是弱密码、未打补丁、开放的远程桌面/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 密钥登录与账号安全配置》
- 《网站常见漏洞与基础防护》
- 《服务器备份与快照策略》
延伸阅读
- 网站环境怎么选:LNMP 手动 / 宝塔面板 / Docker / 云开发
- 问卷表单系统搭建:SurveyKing / Formbricks,数据自己收
- 图床搭建:Lsky Pro / Lychee,自托管图片托管方案
- 邮件列表搭建:listmonk 自托管 Newsletter,把读者握在自己手里
- 文档站点搭建:MkDocs / VuePress / Docsify,产品文档与技术手册方案
- RSS 阅读器搭建:FreshRSS 自托管,把信息流拿回自己手里
- 短链接服务搭建:Shlink 自托管,链接数据自己掌握
- 网站状态监控页搭建:Uptime Kuma,服务器挂了第一时间知道

[...]ss -tlnp3. 处置顺序先断网:安全组/防火墙全关,只留自己的 IP改密码:Redis 密码、系统 root 密码、所有可能泄露的密钥清后门:authorized_keys 里删陌生公钥、crontab 清异常项备份证据:把日志、可疑文件留着,分析入侵路径重装系统:root 权限丢过的机器,最干净的做法是重装,只恢复数据不恢复配置补上加固:按上面六步重新配详细应急流程见服务器被入侵应急排查。[...]
2026-10-13 回复
[...]# 3. 极端情况: 开 CF 小云朵(5 秒盾)或切 CDNUDP flood / 大流量攻击(自己扛不住的):控制台看是否已被黑洞:被攻击超过防护阈值,厂商会自动把 IP 拉入黑洞(所有流量丢弃,数小时到 24 小时不等)联系服务商:说明情况,确认清洗策略,问能不能提前调度高防上高防 IP:把流量引到高防,清洗后回源。游戏服选支持 UDP 的高防改映射端口(NAT 机型):如果是针对特定端口的[...]
2026-10-14 回复
[...]sudo firewall-cmd --list-all # CentOS四层顺序:平台 → 安全组 → 服务监听 → 系统防火墙。90% 的「连不上」死在前两层,尤其是 UDP 只放了 TCP。更完整的排查见开服常见报错与解决。被攻击时的紧急处理:安全组一键「拒绝所有入方向」断网止血,分析完再精准放行,流程见云服务器被攻击怎么办。七、高级:内网与多机场景多台机器互访(Web + DB 分离)[...]
2026-10-15 回复
[...]# 4. 完整入侵排查确认是被入侵就走服务器被入侵应急排查全流程,别杀完进程就当没事了——后门还在,明天它又回来。四、D 状态与 load 飙高load 高但 CPU 空闲、进程一片 D 状态——等磁盘/网络存储:# 看 D 状态进程[...]
2026-10-15 回复
[...]sudo grep -E "Warning|Infected" /var/log/rkhunter.logrkhunter 查这些:常见 rootkit 的文件特征(KBeast、Adore 等经典木马)系统命令是否被替换(ls、ps、netstat 被挖矿木马换掉是常规操作)异常端口、异常 SUID 文件、隐藏进程属性更新(系统升级后某些二进制合法变化,要告诉 rkhunte[...]
2026-10-15 回复
[...]# 阿里云/腾讯云控制台看 AccessKey 调用记录如果仓库已经被 fork 过:历史里的密钥等于公开了,删仓库也没用——必须吊销密钥,这一步没有替代品。数据库密码泄露后的处置,参考数据库安全加固;确认是否已被入侵,走服务器被入侵应急排查。四、前端密钥的特殊风险前端 JS 里的密钥等于公开:// 错误:地图 API Key、推送 Key 写死在前端[...]
2026-10-15 回复
[...]# ^."(Baiduspider|Googlebot|bingbot|Sogou|360Spider)."$防误伤三原则:搜索引擎 UA 加白(影响 SEO 的大事)自己的办公 IP 加白(fail2ban 的 ignoreip)封禁阈值别太狠(404 阈值 20/分钟比较稳,5 太激进)搜索引擎友好性见网站 SEO 基础优化指南。七、被扫描时的日常心态说句实话:被扫是常[...]
2026-10-15 回复
[...]# 4. 同时通知玩家群:临时停服,预计 X 小时恢复关键动作:保留你的流量证据(正常游戏流量特征明显:持续 UDP 小包),能帮你快速洗清。场景二:Steam 搜不到你的服先自检:查询端口映射是否正常(NAT 端口映射完全指南)。用 Steam 的「查看服务器信息」测试 connect IP:端口 能否直接进——能进说明只是列表缓存。列表持续异常:找商家确认 IP 状态,同时准备「换 IP」方案[...]
2026-10-18 回复
[...]google-authenticator # 按提示操作,保存密钥和应急码应急恢复码(scratch codes)打印或存密码管理器——手机丢了靠它进门。更进一步的方案见SSH 安全加固进阶:跳板机 + 密钥 + 2FA 组合,适合管理多台机器的人。七、Windows 服务器的对等方案Windows 机器同理,四步走:改 Administrator 密码为 20 位随机串。关闭 Adminis[...]
2026-10-18 回复
[...]5. 泄露响应顺序:改密码 → 重启 → 查日志 → 对备份特别提醒群管理场景:把 RCON 密码发给协管时,用「私聊 + 密码管理器分享」而不是「发群里 @他」。群记录是会截图的,密码是会忘的,泄露是会发生的。六、常见疑问Q:RCON 端口开着但不设密码行吗?不行。「不设密码」在很多服务端等于空密码直接进,比弱密码还危险。Q:用 SSH 隧道麻烦吗?一次配置永久受益,而且比公网暴露 RCON 安[...]
2026-10-18 回复
[...]netsh advfirewall firewall add rule name="GameRange" dir=in action=allow protocol=UDP localport=26901-26903完整的 Windows 环境准备(远程桌面连接、运行库安装、SteamCMD 用法、开机自启、8 个常见坑)见:《Windows 云服务器开服通用前置教程》→ htt[...]
2026-10-18 回复