35、Nginx中间件安全审计测评

Nginx 中间件安全审计测评:按 8.1.4.3 安全审计 a) 启用审计功能并覆盖每个用户与重要事件、b) 审计记录包含日期时间/用户/事件类型/成败四要素、c) 审计记录保护与定期备份、d) 审计进程保护四项逐条给出配置核查命令、预期输出、判定标准、常见不符合项与整改要点,附版本适用性对照表与测评项对照表。

定位:Nginx 中间件「安全审计」控制点的核查方法与判定口径(等保 2.0 安全计算环境 8.1.4.3)。 配套测评:中间件与容器 · Nginx(完整核查命令单);配套加固:21、Web中间件安全加固;高风险口径:22、高风险判定指引与加固对照表。 适用版本:Nginx 1.18~1.27(log_formataccess_log 语法自 1.10 起稳定;error_log/access_log 默认值与安装方式相关,源码编译默认为 logs/error.loglogs/access.log combined,发行版包常见 /var/log/nginx/)。

使用说明:

  • 本文所有命令均为只读取证命令,不修改配置、不重启服务、不执行清除类操作;确需变更由被测单位运维方在授权下实施。
  • 命令回显本身即证据,须连同命令行一起截图;示例中的地址、账户、路径均为演示值,现场须替换为真实取证结果,并对个人信息与内网管理地址脱敏后再入报告。
  • 命令不存在或输出与示例差异较大时,先确认产品版本与部署形态(物理机/虚拟机/容器/集群),再换用等效命令或转入配置文件、管理控制台取证,不得据命令缺失直接判不符合
  • 文中「默认」「一般」等表述均为初判倾向,须经上机核查 + 访谈 + 配置/制度核对三方印证后定论,并在报告中写明取证来源。

不适用标识说明:

  • 使用 【不适用】 明确标记现场可判定为不适用的控制点,并写明判定依据与承载该能力的上位组件。
  • 依据 GB/T 28448-2019「按测评对象实际承载功能与数据处理范围判定」原则:控制能力由上层应用、统一认证平台、前置代理、堡垒机、日志审计系统、虚拟化平台或云托管平台承载时,应注明测评单元边界后判定不适用或转由上位组件核查,不得机械按缺失判不符合。
  • 产品版本确实不提供该能力(如设备无可信根、社区版无审计模块)时,须核查替代措施并按替代措施的实际效果定档,不得直接判不适用。

一、测评对象与核查入口

Nginx 是自由的、开源的高性能 HTTP 服务器与反向代理服务器,常见两种部署角色,测评时主要功能一栏须分清

角色说明审计取证重点
HTTP 服务器直接发布网站/静态资源access_log 记录用户请求
反向代理负载均衡、转发至后端应用除自身日志外,还须核查后端应用日志是否留存(Nginx 日志不能替代应用审计)

核查入口:Nginx 主目录下的 conf/nginx.conf(源码安装)或 /etc/nginx/nginx.conf(发行版包)。

Nginx 主目录结构界面对照

nginx.conf 配置文件位置界面对照

二、安全审计 a) 应启用安全审计功能,审计覆盖到每个用户,对重要的用户行为和重要安全事件进行审计

对应测评项:GB/T 22239-2019 8.1.4.3 安全审计 a)

判定要点:审计功能已启用且覆盖每个用户与重要安全事件(登录注销、权限变更、审计策略变更、系统异常)、记录含日期时间/用户/事件类型/成败四要素、审计记录受保护并定期备份、留存不少于 6 个月、审计进程受保护且非审计管理员不可中断 → 符合;开关已开但子类别不全、留存不足、仅本地存储无外发 → 部分符合;审计完全未启用且无日志审计系统或堡垒机替代 → 不符合(高风险)。

取证要求:审计策略配置与生效截图(auditd 规则 / auditpol / 高级审核策略)、审计记录抽样(脱敏)、日志存放路径与权限、日志外发到 syslog/日志审计系统/SOC 的配置与收端截图、最早记录时间清单、清理与转存任务配置。

核查方法

# 定位配置文件
nginx -V 2>&1 | grep -o 'conf-path=[^ ]*'      # 编译时指定的配置路径
nginx -t                                        # 校验配置并输出配置文件路径

# 查看生效的日志配置(排除注释行)
grep -nE "^\s*(error_log|access_log|log_format)" /etc/nginx/nginx.conf /etc/nginx/conf.d/*.conf
# 关注的配置项
error_log   /var/log/nginx/error.log  warn;     # 路径 + 级别
access_log  /var/log/nginx/access.log main;     # 路径 + 格式名
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

nginx.conf 日志配置项界面对照

  • 预期现象error_logaccess_log 均已显式配置或沿用默认值;日志级别合理。
error_log / access_log 参数说明

error_log 路径 级别

  • 配置段:mainhttpserverlocation
  • 默认值:error_log logs/error.log error;
  • 关闭:error_log off测评视为不符合
  • 级别由低到高:debug(信息最多)、infonoticewarnerrorcrit ——设为某一级别时,记录该级别及以上的日志

access_log 路径 [格式名 [buffer=大小 [flush=时间]]]

  • 配置段:httpserverlocationif in locationlimit_except
  • 默认值:access_log logs/access.log combined;(部分发行版默认格式名为 main
  • 关闭:access_log off测评视为不符合
  • buffer:日志写入缓存大小,默认 64k
  • gzip:写入前压缩,1~9,默认 1
  • flush:缓存最长保留时间
  • if:条件判断,计算结果为 0 或空串时关闭该作用域的访问日志

判定标准

结论条件
符合error_logaccess_log 均已启用且级别合理(errorwarn,不建议 crit/off),日志实际有内容产生
部分符合仅启用其中一类日志;或级别设为 crit 导致错误信息基本不落盘
不符合access_log off / error_log off,或日志文件为空且无外送

反向代理场景的额外判据:若 Nginx 仅作反向代理,其访问日志只能证明「转发层有审计」, 后端应用自身的审计日志仍需单独取证;反之亦然。两侧缺一,本项最多判部分符合。

证据留存nginx.conf 日志配置段截图、ls -l 日志目录清单、日志内容抽样截图。

三、安全审计 b) 审计记录应包括事件的日期和时间、用户、事件类型、事件是否成功及其他与审计相关的信息

对应测评项:GB/T 22239-2019 8.1.4.3 安全审计 b)

核查方法

# 日志文件位置(示例为源码安装目录,发行版常见 /var/log/nginx/)
ls -l logs/
tail -n 5 logs/access.log

Nginx 日志目录界面对照

Nginx 日志文件列表界面对照

Nginx 默认的 combined(或发行版预置的 main)格式已包含时间、来源地址、请求、状态码等要素。

access.log 日志内容样例界面对照

192.168.21.176 - - [28/Sep/2020:14:34:48 +0800] "GET /favicon.ico HTTP/1.1" 404 555 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"

日志字段与等保要素对照

日志字段说明示例对应等保要素
$remote_addr客户端地址192.168.21.176主体(来源)
$remote_user客户端用户名称(需开启认证才有值)-用户
$time_local访问时间与时区[28/Sep/2020:14:34:48 +0800]日期和时间
$request请求的 URI 与 HTTP 协议"GET /favicon.ico HTTP/1.1"事件类型
$statusHTTP 状态码404事件是否成功
$body_bytes_sent发送给客户端的响应字节数555其他相关信息
$http_refererURL 跳转来源-其他相关信息
$http_user_agent客户端浏览器/终端信息"Mozilla/5.0 …"其他相关信息
$http_x_forwarded_for代理场景下的真实客户端地址(需上游同步配置)-主体(代理场景必配)
$request_time请求总耗时0.165其他相关信息
$upstream_addr后端 upstream 地址10.36.10.80:80其他相关信息(反向代理场景)
$ssl_protocol / $ssl_cipherSSL 协议版本与算法TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256传输加密佐证

log_format 配置界面对照

补充核查:日志时间准确性

date                      # 操作系统时间
date -u                   # UTC 时间,核对时区
timedatectl status        # systemd 系:NTP 同步状态
  • 中间件日志时间跟随操作系统时钟,操作系统时间不正确则审计记录时间不可溯源 → 本项至少部分符合。

判定标准

结论条件
符合log_format 已含时间、事件类型、事件结果等要素,且用户要素($remote_user 或应用层审计)可追溯
部分符合缺用户要素且应用层无审计可关联($remote_user 恒为 - 的典型情形);或日志时间未与 NTP 同步
不符合仅记录来源 IP 与请求行,无用户、时间或结果要素,且无应用层审计补充

用户要素的取证口径:Nginx 默认日志的 $remote_user 仅在启用 HTTP 基本认证时才有值;以应用层会话/令牌识别用户的 Web 应用,须与应用层审计组合取证,两侧均无用户标识时按部分符合定档(见上文警示)。

证据留存log_format 配置截图、access.log 抽样截图(含字段)、应用层审计记录(组合取证时)、时间同步状态截图。

四、安全审计 c) 应对审计记录进行保护,定期备份,避免受到未预期的删除、修改或覆盖等

对应测评项:GB/T 22239-2019 8.1.4.3 安全审计 c)

核查方法

  1. 日志文件权限——确认仅管理员(属主/管理组)具有读写权限,其他组无修改权限。
# Linux(推荐 ≤640,属主 root 或 nginx 运行用户)
ls -l /var/log/nginx/
stat -c '%A %U:%G %n' /var/log/nginx/access.log /var/log/nginx/error.log

# Windows
icacls <nginx安装目录>\logs\access.log

Windows 日志文件权限界面对照

普通用户组无修改权限界面对照

  • 预期现象:属主为 root(或 nginx 运行用户)、权限 640/600users/other 组无写权限。
  1. 定期备份——核查是否配置日志外送(syslog/日志采集代理)或定期备份至备份服务器。
# Nginx 原生支持 syslog 外送(1.7.1+),配置示例
# access_log syslog:server=10.0.0.10:514,facility=local7,tag=nginx,severity=info main;
# error_log  syslog:server=10.0.0.10:514,facility=local7,tag=nginx,severity=error  warn;
grep -nE "syslog" /etc/nginx/nginx.conf /etc/nginx/conf.d/*.conf
  1. 留存 ≥6 个月——核查 logrotate 配置与备份服务器留存策略。
cat /etc/logrotate.d/nginx
logrotate 留存 ≥6 个月配置示例
/var/log/nginx/*.log {
    daily
    rotate 180
    missingok
    notifempty
    compress
    delaycompress
    sharedscripts
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

daily + rotate 180 ≈ 180 天,满足「不少于 6 个月」的留存要求。

判定标准

结论条件
符合日志权限受限(其他用户不可改)+ 有定期备份或外送 + 留存 ≥6 个月
部分符合仅满足其中两项(常见情形:权限合规但无备份,或本地轮转 7 天)
不符合任意用户可删改日志;或无备份且留存明显不足

Nginx 自身不提供定时备份能力,实践中依赖 logrotate 本地轮转 + FTP/rsync/日志采集代理外送。 仅有 logrotate 本地轮转(通常保留 7~14 天)不足以满足 6 个月留存,须有外送或异地备份佐证。

证据留存:权限截图、logrotate 配置或备份任务截图、备份服务器留存策略截图/制度文件。

五、安全审计 d) 应对审计进程进行保护,防止未经授权的中断

对应测评项:GB/T 22239-2019 8.1.4.3 安全审计 d)

核查方法:确认日志写入由 Nginx 工作进程完成,无独立审计进程可被单独停止; 并核查非授权用户是否具备停止 Nginx 服务或删除日志的权限。

ps -ef | grep -E "nginx" | grep -v grep     # 观察 master/worker 进程属主
systemctl status nginx                       # 服务管理权限归属

判定标准

  • 符合:日志写入与中间件主进程绑定,非授权账户无法停止服务或删除日志(服务管理权限受限、日志目录权限受限);
  • 部分符合:日志权限受限但任意运维账户均可 systemctl stop nginx(无变更管控);
  • 不符合:审计功能可被普通账户关闭(如任意用户可修改配置并执行 access_log off 后 reload)。

六、常见不符合项(测评高频)

不符合情形出现频率整改要点
access_log off 或注释掉 access_log 且无外送启用访问日志并配置 logrotate
error_log 级别设为 crit,错误信息基本不落盘调整为 errorwarn
日志仅本地轮转 7~14 天,无备份无外送最高配置 syslog 外送或采集代理,留存 ≥6 个月
访问日志无用户标识($remote_user 恒为 -应用层补审计,或在 log_format 追加用户/会话字段
日志文件 666/777,普通用户可删改收紧至 640,属主 root
反向代理场景只提供 Nginx 日志,后端应用无审计补齐后端应用审计记录
日志时间未与时区/NTP 同步启用 chrony/ntp 并核对时区

版本适用性对照

Nginx 1.18Nginx 1.20~1.24Nginx 1.25+说明
log_format / access_log 语法一致一致一致自 1.10 起稳定
syslog 外送(syslog: 目标)支持(1.7.1+)支持支持建议用于满足外送与留存要求
默认日志格式名combined(源码编译)/ main(多数发行版预置)同左同左以现场 nginx.conf 实际为准
默认日志路径logs/(源码编译)或 /var/log/nginx/(发行版包)同左同左nginx -Vconf-path 定位配置后确认
error_log 级别取值debug|info|notice|warn|error|crit|alert|emerg同左同左记录该级别及以上

测评项对照表

控制点核查命令 / 配置项(Nginx)
安全审计 a)nginx -t 定位配置 → grep -nE "^\s*(error_log|access_log)" nginx.conf;两类日志均启用且级别合理
安全审计 b)tail -n 5 access.log;核对 time/request/status 等要素;重点核查用户标识$remote_user
安全审计 c)stat -c '%A %U:%G %n' *.log(权限)+ cat /etc/logrotate.d/nginx(留存)+ syslog 外送配置(备份)
安全审计 d)ps -ef | grep nginx + 配置文件写权限核查(防 access_log off 后 reload)
时间同步timedatectl status / date -u(审计时间可溯源的前置条件)

参考依据

  • GB/T 22239-2019《信息安全技术 网络安全等级保护基本要求》(8.1.4.3 安全审计 a)~d)(Web 中间件自身)):http://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=BAFB47E8874764186BDB7865E8344DAF
  • GB/T 28448-2019《信息安全技术 网络安全等级保护测评要求》(测评对象边界认定、单元测评实施与结果判定:符合/部分符合/不符合/不适用):http://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=7E736CDF4502B6FF1258DD250AA3EC8C
  • GB/T 22240-2020《信息安全技术 网络安全等级保护定级指南》、GB/T 25070-2019《安全设计技术要求》、GB/T 28449-2018《测评过程指南》,可在全国标准信息公共服务平台检索:http://openstd.samr.gov.cn/bzgk/gb/
  • Nginx 官方文档·ngx_http_log_module:https://nginx.org/en/docs/http/ngx_http_log_module.html
  • NGINX 官方文档入口:https://docs.nginx.com/
  • 《网络安全等级保护测评高风险判定指引》(中关村信息安全测评联盟团体标准)——高风险情形判定口径,站内对照表:22、高风险判定指引与加固对照表
  • 命令核验说明:Nginx 配置指令以 nginx.org 官方 ngx_http_log_module 文档核验(核验日期 2026-09-02)。四处须留意:① Nginx 自身无「审计」子系统,8.1.4.3 的核查对象是 access_log/error_log 与其字段完备性,判定时须写明这是以访问日志承载审计能力,并核查是否有日志审计系统/SOC 做集中留存;② 默认 combined 日志格式不含请求体、响应状态明细与耗时,且「用户」维度通常只能取到 $remote_user(仅在启用 HTTP 认证时有值)或 $remote_addr,若业务鉴别由后端应用承载,须转由应用侧审计取证并注明测评单元边界;③ access_log syslog:server=... 自 Nginx 1.7.11 起支持,商用版 NGINX Plus 另有实时指标接口,社区版与 Plus 的能力差异须在判定前确认;④ 8.1.4.3 d) 审计进程保护在 Linux 下体现为运行账户最小化(user 指令)、日志目录权限、systemd 单元保护与是否可被普通用户 nginx -s stop,须逐项取证而非仅看进程是否存在。

关联文章