欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 文化 > Nginx 配置需要注意的安全问题及完整案例

Nginx 配置需要注意的安全问题及完整案例

2025/10/24 21:48:00 来源:https://blog.csdn.net/xiaozukun/article/details/144464284  浏览:    关键词:Nginx 配置需要注意的安全问题及完整案例

参考说明1

1. Nginx 配置需要注意的安全问题

在配置 Nginx 时,有几个常见的安全问题需要注意:

1.1 CRLF 注入漏洞

CRLF 注入漏洞是由于在配置文件中错误地使用了 $uri 变量,导致换行符(CRLF)被注入到 HTTP 头中,从而可能引发会话固定漏洞、CSRF 漏洞或 XSS 漏洞。

修复方法

  • 使用 $request_uri 代替 $uri,因为 $request_uri 是完整的 URI,不会进行解码,从而避免了 CRLF 注入。

1.2 目录穿越漏洞

目录穿越漏洞通常出现在 Nginx 做反向代理时,如果 alias 路径配置不当,可能导致攻击者访问到服务器上的任意文件。

修复方法

  • 确保 location 和 alias 的路径配置一致,避免路径穿越。

1.3 HTTP 头被覆盖的问题

在 Nginx 配置中,子块中的 add_header 会覆盖父块中的 add_header,这可能导致一些重要的安全头被意外移除。

修复方法

  • 在每个需要添加安全头的位置单独配置,或者在父块中配置后,在子块中再次添加,确保不会被覆盖。

1.4 其他安全问题

  • 弱密码套件:确保 ssl_ciphers 配置中不包含不安全的加密套件。

  • CORS 配置不当:过度允许的 CORS 访问可能导致跨站请求伪造(CSRF)攻击。

  • TLS 版本过低:禁用 TLS 1.0 及以下版本,使用更安全的 TLS 1.2 或 TLS 1.3。

2. Nginx 安全配置案例

以下是一个包含上述安全修复措施的 Nginx 配置案例:

nginx

http {# 全局配置client_max_body_size 300M;keepalive_timeout 55;client_body_timeout 10;client_header_timeout 10;send_timeout 10;limit_conn ops 20;limit_conn_zone $binary_remote_addr zone=ops:10m;autoindex off;dav_methods off;server_tokens off;client_body_buffer_size 1K;client_header_buffer_size 1k;large_client_header_buffers 2 1k;# 添加安全头add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; connect-src 'self'; frame-ancestors 'self';";add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";add_header X-Permitted-Cross-Domain-Policies "master-only";add_header Referrer-Policy "origin";add_header X-Download-Options "noopen" always;add_header Clear-Site-Data "storage";add_header Cross-Origin-Embedder-Policy require-corp;add_header Cross-Origin-Opener-Policy same-site;add_header Cross-Origin-Resource-Policy same-site;add_header Permissions-Policy "interest-cohort=()";add_header X-Frame-Options "SAMEORIGIN";add_header X-XSS-Protection "1; mode=block";add_header X-Content-Type-Options "nosniff";# 服务器配置server {listen 80;server_name example.com;# 重定向到 HTTPSreturn 301 https://$host$request_uri;}server {listen 443 ssl http2;server_name example.com;# SSL 证书配置ssl_certificate /path/to/certificate.crt;ssl_certificate_key /path/to/private.key;# 启用更强的 SSL/TLS 配置ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers HIGH:!aNULL:!MD5;# 禁止不安全的 HTTP 方法if ($request_method !~ ^(GET|HEAD|POST)$ ) {return 405;}# 禁止特定 User-Agentif ($http_user_agent ~* "java|python|perl|ruby|curl|bash|echo|uname|base64|decode|md5sum|select|concat|httprequest|httpclient|nmap|scan|nessus|wvs") {return 403;}# 禁止访问特定文件或目录location ~* \.(bak|swp|save|sh|sql|mdb|svn|git|old)$ {deny all;}location /(admin|phpadmin|status) {deny all;}# 静态文件处理location / {root /path/to/website;try_files $uri $uri/ =404;}# 反向代理配置location /api/ {proxy_pass http://backend_server;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}}
}

说明

  1. 全局配置:设置了一些通用的安全参数,如限制请求体大小、连接超时、限制并发连接数等。

  2. 安全头:添加了一系列的安全响应头,以增强网站的安全性。

  3. 服务器配置

    • 配置了 HTTP 到 HTTPS 的重定向。
    • 启用了 SSL/TLS,并配置了更强的加密套件和协议版本。
    • 禁止了不安全的 HTTP 方法和特定的 User-Agent。
    • 禁止了访问特定文件或目录。
    • 设置了静态文件的根目录和反向代理配置。

通过以上配置,可以大大提高 Nginx 服务器的安全性。

参考说明2

  1. 更新 Nginx 版本:确保使用最新版本的 Nginx,以获得最新的安全补丁。
  2. 限制访问:使用 allow 和 deny 指令来限制对服务器的访问,只允许特定的 IP 地址访问。
  3. 隐藏敏感信息:通过修改 server_tokens 设置为 off,可以防止 Nginx 在错误页面上暴露其版本号。
  4. 启用 SSL/TLS:使用 HTTPS 来加密数据传输,防止中间人攻击。
  5. 配置防火墙:使用防火墙(如 iptables 或 ufw)来限制对 Nginx 端口的访问。
  6. 限制请求大小:通过设置 client_max_body_size 来限制客户端可以发送的请求体大小,防止大文件上传导致的拒绝服务攻击。
  7. 使用安全的缓存策略:合理配置缓存策略,避免缓存敏感信息。
  8. 日志记录:启用详细的日志记录,以便监控和分析潜在的攻击行为。

下面是一个完整的 Nginx 安全配置案例:

# 定义一个 upstream 服务器组
upstream backend {server 127.0.0.1:8080;
}# HTTP 服务器块
server {listen 80;server_name example.com;# 重定向所有 HTTP 请求到 HTTPSreturn 301 https://$host$request_uri;
}# HTTPS 服务器块
server {listen 443 ssl;server_name example.com;# SSL 配置ssl_certificate /etc/nginx/ssl/example.com.crt;ssl_certificate_key /etc/nginx/ssl/example.com.key;ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';ssl_prefer_server_ciphers on;# 隐藏 Nginx 版本号server_tokens off;# 限制请求体大小client_max_body_size 10M;# 访问控制allow 192.168.1.0/24; # 允许的 IP 范围deny all; # 拒绝其他所有 IP# 日志记录access_log /var/log/nginx/access.log;error_log /var/log/nginx/error.log;# 反向代理配置location / {proxy_pass http://backend;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}
}

说明:

  • SSL/TLS 配置:使用了强加密套件和协议版本,确保传输的安全性。
  • 隐藏敏感信息:通过 server_tokens off 隐藏 Nginx 的版本号。
  • 限制请求大小:通过 client_max_body_size 限制上传文件的大小。
  • 访问控制:通过 allow 和 deny 指令限制对服务器的访问。
  • 日志记录:启用详细的日志记录,便于监控和分析。

以上配置是一个基本的安全配置案例,实际应用中可能需要根据具体需求进行调整。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词