Ubuntu下Nginx安全设置有哪些
小樊
42
2025-12-28 19:44:11
Ubuntu下Nginx安全设置清单
一 基础系统与网络防护
- 保持系统与安全补丁为最新:执行sudo apt update && sudo apt upgrade -y,及时修复漏洞。
- 仅放行必要端口:使用UFW仅开放SSH(22)、HTTP(80)、HTTPS(443),并启用防火墙;必要时将 SSH 限制为可信 IP。
- 防暴力破解:安装并启用Fail2Ban,对 SSH 与 Nginx 登录失败进行封禁。
- 最小化暴露面:后端服务(如数据库、管理口)禁止公网访问,仅内网可达。
二 Nginx核心配置加固
- 隐藏版本与敏感信息:在**/etc/nginx/nginx.conf的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,降低慢速攻击与资源占用。
- 限制请求体大小:如client_max_body_size 8m/10M,防止大文件上传滥用。
- 安全响应头:统一添加X-Frame-Options “SAMEORIGIN”、X-Content-Type-Options “nosniff”、X-XSS-Protection “1; mode=block”、Referrer-Policy “strict-origin-when-cross-origin”、Permissions-Policy “geolocation=(), microphone=()”。
- 目录与敏感文件:关闭目录列表autoindex off;,禁止访问**/.git/.ht/logs**等敏感路径。
三 传输加密与HTTPS
- 获取并自动配置证书:安装Certbot并运行sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com,证书路径为fullchain.pem与privkey.pem。
- 强制 HTTPS:新增listen 80的server块,返回301跳转至https://$host$request_uri。
- 现代 TLS 配置:启用TLSv1.2/TLSv1.3,优先ECDHE与AEAD套件,开启HTTP/2与OCSP Stapling(配置resolver与缓存)。
- HSTS:添加Strict-Transport-Security “max-age=31536000; includeSubDomains; preload” always;,强制浏览器使用 HTTPS。
四 访问控制与速率限制
- IP 白名单/黑名单:对**/admin/等敏感路径限制来源,如仅允许192.168.1.0/24**、10.0.0.0/8,其余deny all;。
- 速率限制:在http定义共享内存区,如limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;,在location应用limit_req zone=one burst=5 nodelay;,抑制暴力扫描与突发流量。
- 并发连接限制:使用limit_conn_zone与limit_conn限制单 IP 并发,如每个 IP 最多10个连接。
- 带宽限速:结合**limit_rate 300k;**限制单连接速率,平滑消耗。
五 运行环境与持续运维
- 进程与权限:以www-data运行 Nginx,静态资源与日志目录设置最小权限(如配置640、目录750)。
- 日志与监控:定义结构化日志,记录**$remote_addr**、X-Forwarded-For等关键字段;部署nginx-prometheus-exporter暴露**/nginx_status**,结合Prometheus/Grafana观测。
- 自动安全更新:安装并启用unattended-upgrades,仅勾选安全更新。
- 配置与证书备份:定期备份**/etc/nginx与/var/log/nginx**;变更遵循“编辑→sudo nginx -t语法检查→灰度/重载→回滚预案”。
- 可选 WAF:部署ModSecurity以应对SQL 注入/XSS等常见 Web 攻击(按需)。