Ubuntu中Nginx如何实现安全防护
小樊
34
2025-12-15 02:20:40
Ubuntu 上 Nginx 安全防护实操清单
一 系统与网络基线
- 保持系统与安全组件更新:执行 sudo apt update && sudo apt upgrade -y,及时修补内核与组件漏洞。
- 启用防火墙并仅放行必要端口:使用 UFW 放行 22/80/443,如:sudo ufw allow 22,80,443/tcp && sudo ufw enable。
- 禁止未使用的模块与端口,减少攻击面;仅开启业务所需的 HTTP/HTTPS。
- 运行权限最小化:确保 Nginx 以低权限用户(如 www-data)运行,避免使用 root 启动 worker 进程。
二 Nginx 基础加固
- 隐藏版本信息:在 http 或 server 块设置 server_tokens off;,避免泄露版本号。
- 限制可用 HTTP 方法:仅允许业务所需的 GET/POST/HEAD,对非常用方法返回 403/444。
- 禁用危险与无用方法:如 TRACE(跨站追踪风险),在 server 块添加:if ($request_method = TRACE) { return 403; }。
- 安全响应头:统一添加 X-Frame-Options、X-XSS-Protection、X-Content-Type-Options、Content-Security-Policy、Strict-Transport-Security(启用 HSTS 仅在配置 HTTPS 后)。
- 敏感目录与文件:禁止访问 .git、.ht、config.php、/etc/passwd* 等;禁止访问隐藏文件(以 . 开头)。
- 错误页面与信息泄露:配置自定义 403/404/50x 页面,并使用 internal 限制直接访问,避免堆栈与路径泄露。
三 访问控制与速率限制
- IP 白名单/黑名单:对 /admin、/api 等敏感路径设置 allow/deny;将恶意 IP 集中到 /etc/nginx/blacklist_ip.conf 并在 http 块 include。
- 频率限制防暴破与滥用:在 http 块定义共享区,如:limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;在登录等接口应用:limit_req zone=req_limit burst=20 nodelay;。
- Referer/Origin 校验(可选):对 POST 接口校验来源域名,缺失或不匹配则返回 403;注意 APP/合法空 Referer 场景需与后端 Token 校验配合。
- 连接与资源限制:设置 client_max_body_size(如 10M)、合理 timeout,防止资源耗尽与慢速攻击。
四 传输加密与 TLS 强化
- 全站 HTTPS:监听 443 ssl http2,将 80 端口 301 跳转至 HTTPS;证书可用 Let’s Encrypt 自动签发:sudo certbot --nginx -d yourdomain.com。
- 协议与套件:仅启用 TLSv1.2/1.3;使用强套件(如 ECDHE-ECDSA/ RSA-AES128/256-GCM),并设置 ssl_prefer_server_ciphers on;。
- 会话与性能:开启 ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m;。
- OCSP Stapling:启用 ssl_stapling on; ssl_stapling_verify on; 并配置可用 resolver(如 8.8.8.8/8.8.4.4)。
五 高级防护与运维
- WAF 能力集成:
- ModSecurity-nginx:编译 Nginx 加载 ModSecurity 连接器,启用 OWASP CRS 规则集,增强对 SQLi/XSS/文件包含 等的拦截能力。
- NAXSI:以“默认拒绝、白名单放行”为策略的 Nginx WAF 模块,适合作为轻量防护层。
- 日志、监控与联动:
- 规范日志格式与级别:access_log /var/log/nginx/access.log main; error_log /var/log/nginx/error.log warn;,并持续分析 /var/log/nginx/access.log、error.log。
- 联动 fail2ban:基于日志触发对暴力破解 IP 的封禁,缩短攻击窗口。
- 配置与证书运维:
- 变更前执行 nginx -t 校验,成功后 systemctl reload nginx 生效;证书使用 certbot renew --dry-run 验证自动续期。
- 定期更新 WAF 规则、IP 黑名单、UA 规则,并进行漏洞扫描与基线巡检。