Debian 上保障 Nginx 安全性的实用清单
一 系统与基础防护
- 保持系统与软件包为最新,及时修补漏洞:执行 sudo apt update && sudo apt upgrade -y。
- 使用 UFW 或 iptables 仅开放必要端口(如 22/80/443),并默认拒绝其他入站:
- UFW 示例:sudo ufw allow 22,80,443/tcp && sudo ufw enable;
- 或按需使用:sudo ufw allow ‘Nginx Full’。
- 禁止直接使用 root 登录,采用 sudo 提权;为 SSH 启用密钥登录、禁用密码登录与 root 登录,必要时更改默认端口,降低暴力破解风险。
- 部署 fail2ban 监控 Nginx 与 SSH 日志,自动封禁恶意 IP,减轻暴力尝试与爬虫压力。
二 Nginx 服务加固
- 隐藏版本信息:在 http 块加入 server_tokens off;,减少信息泄露。
- 限制可用 HTTP 方法:在需要的 server 或 location 中仅允许 GET/HEAD/POST,其余返回 444 关闭连接。
- 配置合理超时与连接:设置如 client_body_timeout 12; client_header_timeout 12; keepalive_timeout 15; send_timeout 10;,并在 events 中合理规划 worker_connections,缓解慢速攻击与资源耗尽。
- 强化请求与并发限制:
- 并发连接数: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; 在对应 location 使用 limit_req zone=req_zone burst=20 nodelay;
- 管理后台访问控制:对 /admin/ 等路径限制来源 IP 并启用 HTTP Basic 认证:
- 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;
- 安全响应头:统一添加
- X-Frame-Options “SAMEORIGIN”;
- X-XSS-Protection “1; mode=block”;
- X-Content-Type-Options “nosniff”;
- Referrer-Policy “strict-origin-when-cross-origin”;
- Content-Security-Policy “default-src ‘self’ http: https: data: blob: ‘unsafe-inline’”;(可按站点策略收紧)
三 HTTPS TLS 与加密配置
- 证书与自动续期:使用 Let’s Encrypt 与 Certbot 获取并自动配置证书:
- 安装:sudo apt install -y certbot python3-certbot-nginx
- 获取并配置:sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
- 强制 HTTPS 与 HSTS:将 80 端口重定向至 443,并在 443 的 server 块添加
- return 301 https://$host$request_uri;
- add_header Strict-Transport-Security “max-age=31536000; includeSubDomains” always;
- 协议与套件:仅启用 TLSv1.2/TLSv1.3,禁用 SSLv3/TLSv1.0/TLSv1.1 与不安全套件;优先支持 ECDHE 实现 PFS(前向保密)。
- 会话与性能:启用 ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m;,并开启 HTTP/2(listen 443 ssl http2;) 提升性能与安全。
- OCSP Stapling:启用 ssl_stapling on; ssl_stapling_verify on; 并配置可用 resolver(如 8.8.8.8 8.8.4.4),减少客户端验证延迟并抵御吊销伪造。
- 安全细节:禁用 SSL 压缩(CRIME 风险);避免使用已知弱套件与出口级套件;确保 OpenSSL 为修复 Heartbleed(CVE-2014-0160) 等漏洞的版本;如需进一步增强,可结合 HPKP(注意风险与部署要求)。
四 运行监控与维护
- 日志与告警:使用 Logwatch 等工具定期汇总 /var/log/nginx/access.log 与 error.log,关注 4xx/5xx 异常、暴力路径访问与异常 User-Agent。
- 入侵防护:结合 fail2ban 对 Nginx 与 SSH 设置 jail,自动封禁反复失败的来源 IP。
- 变更与回滚:修改 Nginx 配置前先备份,变更后用 sudo nginx -t 校验语法,再 sudo systemctl reload nginx 平滑生效;保留回滚版本以便紧急处置。
- 持续加固:定期审计站点 CSP/Referrer-Policy 等策略,按需收紧;定期更新 Debian 安全补丁与证书,复核防火墙与访问控制规则。