温馨提示×

Debian Nginx配置安全策略有哪些

小樊
41
2025-12-29 15:10:53
栏目: 智能运维

Debian 上 Nginx 的安全策略清单

一 基础安全与信息泄露防护

  • 隐藏版本号:在 /etc/nginx/nginx.conf 的 http 块 添加 server_tokens off;,避免泄露 Nginx 版本信息。修改后用 nginx -t 校验并 reload
  • 安全响应头:在 server 或 http 块统一添加关键安全头,建议包含:X-Frame-Options “SAMEORIGIN”(防点击劫持)、X-XSS-Protection “1; mode=block”(浏览器 XSS 过滤)、X-Content-Type-Options “nosniff”(防 MIME 嗅探)、Referrer-Policy “strict-origin-when-cross-origin”(控制 Referer 信息)、Content-Security-Policy(按站点策略收紧,示例见下文)。
  • 禁止访问敏感文件与目录:对 .git、.ht、.env 等敏感路径统一 deny all;,防止源码、配置泄露。
  • 自定义错误页面:使用 error_page 403/404/50x 指向内部页面,避免暴露堆栈与目录结构。
  • 文件与目录权限:网站根目录建议 root:www-data 750,仅对静态资源目录开放 644/755,禁止上传目录执行权限。

二 访问控制与速率限制

  • 敏感路径白名单:对 /admin、/api 等路径使用 allow/deny 限制来源 IP,并叠加 HTTP Basic Auth。示例:
    • 生成密码文件:sudo htpasswd -c /etc/nginx/.htpasswd username
    • 配置片段:
      location /admin/ {
          allow 192.168.1.0/24;
          allow 10.0.0.0/8;
          deny all;
          auth_basic "Restricted Access";
          auth_basic_user_file /etc/nginx/.htpasswd;
      }
      
  • 连接与请求限速:在 http 块定义共享内存区域并应用限流,缓解 DoS/暴力破解。示例:
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    limit_conn addr 100;
    
    limit_req_zone $binary_remote_addr zone=req_zone:10m rate=10r/s burst=20 nodelay;
    limit_req zone=req_zone burst=20 nodelay;
    
  • 请求大小限制:在 server 或 location 设置 client_max_body_size(如 2M/20M),防止超大上传导致资源耗尽。

三 加密传输与证书管理

  • 强制 HTTPS:将 80 端口重定向至 443,并在 443 启用 HTTP/2。示例:
    server {
        listen 80;
        server_name yourdomain.com;
        return 301 https://$host$request_uri;
    }
    server {
        listen 443 ssl http2;
        server_name yourdomain.com;
        ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
    }
    
  • 获取证书:使用 Certbot 自动申请与续期:sudo apt install certbot python3-certbot-nginx && sudo certbot --nginx -d yourdomain.com
  • TLS 参数优化:仅启用 TLSv1.2/TLSv1.3,优先服务器端套件,开启会话缓存与会话超时,提升安全与性能。示例:
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'HIGH:!aNULL:!MD5:!RC4:!3DES';
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1h;
    
  • HSTS 与 OCSP Stapling:
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;
    

四 系统与网络层加固

  • 防火墙:使用 UFW 仅放行必要端口(如 22/80/443),默认拒绝入站。示例:sudo ufw allow 80/tcp; sudo ufw allow 443/tcp; sudo ufw enable
  • SSH 安全:禁用 root 远程登录与密码认证,改用 SSH 密钥;必要时修改默认端口。示例:
    • PermitRootLogin noPasswordAuthentication no
    • 重启服务:sudo systemctl restart sshd
  • 服务最小化:关闭未使用的服务与端口,减少攻击面。
  • 入侵防护:部署 Fail2Ban 监控 Nginx/SSH 日志,自动封禁恶意来源 IP。

五 运行时防护与运维建议

  • 文件上传安全:限制上传大小(如 client_max_body_size),将上传目录与可执行目录分离,禁用脚本执行,校验文件类型与内容。
  • 后端保护:作为反向代理时,限制请求方法(如仅 GET/POST),设置 proxy_read_timeout、连接复用与缓冲限制,隐藏后端真实信息(如 proxy_hide_header X-Powered-By;)。
  • 日志与监控:开启并轮转 access/error 日志,结合 Logwatch/Fail2Ban 做异常检测与封禁;定期审计配置与依赖。
  • 持续更新:保持 DebianNginx 等组件为最新稳定版,及时修补漏洞。
  • 安全提示:CSP 策略需结合站点实际调整,示例为较宽松的起步策略:default-src ‘self’ http: https: data: blob: ‘unsafe-inline’;,上线前应逐步收紧并测试兼容性。

0