
当 Web 服务器出现异常(如页面篡改、响应缓慢、陌生文件增多)时,需立即启动排查流程 —— 核心原则是 “先固定证据,再分层溯源,避免破坏入侵痕迹”。本文基于 Linux 系统(Nginx/Apache)场景,梳理从紧急处理到深度排查的实操步骤,覆盖日志、网络、系统、应用四层关键维度,兼顾新手易懂性与运维专业性。
入侵后首要任务是防止入侵范围扩大,同时保留完整证据,避免后续溯源无据可依:
限制网络访问(而非直接断网)若服务器需对外提供服务,不建议直接断开网络(可能丢失实时入侵痕迹),可通过防火墙临时限制访问: - 仅允许管理员 IP 访问核心端口(如 SSH 22、Web 80/443):
iptables -A INPUT -p tcp --dport 22 -s 192.168.1.100 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
- 若已确认服务器被完全控制(如发现远程控制进程),则立即断开外网,避免攻击者进一步篡改数据。
固定关键证据用只读方式备份入侵相关数据,防止被攻击者删除或篡改: - 备份日志文件(Web 日志、系统日志、应用日志):
tar -czf nginx_log_backup_$(date +%F).tar.gz /var/log/nginx/* --no-overwrite-dir cp /var/log/auth.log /var/log/auth.log_backup_$(date +%F)
- 保存当前进程与网络连接状态:
ps aux > process_list_$(date +%F).txt netstat -antp > net_connections_$(date +%F).txt
- 对 Web 根目录文件做快照(用于后续对比篡改内容):
find /var/www/html -type f -exec md5sum {} \; > web_files_md5_$(date +%F).txt
日志是溯源入侵路径的核心依据,需重点分析Web 服务器日志、系统日志、应用日志三类关键日志,定位 “谁(IP)、在何时、做了什么(操作)”。
Web 日志(如 Nginx 的access.log、Apache 的access_log)记录所有访问请求,需重点排查以下异常:
系统日志记录用户登录、进程启动、文件修改等操作,重点看以下两类:
攻击者入侵后常开放后门端口(如 2222、3333)或建立反向连接(将服务器流量转发到外部 IP),需通过端口监听与网络连接排查:
用netstat或ss查看所有监听端口,对比业务所需端口(如 80、443、22),定位陌生端口:
关键判断点:
- 非业务端口监听(如 9001、6666,可能是后门端口);
- 监听地址为0.0.0.0(允许所有 IP 访问,而非仅本地127.0.0.1);
- 关联进程为陌生程序(如/tmp/xxx,而非nginx、apache)。
排查是否有服务器与陌生 IP 建立持续连接(可能是反向 shell 或数据窃取):
netstat -antp | grep ESTABLISHED | grep -v "192.168.1.200" ss -antp | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 | sort | uniq -c
例如:发现服务器与4.5.6.7:8888建立持续连接,且关联进程是/tmp/shell,则极可能是反向后门。
攻击者入侵后会留下三类痕迹:隐藏进程(维持控制)、特权账户(长期访问)、篡改 / 新增文件(后门或恶意程序),需逐一排查。
用top或ps查看进程,重点关注:
- CPU / 内存占用异常的进程:如无名进程占用 CPU 50% 以上,或内存持续增长;
- 路径可疑的进程:如进程路径在/tmp、/var/tmp(临时目录,易被篡改),或名称类似系统进程(如sshd伪装成sshd123);
- 无文件的进程:用ls /proc/[PID]/exe查看进程对应的可执行文件,若显示 “No such file or directory”,则可能是进程文件被删除(攻击者掩盖痕迹)。
实操命令:
top -b -n 1 | head -20 ps auxf ls -l /proc/1234/exe
攻击者可能新增 root 权限账户,或修改现有账户密码,需排查/etc/passwd(用户列表)和/etc/shadow(密码哈希):
grep "x:0:" /etc/passwd find /etc -name "passwd*" -o -name "shadow*" -mtime -7 -ls cat /etc/passwd | cut -d: -f1
关键风险点:新增用户且 UID=0、用户密码哈希被修改(可通过对比备份的/etc/shadow发现)、存在空密码用户。
重点排查两类文件:Web 根目录的后门文件(用于控制 Web 应用)、系统目录的恶意程序(用于控制服务器)。
Web 根目录排查找最近新增 / 修改的文件、名称可疑的文件(如image.php但内容是 PHP 代码)、隐藏文件(如.htaccess被篡改):
find /var/www/html -name "*.php" -mtime -1 -ls grep -r -E "eval\(|system\(|exec\(|shell_exec\(" /var/www/html --include="*.php" cat /var/www/html/.htaccess | grep -E "RewriteRule|php_value"
系统目录排查找/tmp、/var/tmp等临时目录的陌生文件(攻击者常在此存放恶意程序),或系统命令被替换(如ls、ps被篡改,隐藏异常进程):
find /tmp -type f -executable -ls md5sum /bin/ls
若服务器通过 Web 应用漏洞(如 SQL 注入、文件上传)入侵,需排查应用本身的问题:
- 应用配置文件:查看数据库配置(如config.php)是否被修改,是否泄露账号密码;
- 上传目录:排查是否有非图片 / 文档的文件(如xxx.php),攻击者可能通过文件上传漏洞上传后门;
- 第三方组件:检查是否使用有漏洞的组件(如旧版本 ThinkPHP、Struts2),可通过composer.json(PHP)、package.json(Node.js)查看组件版本,对比 CVE 漏洞库。
手动排查效率低,可借助专业工具快速定位问题:
- 服务器安全软件
- 安全狗(Linux 版):实时监控进程、端口、文件篡改,自动拦截异常 IP;
- 云锁 / 护卫神:侧重 Web 后门查杀与漏洞扫描,支持一键清理 webshell。
- 恶意代码检测工具
- rkhunter/chkrootkit:检测 Linux rootkit(隐藏恶意程序的工具):
- ClamAV:开源杀毒软件,扫描恶意文件:
clamscan -r /var/www/html
- Web 后门查杀工具
- D 盾(Linux 版)/ 河马 webshell 查杀:专门识别 PHP、JSP 等 Web 后门,误报率低,支持批量扫描。
排查完成后,需彻底清除入侵痕迹并加固,防止二次入侵:
- 清除入侵痕迹:删除陌生账户、杀死异常进程、删除后门文件、还原被篡改的系统命令与配置;
- 修补漏洞:升级有漏洞的 Web 组件、修复文件上传 / SQL 注入等漏洞、关闭非必要端口;
- 强化权限:设置复杂密码(如 12 位以上含大小写 + 数字 + 符号)、禁用 root 直接 SSH 登录、限制 Web 目录写入权限(如上传目录仅允许写,不允许执行);
- 开启审计:配置系统审计日志(如auditd),实时记录文件修改、进程启动等操作,便于下次快速溯源;
- 复盘入侵路径:总结 “攻击者如何入侵”(如通过某漏洞→上传后门→新增账户),形成文档,避免同类问题再次发生。
Web 服务器入侵排查的核心是 “分层溯源,证据优先”—— 从日志找到入侵时间线,从网络找到异常连接,从系统找到控制痕迹,从应用找到漏洞根源。排查时需耐心细致,避免遗漏关键痕迹;排查后需彻底加固,才能真正消除风险。对于重要业务,建议定期备份数据、做安全扫描,将入侵风险提前扼杀在萌芽阶段。