温馨提示×

Debian Nginx SSL安全最佳实践

小樊
32
2025-11-23 16:53:12
栏目: 云计算

Debian 上 Nginx SSL 安全最佳实践

一 基础安全与系统加固

  • 保持系统与软件为最新:执行 sudo apt update && sudo apt full-upgrade -y,及时修补 OpenSSL/Nginx 漏洞。
  • 仅开放必要端口:使用 UFW 放行 80/443:sudo ufw allow 80,443/tcp && sudo ufw enable;如使用云厂商安全组,仅放通 80/443。
  • 保护私钥与配置:证书与密钥权限建议 600/644,属主 root:root;定期备份 /etc/letsencrypt
  • 隐藏版本信息:在 /etc/nginx/nginx.confhttp 块加入 server_tokens off;,降低信息泄露风险。
  • 启用基础访问控制:对管理后台等敏感路径使用 allow/denyIP 白名单;对异常请求可结合 limit_conn_zone/limit_conn 限流。

二 证书与自动续期

  • 优先使用 Let’s Encrypt 证书:sudo apt install certbot python3-certbot-nginx,获取并自动配置证书:sudo certbot --nginx -d example.com -d www.example.com。
  • 自动续期与热重载:配置 systemd timercron 定期执行 sudo certbot renew --quiet;续期后执行 sudo systemctl reload nginx 生效。
  • 预生成强 DH 参数(若不使用 certbot 内置):sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048/4096

三 推荐的 Nginx SSL 配置片段

  • 强制 HTTPSHTTP/2:将 80 端口重定向到 443,并在 443 监听启用 http2
  • 协议与套件:仅启用 TLSv1.2/1.3,使用 ECDHE 实现 Forward Secrecy,禁用不安全套件与压缩。
  • 会话与 OCSP:开启 会话缓存OCSP Stapling 提升性能与隐私。
  • 安全响应头:启用 HSTS、X-Frame-Options、X-Content-Type-Options、X-XSS-Protection、Referrer-Policy、Content-Security-Policy
  • 方法限制:对非 GET/HEAD/POST 方法返回 405
    示例(按需合并到 server 块):
server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}
server {
    listen 443 ssl http2;
    server_name example.com www.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;  # 若使用 certbot 提供的统一配置
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;   # 若已生成

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:
                ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:
                DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers on;
    ssl_ecdh_curve X25519:P-256:P-384;

    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    ssl_session_tickets off;

    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 1.1.1.1 8.8.8.8 valid=300s;
    resolver_timeout 5s;

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-XSS-Protection "1; mode=block" always;
    add_header Referrer-Policy "no-referrer-when-downgrade" always;
    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:; object-src 'none'; frame-ancestors 'self';" always;

    if ($request_method !~ ^(GET|HEAD|POST)$) { return 405; }

    root /var/www/html;
    index index.html;
}

说明:若已包含 /etc/letsencrypt/options-ssl-nginx.conf,其中通常已设置 ssl_protocols/ssl_ciphers 等,可不再重复;证书路径与 DH 参数 请与实际情况一致。

四 验证与运维

  • 配置语法与生效:每次修改后执行 sudo nginx -t,无误后 sudo systemctl reload nginx
  • 证书续期演练:定期执行 sudo certbot renew --dry-run 验证自动续期是否正常。
  • 安全与性能测试:使用 Qualys SSL Labs SSL Server Test 检查评级(目标 A+);按需调整套件与参数。
  • 日志与入侵防护:启用 access/error log,结合 fail2banlogwatch 做异常登录与攻击检测。

五 进阶与注意事项

  • 关于 HPKP:现代浏览器已弱化或移除对 HTTP Public Key Pinning 的支持,不建议在生产环境使用,优先依赖 证书透明度自动化续期
  • 关于 OCSP Must-Staple:如需启用,需向 CA 申请带 Must-Staple 扩展的证书,并在 Nginx 正确配置 OCSP Stapling;否则可能导致证书验证失败。
  • 关于 HTTP/3/QUIC:如需启用,需 Nginx 支持 QUIC 且按官方模块配置;在多数场景下先确保 TLS 1.2/1.3 + HTTP/2 的安全与性能基线稳固。

0