如何全面加固Nginx生产环境,从移除版本号到设置请求方法白名单?

2026-04-29 01:512阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计803个文字,预计阅读时间需要4分钟。

如何全面加固Nginx生产环境,从移除版本号到设置请求方法白名单?

Nginx生产环境加固,非堆配置,而是围绕信息最小暴露、权限最小分配、行为最大约束三个核心展开。关键不在全开所有防护项,而在于每一条规则都有明确意图和验证效果。

一、彻底隐藏服务指纹:从响应头到错误页

攻击者第一眼就看 Server 头和 4xx/5xx 页面——这是最廉价的情报来源。仅靠 server_tokens off 不够,它只隐藏版本号,Server 字段仍为 nginx

  • http 块中启用基础隐藏:server_tokens off;
  • 若已编译安装 headers-more-nginx-module,添加:more_set_headers 'Server: WebServer';
  • 源码安装用户建议直接修改 src/core/nginx.h:将 NGINX_VER 改为自定义字符串(如 "AppServer/1.0"),再重新编译
  • 验证方式必须包含两步:用 curl -I 检查首页响应头;用 curl http://domain/nonexist 触发 404 页面,确认 HTML 中无 nginx 字样

二、运行身份与文件权限双隔离

默认以 root 或 nobody 运行是高危习惯。nobody 无组归属,root 则权限过大,都违背最小权限原则。

  • 创建专用低权用户:useradd -M -s /sbin/nologin nginx
  • 在 nginx.conf 全局块顶部指定:user nginx nginx;(注意:第二个 nginx 是组名)
  • 配置文件权限收紧至 640chmod 640 /usr/local/nginx/conf/nginx.conf,属主 root,属组 nginx
  • 日志目录(如 /usr/local/nginx/logs)属组设为 nginx,并赋写权限:chgrp nginx logs && chmod g+w logs

三、HTTP 方法严格白名单控制

绝大多数业务只需 GET 和 POST。TRACE、OPTIONS、PUT、DELETE 等方法若未显式禁用,可能被用于探测或攻击(如 HTTP 方法绕过、缓存投毒)。

  • 在需保护的 location 块内使用 limit_except
  • limit_except GET POST { deny all; }
  • 若接口明确需要 HEAD 或 OPTIONS(如 CORS 预检),可显式加入:limit_except GET HEAD POST OPTIONS { deny all; }
  • 避免在全局 http 块使用该指令,防止误伤健康检查等必要请求

四、敏感资源与路径访问封堵

静态资源目录、配置备份、日志文件、临时文件等,一旦被直接访问,极易导致信息泄露甚至远程代码执行。

  • 关闭目录浏览:autoindex off;(放在 httpserver 块)
  • 禁止访问常见敏感后缀:location ~* \.(conf|ini|log|bak|swp|git|env)$ { deny all; }
  • 限制对 .htaccess.user.ini 等 Apache/PHP 类配置文件的访问
  • 对 API 接口路径(如 /api/v1/admin)单独加 IP 白名单或 Basic Auth,不依赖前端逻辑
标签:Nginx

本文共计803个文字,预计阅读时间需要4分钟。

如何全面加固Nginx生产环境,从移除版本号到设置请求方法白名单?

Nginx生产环境加固,非堆配置,而是围绕信息最小暴露、权限最小分配、行为最大约束三个核心展开。关键不在全开所有防护项,而在于每一条规则都有明确意图和验证效果。

一、彻底隐藏服务指纹:从响应头到错误页

攻击者第一眼就看 Server 头和 4xx/5xx 页面——这是最廉价的情报来源。仅靠 server_tokens off 不够,它只隐藏版本号,Server 字段仍为 nginx

  • http 块中启用基础隐藏:server_tokens off;
  • 若已编译安装 headers-more-nginx-module,添加:more_set_headers 'Server: WebServer';
  • 源码安装用户建议直接修改 src/core/nginx.h:将 NGINX_VER 改为自定义字符串(如 "AppServer/1.0"),再重新编译
  • 验证方式必须包含两步:用 curl -I 检查首页响应头;用 curl http://domain/nonexist 触发 404 页面,确认 HTML 中无 nginx 字样

二、运行身份与文件权限双隔离

默认以 root 或 nobody 运行是高危习惯。nobody 无组归属,root 则权限过大,都违背最小权限原则。

  • 创建专用低权用户:useradd -M -s /sbin/nologin nginx
  • 在 nginx.conf 全局块顶部指定:user nginx nginx;(注意:第二个 nginx 是组名)
  • 配置文件权限收紧至 640chmod 640 /usr/local/nginx/conf/nginx.conf,属主 root,属组 nginx
  • 日志目录(如 /usr/local/nginx/logs)属组设为 nginx,并赋写权限:chgrp nginx logs && chmod g+w logs

三、HTTP 方法严格白名单控制

绝大多数业务只需 GET 和 POST。TRACE、OPTIONS、PUT、DELETE 等方法若未显式禁用,可能被用于探测或攻击(如 HTTP 方法绕过、缓存投毒)。

  • 在需保护的 location 块内使用 limit_except
  • limit_except GET POST { deny all; }
  • 若接口明确需要 HEAD 或 OPTIONS(如 CORS 预检),可显式加入:limit_except GET HEAD POST OPTIONS { deny all; }
  • 避免在全局 http 块使用该指令,防止误伤健康检查等必要请求

四、敏感资源与路径访问封堵

静态资源目录、配置备份、日志文件、临时文件等,一旦被直接访问,极易导致信息泄露甚至远程代码执行。

  • 关闭目录浏览:autoindex off;(放在 httpserver 块)
  • 禁止访问常见敏感后缀:location ~* \.(conf|ini|log|bak|swp|git|env)$ { deny all; }
  • 限制对 .htaccess.user.ini 等 Apache/PHP 类配置文件的访问
  • 对 API 接口路径(如 /api/v1/admin)单独加 IP 白名单或 Basic Auth,不依赖前端逻辑
标签:Nginx