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

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

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

本文提供两种方案:

  • 有宝塔面板的用户直接使用内置的“网站防篡改”插件。
  • 非宝塔用户用 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

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

---

避坑指南

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

    泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

    尊敬的用户:
    泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
    1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
    2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
    3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
    4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
    5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
    6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
    温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
    服务中心
    客服
    在线客服
    24小时为您服务
    咨询
    联系我们
    联系我们,为您的业务提供专属服务。
    24/7 技术支持
    如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
    24/7 即时支持
    泽御云
    售前客服
    泽御云
    泽御云
    售后客服
    泽御云
    技术支持
    评价
    您对当前页面的整体感受是否满意?
    😞
    非常不满意
    😕
    不满意
    😐
    一般
    🙂
    满意
    😊
    非常满意