温馨提示×

nginx日志审计:如何确保日志完整性

小樊
41
2025-12-07 09:56:10
栏目: 编程语言

Nginx 日志完整性与审计落地方案

一 目标与总体架构

  • 完整性目标:做到“不丢、不改、可追溯”。不丢:日志不因进程重启、切割、磁盘满而丢失;不改:日志内容在写入后不可被未授权篡改;可追溯:任何访问与变更都有可验证记录(时间线、操作者、校验值)。
  • 架构要点:本地落盘(权限最小化)→ 实时或准实时外发(加密、至少一次投递)→ 集中存储与不可变保留(WORM/只读归档)→ 校验与告警(缺失、延迟、篡改)。

二 采集与写入阶段的完整性控制

  • 权限最小化与路径隔离:将日志存放在 /var/log/nginx/ 等 Web 根目录之外;目录权限 700、日志文件 600,仅 root/nginx 可访问;禁止通过 Web 直接访问 .log/.txt 等文件(返回 403)。示例:
    • 路径与权限:/var/log/nginx/ 目录 700,access.log/error.log 600
    • Nginx 拦截:location ~* .(log|txt)$ { deny all; return 403; }
  • 可靠写入与缓冲:启用缓冲减少 I/O 抖动,确保进程异常时不会丢失已缓冲数据(以 flush 间隔落盘)。示例:
    • access_log /var/log/nginx/access.log main_ext buffer=32k flush=1m;
  • 避免信号误用导致丢日志:使用 USR1 触发日志轮转,避免用 HUP 全配置重载引发短暂不可预期行为。
  • 云原生场景:采用 sidecar(如 Filebeat/Fluentd)采集,避免业务容器直接写宿主机卷;为 sidecar 配置最小权限与只读根文件系统(readOnlyRootFilesystem)。

三 轮转与归档阶段的完整性控制

  • 使用 logrotate 管理切割、压缩与保留,确保“旧文件不被覆盖、新文件权限正确、轮转可回滚”。示例配置要点:
    • /var/log/nginx/*.log {
      • daily | size 1G
      • rotate 30
      • missingok notifempty
      • compress delaycompress
      • dateext dateformat -%Y%m%d%H
      • create 0644 root adm
      • sharedscripts
      • postrotate
        • [ -f /var/run/nginx.pid ] && kill -USR1 $(cat /var/run/nginx.pid)
      • endscript
    • }
  • 关键注意点:
    • 切割后由 postrotate 发送 USR1,Nginx 会重新打开日志文件,避免写入失败或丢失。
    • 设置 create 明确新日志属主与权限,避免脚本执行后变为 root 导致后续写入失败。
    • 合理设置 maxsizedateext,避免单文件过大与命名冲突。
    • 保留期与容量联动监控,防止“存储泄漏”。

四 传输与集中存储阶段的完整性控制

  • 加密传输:跨主机/跨公网传输使用 SFTP/SCP/rsync over SSH 或 TLS,防止传输中被窃取或篡改。
  • 至少一次投递与断点续传:采集器开启 ack/确认机制与本地持久化队列,网络抖动不丢日志。
  • 写入不可变存储:集中平台启用 WORM(Write Once Read Many) 或对象锁,设置合规保留期,禁止改写与删除。
  • 统一时间与时区:全链路统一 UTC 或固定时区(如 Asia/Shanghai),日志字段使用 $time_iso8601 或统一格式,避免排序与关联错误。
  • 敏感信息脱敏:在写入前或采集端脱敏 Cookie/SessionID/手机号/邮箱 等,降低泄露与合规风险。

五 校验、监控与审计落地

  • 文件与进程健康巡检(示例命令):
    • 文件描述符与句柄泄漏:lsof -p $(cat /var/run/nginx.pid) | grep log
    • Inode 与磁盘:df -i /var/log;df -h /var/log
    • 权限与属主:namei -l /var/log/nginx/access.log
    • 信号与行为:strace -p $(cat /var/run/nginx.pid) -e trace=signal
  • 完整性校验与留痕:
    • 采集端/存储端为每批日志生成 SHA-256/512 校验值,写入 校验日志;定期比对与抽样验签。
    • 对归档启用 对象锁/WORM,变更仅能追加,保留操作审计轨迹。
  • 监控与告警:
    • 采集延迟、写入错误、轮转失败、磁盘/Inode 阈值、日志量异常波动等设置 告警
    • 安全分析:对 4xx/5xx 爆发、异常 UA/Referer、可疑路径与扫描特征做规则与模型检测(如 ELK/Graylog/Loki 与告警规则)。

0