1. 基础防护配置
1.1 隐藏敏感信息
- 禁用版本号暴露
server_tokens off;
- 自定义 Server 头(需安装
headers-more
模块)more_set_headers 'Server: Your-Custom-Name';
1.2 请求频率与连接数限制
- 防止 CC 攻击
limit_req_zone $binary_remote_addr zone=req_per_ip:10m rate=5r/s; limit_conn_zone $binary_remote_addr zone=conn_per_ip:10m; location / { limit_req zone=req_per_ip burst=10 nodelay; limit_conn conn_per_ip 20; # 单IP最大并发连接数 }
1.3 文件与路径防护
- 禁止访问敏感文件
location ~* \.(bak|conf|sql|log|env)$ { deny all; return 404; }
- 禁用目录遍历
location ~ /\. { deny all; } # 隐藏文件 autoindex off; # 禁止目录列表
2. Web 攻击防护
2.1 常见攻击过滤
- SQL 注入/XSS 拦截
set $block 0; if ($query_string ~* "union.*select|eval\(|base64_decode|phpinfo") { set $block 1; } if ($block = 1) { return 403; }
- 拦截恶意 User-Agent
if ($http_user_agent ~* "nmap|wget|curl|sqlmap|nikto") { return 403; }
2.2 方法限制
- 仅允许安全 HTTP 方法
if ($request_method !~ ^(GET|POST|HEAD)$) { return 405; }
2.3 上传文件限制
- 限制上传大小
client_max_body_size 10m; client_body_buffer_size 128k;
3. 访问控制
3.1 IP 黑白名单
- 关键路径 IP 白名单
location /admin { allow 192.168.1.0/24; allow 10.0.0.1; deny all; }
3.2 Basic 认证
- 保护管理后台
location /private { auth_basic "Admin Area"; auth_basic_user_file /etc/nginx/.htpasswd; }
4. HTTPS 强化
4.1 SSL/TLS 优化
- 禁用弱协议/加密套件
ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256'; ssl_prefer_server_ciphers on; ssl_session_timeout 1d; ssl_session_cache shared:SSL:10m;
4.2 安全响应头
- 强制 HSTS
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
- 内容安全策略(CSP)
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'";
5. 高级防护策略
5.1 动态黑名单
- 结合 fail2ban 自动封禁
示例fail2ban
规则:# 监控 Nginx 日志,自动封禁频繁 403 的 IP [nginx-bad-request] enabled = true filter = nginx-bad-request action = iptables[name=nginx, port=http, protocol=tcp] logpath = /var/log/nginx/security.log
5.2 反向代理防护
- 隐藏后端服务信息
proxy_hide_header X-Powered-By; proxy_hide_header Server;
5.3 缓存安全
- 防止缓存中毒
proxy_cache_key "$scheme$request_method$host$request_uri"; proxy_cache_valid 200 302 10m; proxy_no_cache $cookie_sessionid; # 动态内容不缓存
6. 日志与监控
6.1 安全日志分离
- 记录攻击行为
log_format security '$remote_addr - $http_user_agent - [$time_local] "$request" $status'; access_log /var/log/nginx/security.log security;
6.2 实时监控
-
使用 Prometheus + Grafana
通过nginx-module-vts
模块监控流量、连接数等关键指标。
7. 其他关键配置
7.1 超时优化
- 防止慢速攻击
client_body_timeout 10s; client_header_timeout 10s; keepalive_timeout 65s; send_timeout 10s;
7.2 防盗链
- 保护静态资源
location ~* \.(jpg|png|mp4)$ { valid_referers none blocked *.yourdomain.com; if ($invalid_referer) { return 403; } }
7.3 模块安全
-
禁用非必要模块
编译时移除--without-http_autoindex_module
等高风险模块。
8. 应急响应
-
定期备份配置:
nginx.conf
和站点配置。 - 快速封禁 IP:
iptables -A INPUT -s 1.2.3.4 -j DROP
- 一键关闭服务:
systemctl stop nginx && systemctl disable nginx
总结
-
综合防御:Nginx 安全需结合网络层(防火墙)、应用层(WAF)和监控层(日志分析)。
-
持续更新:定期升级 Nginx 版本,关注 CVE 漏洞。
-
最小权限原则:禁用非必要功能,限制用户权限。
通过上述配置,可大幅提升 Nginx 服务器的抗攻击能力,抵御 DDoS、SQL 注入、XSS、目录遍历等常见攻击。建议结合实际业务场景调整参数,并通过 nginx -t
测试配置后重载生效。