网站被黑是每个站长都可能遇到的事:早上起来发现首页被篡改、百度收录了一堆赌博页面、或者网站突然变慢、CPU 飙到 100%。这时候最忌讳的就是慌——很多人直接重装系统,结果数据没了、漏洞没堵,上线后再次被入侵。正确的做法是走一套标准的应急响应流程:先止损、再取证、后修复、最后加固。这篇文章把整套流程拆开讲,每一步配好命令,照着做就能把损失降到最低。
一、第一响应:断网隔离与证据保全
发现入侵迹象后的第一件事不是删文件,而是断网隔离。攻击者可能还保持着 WebShell 连接,正在持续窃取数据或下载木马,晚断一分钟就多一分损失。如果网站还在提供对外服务,先做最小化止损:
# 1. 立即停止 Web 服务,断开对外访问
systemctl stop nginx
systemctl stop php-fpm # 或 php7.4-fpm 等实际版本
# 2. 封禁可疑来源 IP(从访问日志里抓到的攻击源)
iptables -I INPUT -s 攻击者IP -j DROP
# 3. 保留现场:备份日志、配置文件、恶意文件样本(先别删!)
mkdir -p /tmp/incident_backup/{logs,malware,conf}
cp /www/wwwlogs/网站域名.log /tmp/incident_backup/logs/
cp -r /www/server/panel/vhost/nginx/ /tmp/incident_backup/conf/
# 恶意文件用 tar 打包保留,不要直接 rm 删掉
tar czf /tmp/incident_backup/malware/webshell_样本.tar.gz /tmp/可疑文件路径
证据保全很重要:日志和恶意样本是判断攻击方式、确定损失范围、追责的法律依据。如果网站涉及用户数据泄露,还要按法规要求评估是否触发数据泄露上报义务。备份完成后,再开始清马。
二、定位攻击入口:日志溯源三步法
不找到攻击入口,清理再多木马也没用——攻击者随时可以通过同一个漏洞再进来。日志溯源按三步走:先查 Web 访问日志找攻击流量,再查系统日志找异常登录,最后比对文件找后门。
# 第一步:从访问日志中找 POST 到 php 文件的异常请求(常见 WebShell 上传入口)
grep -E "POST" /www/wwwlogs/网站域名.log | grep -iE "\.php" | head -50
# 第二步:找常见漏洞利用特征
grep -iE "eval|base64_decode|shell_exec|system\(|assert\(|union select|\.\./\.\./" /www/wwwlogs/网站域名.log | head -50
# 第三步:查系统登录记录
last -20
grep "Accepted publickey\|Failed password" /var/log/secure | tail -30 # CentOS
grep "Accepted publickey\|Failed password" /var/log/auth.log | tail -30 # Debian/Ubuntu
# 第四步:按修改时间找新增/被改动的可疑文件(重点:最近 7 天内)
find /www/wwwroot -type f -mtime -7 -name "*.php" ! -path "*/cache/*" -newermt "2026-08-09" 2>/dev/null | head -100
# 第五步:在网站目录里搜一句话木马特征
grep -rlE "eval\(|assert\(|base64_decode\(|system\(|shell_exec\(" /www/wwwroot --include="*.php" 2>/dev/null | head -50
定位到入口后,把攻击源 IP、利用的 URL、时间点记录下来。这里要特别提醒:很多攻击是自动化批量扫描,如果你的 WordPress、ThinkPHP、老版本框架没有及时更新,中招只是时间问题。
三、清理恢复与加固上线:补洞、清马、改密三件事
找到入口、确认损失范围后,进入清理恢复阶段。顺序不能乱:先备份当前现场,再清理木马,然后补漏洞,最后改所有密码。清理和加固的命令如下:
# 1. 删除确认的木马文件(先用上面的备份命令留档)
rm -f /www/wwwroot/网站目录/wp-includes/class-wp-hook.php.bak # 示例:伪装文件
# 2. 清理计划任务与 SSH 后门
crontab -l | grep -v "可疑任务" | crontab -
sed -i '/不认识的公钥/d' /root/.ssh/authorized_keys
# 3. 补漏洞:升级核心程序、主题、插件到最新版
# 宝塔:软件商店 → 升级 Nginx/PHP/MySQL;WordPress 后台 → 更新到最新版
# 4. 修复文件权限,防止再次写入
chown -R www:www /www/wwwroot/网站目录
find /www/wwwroot/网站目录 -type f -name "*.php" -exec chmod 644 {} \;
改密码清单:服务器 SSH 密码/密钥、宝塔面板密码、MySQL 数据库密码、WordPress 管理员密码、FTP 密码,全部改成高强度新密码,且不要和旧密码有关联。恢复上线前,务必确认漏洞已修复,否则就是白忙一场。
# 5. 上线前最后检查:确认无残留木马、无异常监听端口
netstat -antp | grep LISTEN
ps aux | grep -iE "bash -i|nc -|perl -e|python -c"
# 6. 恢复正常服务
systemctl start php-fpm
systemctl start nginx
上线后 24 小时内持续观察:访问日志里是否还有攻击特征、CPU 是否稳定、文件有没有再次变化。如果同一 IP 反复尝试,直接加入防火墙黑名单。
总结
应急响应的核心是流程化:隔离止损 → 取证备份 → 日志溯源 → 清马补洞 → 改密加固 → 观察上线,六步缺一不可。平时做好三件事能大幅降低中招概率:程序保持最新、重要目录开启防篡改、日志保留至少 90 天。如果你没有专业的安全团队,遇到入侵建议第一时间找专业机构处理——速度网络提供 7×24 小时应急响应服务,从入侵溯源、木马清理到漏洞修复、安全加固一站式解决,帮你把损失降到最低,尽快恢复业务。
