
核心要点(TL;DR)
- 文件监控用 inotifywait 实时捕获篡改事件,触发自动恢复。
- 自动恢复用 rsync 从备份源同步,需配置 SSH 免密与排除规则。
- 权限加固:网站目录属主为 root,Nginx 进程仅读权限。
- 定期校验哈希并记录日志,便于追溯与审计。
痛点:网页被篡改,为何总是后知后觉?
网站首页突然被替换成黑页,或者被插入暗链,往往是用户先发现,运维才紧急处理。传统人工巡检效率低,而攻击者利用漏洞上传 webshell 后,可随时修改文件。要解决这个问题,必须建立实时文件监控与自动恢复机制,让篡改行为在秒级内被纠正。本文面向运维/站长,提供一套可落地的 Nginx 网页防篡改配置方案,涵盖监控、恢复、加固与检查清单。
原理:监控与恢复如何协同工作?
防篡改的核心是文件完整性监控(FIM)与自动恢复。通过 inotify 内核事件监控网站目录,一旦检测到修改、创建、删除等操作,立即触发恢复脚本,用 rsync 从可信备份源同步文件。同时,结合权限加固,确保 Nginx 进程无法写入网站目录,从根源上限制篡改行为。整个过程需保证低延迟、高可靠,并避免误恢复动态内容。
实战步骤1:部署 inotify 实时监控
首先安装 inotify-tools:
apt install inotify-tools -y # Debian/Ubuntu
yum install inotify-tools -y # CentOS/RHEL创建监控脚本 /usr/local/bin/watch_web.sh:
#!/bin/bash
WATCH_DIR="/var/www/html"
LOG_FILE="/var/log/web_tamper.log"
inotifywait -m -r -e modify,create,delete,move --format '%T %w%f %e' --timefmt '%F %T' "$WATCH_DIR" | while read TIME FILE EVENT; do
echo "$TIME - $FILE - $EVENT" >> "$LOG_FILE"
# 触发恢复脚本
/usr/local/bin/restore_web.sh
done赋予执行权限并后台运行:
chmod +x /usr/local/bin/watch_web.sh
nohup /usr/local/bin/watch_web.sh &建议使用 systemd 管理服务,确保稳定运行。
实战步骤2:配置 rsync 自动恢复
准备一个可信备份源(如另一台服务器或本地备份目录),并配置 SSH 免密登录。创建恢复脚本 /usr/local/bin/restore_web.sh:
#!/bin/bash
SRC="/backup/web/"
DEST="/var/www/html/"
rsync -av --delete --exclude='cache/' --exclude='logs/' "$SRC" "$DEST" >> /var/log/web_restore.log 2>&1注意:--delete 使目标与源完全一致,--exclude 排除动态目录。确保备份源定期更新(如通过 cron 每天同步)。恢复脚本需在监控脚本中调用,实现秒级恢复。
实战步骤3:权限加固与完整性校验
设置网站目录属主为 root,Nginx 进程仅读:
chown -R root:root /var/www/html
find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;对于关键静态文件,可使用 chattr +i 锁定,但更新时需解锁。定期使用 AIDE 或 md5sum 校验文件哈希,并与备份比对。例如:
md5sum /var/www/html/index.html > /var/log/web_hash.log将校验加入 cron 每日执行,发现异常立即告警。
检查清单与对比:确保方案落地
| 项目 | 检查内容 | 状态 |
|---|---|---|
| 监控覆盖 | inotify 是否监控所有网站目录 | □ |
| 恢复源 | 备份源是否最新且可访问 | □ |
| 排除规则 | 是否排除缓存、日志等动态文件 | □ |
| 权限加固 | 网站目录属主为 root,Nginx 只读 | □ |
| 日志审计 | 监控与恢复日志是否记录并轮转 | □ |
对比传统人工巡检,本方案可实现秒级发现与恢复,大幅降低暴露时间。若需更高级防护,可考虑 AegisX 的网页防篡改能力,提供内核级驱动保护与智能恢复。
行动建议:立即构建防篡改体系
按照上述步骤部署监控与恢复脚本,并加入 systemd 服务确保开机自启。定期审查日志,更新备份源。建议每月进行一次模拟篡改测试,验证恢复流程。安全无小事,主动防御远胜于事后补救。
常见问题(FAQ)
Nginx 网页防篡改需要哪些工具?
核心工具包括 inotify-tools(实时监控文件变化)、rsync(自动恢复)、以及可选的 AIDE(文件完整性校验)。此外,需配置 SSH 免密登录以实现自动化同步。这些工具组合可构建从监控到恢复的闭环。
如何配置 inotify 监控网站目录?
安装 inotify-tools 后,使用 inotifywait -m -r -e modify,create,delete --format '%w%f' /var/www/html 监控目录。将输出重定向到脚本,触发 rsync 恢复。建议在 systemd 服务中运行,确保开机自启。
自动恢复时如何避免误同步?
在 rsync 命令中使用 --exclude 排除缓存、日志等动态文件,并设置 --delete 使目标与源完全一致。同时,备份源应定期更新,确保恢复的是正确版本。建议先在测试环境验证规则。
Nginx 防篡改有哪些权限加固措施?
将网站目录属主设为 root,权限设为 755,文件权限 644。Nginx 进程以 www-data 用户运行,仅拥有读权限。禁用目录写入权限,防止恶意上传。同时,使用 chattr +i 锁定关键文件,但需注意更新时解锁。
如何验证防篡改方案是否生效?
手动修改一个测试文件,观察是否在几秒内被恢复。检查 inotify 日志和 rsync 输出,确认触发记录。定期使用 md5sum 校验关键文件哈希,并与备份比对。建议每月进行一次模拟攻击测试。