部署防篡改实时监控检测网站恶意代码
核心答案
部署防篡改实时监控可以有效检测网站恶意代码注入和文件被篡改的情况。
核心思路是通过安装文件完整性监控工具(如 AIDE、Tripwire 或云厂商的 WebShell 检测服务),设置定时或实时比对基线,发现文件变更后立即发送告警。
本文以 Linux 服务器 + AIDE 为例,从环境准备到告警配置完整演示,零基础也能照做。
适用场景与准备
这套方案适用于使用 Linux(CentOS / Ubuntu)或 Windows 的服务器租用、云服务器用户。
需要你已经通过 SSH 登录到服务器(Windows 用户建议先部署一个宝塔面板或使用 WSL)。
准备条件如下:
- 服务器:已安装 Linux 系统,且有 root 或 sudo 权限。
- 知道网站根目录:例如
/var/www/html或/www/wwwroot/你的站点。 - 开通邮件或钉钉/企业微信通知:用于接收告警(本文使用最简单的邮件告警)。
- 建议先备份:初次运行会扫描全站文件,避免误判。
部署步骤:四步搞定实时监控
1. 安装文件完整性监控工具
我们使用 AIDE(Advanced Intrusion Detection Environment),轻量且无需外网依赖。
# CentOS / Rocky / Alma
sudo yum install aide -y
# Ubuntu / Debian
sudo apt-get update && sudo apt-get install aide -y
安装成功后,初始化配置文件:
sudo aideinit
执行后会生成一个初始数据库 /var/lib/aide/aide.db.new.gz,把它重命名为标准库:
sudo mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
2. 配置监控路径与忽略规则
编辑 AIDE 主配置文件 /etc/aide.conf(不同发行版路径可能为 /etc/aide/aide.conf),在末尾追加你的网站目录,例如:
# 监控整个站点目录,包括权限、哈希、大小、mtime
/var/www/html CONTENT_EX
CONTENT_EX 表示检查文件内容、权限、大小、修改时间等关键属性。
也可以改成 NORMAL(更严格)或 LSPP(更宽松)。
如果不是 Linux 服务器,但依旧需要检查文件是否存在后门,可以同时添加对 .php .jsp .asp 的规则:
/var/www/html/.*\.php$ CONTENT_EX
注意:如果网站有日志或动态缓存目录(如runtime、cache),建议用!/var/www/html/runtime开头加惊叹号排除,避免误报。
3. 生成基线并设定定期对比
初始化或修改配置后,重新生成基线库:
sudo aide --init
sudo mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
设定定时任务(例:每 1 小时自动检测一次,并写入日志):
sudo crontab -e
添加下面一行(每小时的第 5 分钟执行):
5 * * * * /usr/sbin/aide --check 2>&1 | mail -s "AIDE 检测报告" your-email@example.com
这里假设系统已配置好 mail 命令(如 mailx 或 sendmail)。
如果没有,可以换成写入日志文件 + 钉钉机器人通知(篇幅有限,可参考后续 FAQ)。
4. 手动执行一次对比并解读结果
sudo aide --check
如果没有任何输出或只显示 AIDE found NO differences 则表示文件未被篡改。
若有变化,会列出具体文件路径、新旧哈希和属性变化。
例如:
/var/www/html/index.php: size changed, mtime changed
然后检查该文件是否是你自己最近修改的。
如果不是,立即隔离文件并查找后门。
避坑指南 (部署前必看)
- 日志目录别漏了:网站程序自身生成的文件(日志、缓存、session)会被误报为篡改。务必在
aide.conf里用!/path/to/log排除。 - 第一次基线一定要在入侵之前生成:如果服务器已经被挂马,基线库也会记录恶意文件。建议上线新网站或刚重装后就做基线。
- 告警太频繁怎么办:可以调低检测频率,或只检查可执行文件(比如
.php、.js、.sh),忽略图片和静态资源。 - 云服务器自带安全产品的影响:阿里云/腾讯云的云安全中心也有文件监控功能,可能和 AIDE 冲突。建议只选一种,或者将 AIDE 日志路径加入白名单。
常见问题解答
Q1: 我想实时监控,AIDE 能做到秒级吗?
AIDE 本身是定时对比模式,最快可设每分钟一次,但如果文件很多,扫描会占用资源。真正秒级实时监控推荐使用 inotifywait(配合脚本)或云服务商的企业版防篡改(如泽御云提供的服务器安全监控服务)。
Q2: 不想发邮件,怎么用钉钉/企业微信告警?
在 crontab 命令中把 mail -s 替换为调用 webhook 脚本。例如:/usr/sbin/aide --check 2>&1 | curl -X POST -d 'content=检测结果如下:' 但需自行编写钉钉通知脚本。
Q3: 检测到恶意文件后该怎么办?
先备份当前文件(cp malicious.php malicious.php.bak),然后从官网或备份恢复原始文件。使用 find / -name ".php" -newer /tmp/checkpoint 查找同类文件。建议再用在线扫描工具(如 VirusTotal)检测。
Q4: Windows 服务器有没有类似的工具?
Windows 可以使用内置的 fsutil 和计划任务配合 PowerShell 脚本做哈希对比,或安装第三方软件如 OSSEC 客户端。泽御云提供带防篡改功能的 Windows 云服务器,控制台可直接开启文件完整性监控。
结尾
如果你正在部署防篡改实时监控来检测网站恶意代码,建议先按本文步骤在测试环境走一遍,再应用到生产服务器。
遇到异常时优先回看避坑和高频问题部分。
如果需要更完善的实时保护和自动化响应,可以考虑使用泽御云(https://www.zeyuyun.com)等具备增值电信业务经营许可证(证号 B1-20261342)的正规云服务商提供的安全监控产品,减少自行维护告警脚本的精力。