温馨提示×

如何通过Nginx提高网站安全性

小樊
40
2025-11-22 06:25:29
栏目: 云计算

Nginx 安全加固实用清单

一 基础防护与信息泄露控制

  • 隐藏版本与标识:在 http/server 块设置 server_tokens off;,必要时使用第三方模块(如 headers-more-nginx-module)移除或替换 Server 响应头,避免暴露 Nginx 版本与运行环境信息。
  • 禁用目录列表与 SSI:对所有 location 明确 autoindex off;,对不需要的 SSI 关闭(ssi off;),防止目录遍历与服务器端包含带来的信息泄露与代码执行风险。
  • 限制敏感方法与请求特征:仅开放必要的 GET/POST 等,禁用 TRACE/TRACK 等危险方法;对包含可疑字符(如 ; ’ < >)的 URI/查询串 直接断开连接(返回 444);对包含 …/ 的路径统一拒绝;对敏感路径(如 /admin|backup|config|db|src/)直接 deny all;
  • 示例片段:
    • 禁用方法与可疑字符拦截
      limit_except GET POST { deny all; }
      if ($request_uri ~* “[;'<>]”) { return 444; }
      if ($args ~* “[;'<>]”) { return 444; }
      location ~ /../ { deny all; }
      location ~* /(admin|backup|config|db|src)/ { deny all; }
    • 目录与 SSI
      autoindex off;
      ssi off;
      以上措施可显著降低攻击面并阻断常见探测与利用路径。

二 传输加密与协议安全

  • 全站 HTTPS 与强制跳转:监听 443 ssl 并配置证书;将 80 端口重定向到 443,确保数据在传输过程中全程加密,降低窃听与篡改风险。
  • 协议与套件:仅启用 TLSv1.2/TLSv1.3,禁用 SSLv2/SSLv3/TLSv1.0/TLSv1.1;使用强加密套件并开启 ssl_prefer_server_ciphers on;,优先由服务器选择更安全的密码套件。
  • HSTS 与浏览器安全头:启用 Strict-Transport-Security(如:max-age=31536000; includeSubDomains; preload),并配合 X-Frame-Options SAMEORIGINX-XSS-Protection “1; mode=block”X-Content-Type-Options nosniffContent-Security-Policy(按站点策略定制)等头部,增强浏览器端防护。
  • 示例片段:
    • 强制 HTTPS 与 HSTS
      server { listen 80; server_name example.com; return 301 https://$host$request_uri; }
      server { listen 443 ssl; server_name example.com;
      ssl_certificate /path/to/fullchain.pem; ssl_certificate_key /path/to/privkey.pem;
      ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on;
      ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
      add_header Strict-Transport-Security “max-age=31536000; includeSubDomains; preload” always;
      add_header X-Frame-Options “SAMEORIGIN”; add_header X-XSS-Protection “1; mode=block”;
      add_header X-Content-Type-Options “nosniff”;
      add_header Content-Security-Policy “default-src ‘self’; script-src ‘self’ ‘unsafe-inline’”; }
      以上配置可有效抵御降级攻击与常见 Web 前端漏洞利用。

三 访问控制与速率限制

  • IP 白名单/黑名单:对管理后台等敏感路径使用 allow/deny 控制来源,仅允许受信任 IP 访问,其余一律拒绝。
  • 认证与访问控制:对敏感接口启用 HTTP Basic Authauth_basic/auth_basic_user_file),作为纵深防御手段。
  • 请求速率与并发限制:使用 limit_req_zone/limit_req 限制单位时间请求数,使用 limit_conn_zone/limit_conn 限制单 IP 并发连接数,缓解 DoS/暴力扫描 与爬虫滥用。
  • 超时与缓冲控制:合理设置 client_body_timeout、client_header_timeout、keepalive_timeout、send_timeoutclient_max_body_size,降低慢速攻击与资源耗尽风险。
  • 示例片段:
    • IP 白名单与基础认证
      location /admin/ { allow 192.168.1.0/24; deny all; auth_basic “Restricted”; auth_basic_user_file /etc/nginx/.htpasswd; }
    • 速率与并发限制(需在 http 块先定义共享内存区)
      limit_req_zone $binary_remote_addr zone=req:10m rate=10r/s;
      limit_conn_zone $binary_remote_addr zone=conn:10m;
      server {
      limit_req zone=req burst=20 nodelay; limit_conn conn 10;
      client_max_body_size 10m; keepalive_timeout 5 5; send_timeout 10; }
      以上策略在保障可用性的同时,有效抑制滥用与资源型攻击。

四 运行环境与运维安全

  • 最小权限与进程隔离:以 非 root 用户运行 Nginx(配置 user 指令),仅开放必要端口(如 80/443),系统防火墙仅放行必要流量。
  • 文件与目录权限:限制配置文件权限(如 /etc/nginx/nginx.conf 640),静态资源与上传目录分离并设置不可执行权限,避免上传 webshell。
  • 更新与依赖管理:及时升级 Nginx 与相关组件,关注安全公告与 CVE,保持修复节奏与版本一致性。
  • 配置审计与语法校验:使用 nginx -t 验证配置,变更通过 nginx -s reload 热加载;定期用 nginx -V 检查编译参数与启用模块;使用 Gixy 等工具检测典型配置安全问题。
  • 日志与监控告警:启用 access/error 日志,结构化记录关键字段(如 客户端IP、请求方法、URI、状态码、UA、响应时间),结合 SIEM/告警 做异常检测与取证。
  • 示例片段:
    • 最小权限与端口
      user www-data;
      events { worker_connections 4096; }
      http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; }
    • 安全运维流程

      校验与热加载

      sudo nginx -t && sudo nginx -s reload

      版本与模块检查

      sudo nginx -V

      配置安全扫描

      gixy /etc/nginx/nginx.conf
      以上实践可提升可运维性与可观测性,缩短故障与入侵发现时间。

0