实时监控防篡改检测网站恶意代码:手把手搭建网站实时监控防篡改

为什么你需要实时监控网站文件

网站被植入恶意代码或文件被篡改,是站长最头疼的问题。
一旦被挂马,轻则收录异常、跳转广告,重则服务器被攻击。实时监控防篡改检测网站恶意代码能第一时间发现异动,帮你争取处理时间。

本文提供两种方案:

  • 有宝塔面板的用户直接使用内置的“网站防篡改”插件。
  • 非宝塔用户用 inotify + md5sum 脚本实现轻量监控。

---

准备工作

  • 一台已运行网站的 Linux 服务器(CentOS 7+/Ubuntu 20+)。
  • SSH 远程登录权限(或宝塔面板后台管理员权限)。
  • 确定网站文件根目录路径(例如 /www/wwwroot/example.com)。

---

方案一:使用宝塔面板防篡改插件(推荐新手)

  1. 登录宝塔面板,进入“软件商店”,搜索“网站防篡改”并安装(免费版可用)。
  2. 安装完成后点击“设置”,在“目录白名单”中输入你的网站根目录(如 /www/wwwroot/example.com)。
  3. 启用“实时防护”,建议同时开启“文件改动通知”。
  4. 如果网站有需要动态写入的目录(如缓存目录 /runtime、上传目录 /uploads),请添加到“排除目录”,否则会误报。
  5. 点击“开启防护”,面板会自动监控所有文件的修改、删除、新建操作,一旦发现变化会记录日志并可以发送告警邮件。

效果验证:手动在网站根目录新建一个 test.html,几秒后台面板日志中会出现“文件新增”记录。

---

方案二:使用 inotify + md5sum 脚本(适合非宝塔环境)

此方案需要 Linux 内核支持 inotify(2.6.13+ 默认支持)。

步骤1:安装 inotify-tools

# CentOS/RHEL
yum install -y inotify-tools

# Ubuntu/Debian
apt install -y inotify-tools

步骤2:创建监控脚本

新建文件 /opt/file_monitor.sh,内容如下:

#!/bin/bash

# 网站根目录
WATCH_DIR="/www/wwwroot/example.com"
# 日志文件
LOG_FILE="/var/log/website_monitor.log"
# 基准哈希文件
BASELINE_FILE="/opt/baseline.md5"

echo "$(date) - 开始监控 $WATCH_DIR" >> "$LOG_FILE"

# 生成基准哈希(首次运行)
find "$WATCH_DIR" -type f -not -path "*/runtime/*" -not -path "*/uploads/*" -exec md5sum {} \; > "$BASELINE_FILE"

# 实时监控
inotifywait -mrq --timefmt '%Y-%m-%d %H:%M:%S' --format '%T %w%f %e' \
-e modify,delete,create,move "$WATCH_DIR" | while read change; do
    # 排除目录检查(这里简单示例,实际用 if 判断路径)
    echo "$change" | grep -qE "(runtime|uploads)" && continue
    
    # 记录变更
    echo "$(date) - 检测到变更: $change" >> "$LOG_FILE"
    
    # 重新计算文件哈希并与基准比较(如需更深检测可扩展)
    file=$(echo "$change" | awk '{print $NF}')
    if [ -f "$file" ]; then
        new_md5=$(md5sum "$file" | awk '{print $1}')
        old_md5=$(grep " $file$" "$BASELINE_FILE" | awk '{print $1}')
        if [ "$new_md5" != "$old_md5" ]; then
            echo "$(date) - 告警:文件 $file 内容已修改" >> "$LOG_FILE"
        fi
    fi
done

步骤3:设置为后台运行并开机自启

chmod +x /opt/file_monitor.sh
nohup /opt/file_monitor.sh &

echo "@reboot root /opt/file_monitor.sh" >> /etc/crontab

提示:脚本中排除了 runtimeuploads 目录,请根据实际业务调整。

---

避坑指南

  • 排除动态目录:缓存、上传、日志等频繁写入的目录一定要排除,否则日志会刷爆。
  • 监控文件数量:网站文件过多时 inotify 可能达到最大监控数限制(/proc/sys/fs/inotify/max_user_watches),可用 echo 81920 > /proc/sys/fs/inotify/max_user_watches 临时调大,如需持久化修改 /etc/sysctl.conf
  • 误报处理:如果是正常更新程序或手动上传文件,先在防篡改系统中放行,而不是关闭监控。
  • 恶意代码特征:监控到文件中突然出现 base64_decodeevalsystem 等函数,或者文件被插入
    1
    系统公告

    机房迁移升级通知

    尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
    服务中心
    客服
    在线客服
    24小时为您服务
    咨询
    联系我们
    联系我们,为您的业务提供专属服务。
    24/7 技术支持
    如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
    24/7 即时支持
    泽御云
    售前客服
    泽御云
    泽御云
    售后客服
    泽御云
    技术支持
    评价
    您对当前页面的整体感受是否满意?
    😞
    非常不满意
    😕
    不满意
    😐
    一般
    🙂
    满意
    😊
    非常满意