网宝
新闻中心 / / 正文

服务器被攻击后怎么办?从发现到恢复的完整应急处理手册

2026-03-30 13:59
技术部
← 返回

 

前言

服务器被攻击是每个运营者都可能面临的紧急情况。

攻击发现的那一刻,很多人第一反应是慌乱——不知道该先做什么,手忙脚乱地乱操作,反而可能让情况更糟。

本文提供一套经过实战验证的应急处理框架,按照正确的优先级顺序,把"发现攻击→控制损失→排查原因→完全恢复→预防复发"这五个阶段的每一步讲清楚。

遭遇攻击时,打开这篇文章,按步骤执行。


一、先判断攻击类型:对症下药

不同类型的攻击,处理方式完全不同。先花5分钟判断攻击类型,避免走弯路。

常见攻击类型快速判断

症状:网站无法访问,服务器带宽跑满,CPU/内存正常DDoS流量攻击(最常见)

症状:网站可以访问,但速度极慢,CPU接近100%CC攻击(HTTP Flood,应用层DDoS)

症状:网站被篡改(出现陌生内容、跳转到其他网站)网站被挂马/页面篡改

症状:收到勒索邮件,数据库文件被加密或删除勒索软件攻击

症状:服务器CPU持续异常高,运行了陌生进程挖矿木马感染

症状:发现陌生的后台账号、SSH登录记录异常服务器被入侵,权限可能已被控制


二、DDoS攻击应急处理

立即处理步骤

第一步:确认是DDoS还是正常流量高峰

 
 
bash
# 查看当前网络连接数
netstat -an | grep ESTABLISHED | wc -l

# 查看连接最多的IP
netstat -an | awk '/tcp/ {print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -rn | head -20

如果某几个IP的连接数异常高(正常单IP连接不超过10~20个),且总连接数远超平时,基本可以确认是攻击。

第二步:立即联系机房开启流量清洗

DDoS攻击超出普通服务器的防御能力,必须依赖机房级别的流量清洗。

立即联系网宝技术支持(工单或QQ),说明遭受DDoS攻击,提供服务器IP,请求开启高防清洗服务。专业机房的流量清洗响应时间通常在5~15分钟内。

第三步:临时封堵攻击源IP

在流量清洗开启之前,可以临时封堵明显的攻击源IP:

 
 
bash
# 封禁单个攻击IP
iptables -I INPUT -s 攻击IP -j DROP

# 批量封禁某个IP段
iptables -I INPUT -s 攻击IP段/24 -j DROP

# 查看已封禁的规则
iptables -L INPUT -n --line-numbers

第四步:如果攻击持续,考虑临时切换IP

如果流量清洗暂时无法开启,且攻击导致整台服务器完全瘫痪,可以:

  • 申请更换服务器IP(联系IDC处理)
  • 临时将域名解析切换到Cloudflare代理,隐藏真实IP

三、CC攻击(HTTP Flood)应急处理

CC攻击比DDoS更难处理,因为攻击流量看起来像正常用户请求。

识别CC攻击

 
 
bash
# 查看Nginx访问日志中请求最多的IP
awk '{print $1}' /www/wwwlogs/你的域名.log | sort | uniq -c | sort -rn | head -20

# 查看访问最多的URL
awk '{print $7}' /www/wwwlogs/你的域名.log | sort | uniq -c | sort -rn | head -20

正常用户每分钟对同一个URL的请求不超过10次,如果某个IP每分钟请求同一URL数百次,几乎可以确认是CC攻击。

处理步骤

第一步:在Nginx配置中限制请求频率

在网站的Nginx配置文件中添加:

 
 
nginx
# 定义限速规则
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;

server {
    # 应用限速规则(超出频率的请求返回503)
    limit_req zone=one burst=20 nodelay;
    
    # 返回503时的提示页面
    error_page 503 /503.html;
}

第二步:封禁攻击IP或IP段

 
 
bash
# 封禁单IP
iptables -I INPUT -s 攻击IP -j DROP

# 如果是同一网段的大量IP,封禁整个C段
iptables -I INPUT -s 攻击IP/24 -j DROP

第三步:开启Cloudflare并启用"Under Attack Mode"

如果已经接入Cloudflare,在Cloudflare控制台开启"I'm Under Attack Mode",所有访问者在进入网站前需要通过JavaScript挑战,自动过滤大量机器人请求。

第四步:在宝塔面板开启WAF防护

宝塔WAF具备CC防护功能,可以自动识别和封禁异常频率的请求。


四、网站被挂马/页面篡改应急处理

立即处理步骤

第一步:立即下线网站

在宝塔面板中关闭网站(或在Nginx配置中临时返回维护页面),防止被篡改的页面继续传播恶意代码或影响更多用户:

 
 
nginx
# 临时关闭网站,返回维护提示
server {
    return 503;
    error_page 503 /maintenance.html;
}

第二步:找出被篡改的文件

 
 
bash
# 查找最近24小时内被修改的PHP文件
find /www/wwwroot/你的域名 -name "*.php" -mtime -1

# 查找包含常见恶意代码特征的文件
grep -r "eval(base64_decode" /www/wwwroot/你的域名
grep -r "system(" /www/wwwroot/你的域名
grep -r "<iframe" /www/wwwroot/你的域名

第三步:对比备份,确认被篡改的范围

从备份中恢复干净的文件,或将当前文件与备份对比,找出所有被修改的文件。

第四步:找出攻击入口

分析Nginx访问日志,找出攻击者是通过哪个请求上传了恶意文件:

 
 
bash
# 查找POST请求(文件上传通常是POST)
grep "POST" /www/wwwlogs/你的域名.log | grep -v "200" 
grep "POST" /www/wwwlogs/你的域名.log | awk '{print $1,$7}' | sort | uniq -c | sort -rn

常见入口:WordPress插件漏洞、文件上传功能未过滤、管理后台弱密码。

第五步:修复漏洞,从备份恢复

找出攻击入口后,修复对应漏洞,然后从干净的备份恢复网站文件。


五、勒索软件攻击应急处理

勒索软件是最严重的攻击类型之一,数据被加密后如果没有备份几乎无法恢复。

立即处理步骤

第一步:立即隔离服务器

在IDC控制台或联系技术支持,将服务器的网络连接断开,防止勒索软件继续扩散到其他服务器或备份系统。

第二步:不要立即重启服务器

部分勒索软件在服务器重启后会删除加密密钥,重启可能让数据永久无法恢复。在确认情况前不要随意重启。

第三步:评估数据损失范围

查看哪些目录的文件被加密,被加密的文件通常会有特殊后缀(如 .locked.encrypted.DECRYPT等)。

第四步:检查是否有可用备份

  • 检查宝塔面板的定时备份是否完好
  • 检查是否有异地备份(FTP、OSS等)
  • 如果有完好备份,可以从备份恢复数据

第五步:如果没有备份

  • 向安全公司求助,部分勒索软件存在解密工具
  • 不建议支付赎金(无法保证获得解密密钥,且助长攻击行为)
  • 记录损失情况,配合后续安全加固

第六步:完全重建服务器

勒索软件感染后,即使数据恢复,也建议重新安装操作系统,彻底清除可能残留的恶意程序,再重新部署业务。


六、挖矿木马感染应急处理

挖矿木马通常不破坏数据,但会持续消耗服务器资源,影响业务性能,且可能成为进一步攻击的跳板。

识别挖矿木马

 
 
bash
# 查看CPU占用最高的进程
top -bn1 | head -20

# 查找可疑进程(挖矿程序通常有特征性的进程名)
ps aux | grep -E "xmrig|minerd|cryptonight|stratum"

# 查看异常的网络连接(挖矿程序需要连接矿池)
netstat -an | grep ESTABLISHED | grep -v ":22\|:80\|:443"

清除步骤

第一步:终止恶意进程

 
 
bash
# 找到恶意进程PID
ps aux | grep 可疑进程名

# 强制终止进程
kill -9 PID

第二步:找到恶意文件并删除

 
 
bash
# 查找最近被创建的可执行文件
find / -type f -newer /etc/passwd -executable 2>/dev/null

# 查看计划任务(挖矿木马通常会添加计划任务保持存活)
crontab -l
cat /etc/crontab
ls /etc/cron.*

第三步:检查SSH密钥和账号

 
 
bash
# 查看所有有登录权限的账号
cat /etc/passwd | grep "/bin/bash"

# 检查authorized_keys(是否有陌生的SSH公钥)
cat ~/.ssh/authorized_keys

第四步:更换所有密码和SSH密钥

服务器被入侵后,所有密码(root密码、数据库密码、FTP密码等)都应视为已泄露,全部更换。


七、攻击恢复后的加固清单

无论遭遇何种攻击,恢复后必须系统性地进行安全加固,否则还会再次被攻击。

必做加固项目

系统层面:

  • 更新所有系统软件包到最新版本
  • 修改SSH端口(如果还在用默认22)
  • 禁止root直接SSH登录
  • 使用SSH密钥替代密码登录
  • 检查并关闭所有不必要的开放端口
  • 删除所有陌生的系统账号

应用层面:

  • 更新所有Web应用(WordPress、插件等)到最新版本
  • 修改所有管理后台密码(数据库、Web应用、FTP等)
  • 删除不使用的插件和主题
  • 检查文件权限(网站文件不应有写权限给Web用户)
  • 开启Web应用防火墙(WAF)

监控层面:

  • 配置实时流量监控告警
  • 设置异常CPU/内存占用告警
  • 开启登录失败告警
  • 配置文件完整性监控

备份层面:

  • 立即创建一次完整备份(恢复后的干净状态)
  • 确认定时备份策略正常运行
  • <
QQ客服 提交工单