Nginx安全防护有哪些技巧
导读:Nginx安全防护关键技巧 1. 基础安全配置 隐藏版本信息:在nginx.conf的http或server块中添加server_tokens off;,避免响应头暴露Nginx版本号;可通过headers-more-nginx-modu...
Nginx安全防护关键技巧
1. 基础安全配置
- 隐藏版本信息:在
nginx.conf
的http
或server
块中添加server_tokens off;
,避免响应头暴露Nginx版本号;可通过headers-more-nginx-module
模块彻底移除Server
标识,防止攻击者针对版本漏洞发起攻击。 - 限制访问权限:以非root用户运行Nginx(通过
user
指令指定,如nginx
),并通过chmod 640 /etc/nginx/nginx.conf
设置配置文件权限,确保只有管理员可访问。 - 禁用自动目录列表:在
location
块中添加autoindex off;
,防止未配置索引时暴露目录下的敏感文件(如配置文件、日志)。
2. 访问控制与流量限制
- IP黑白名单:使用
allow
/deny
指令限制敏感接口的IP访问,例如仅允许内部网络访问管理后台:location /admin { allow 192.168.1.0/24; deny all; }
。 - 请求速率与并发限制:通过
limit_req_zone
(限制请求速率)和limit_conn_zone
(限制并发连接数)防止DDoS攻击。例如:http { limit_req_zone $binary_remote_addr zone=req_limit:10m rate=1r/s; # 每秒1个请求 limit_conn_zone $binary_remote_addr zone=conn_limit:10m; # 单IP最大10个并发 } server { location / { limit_req zone=req_limit burst=5 nodelay; # 允许突发5个请求 limit_conn conn_limit 5; # 单IP最大5个并发 } } ```。
- HTTP方法过滤:禁用不安全的HTTP方法(如TRACE、DELETE),仅允许GET、POST、HEAD:
location / { limit_except GET POST HEAD { deny all; } } ```。
3. SSL/TLS加密加固
- 启用强加密配置:禁用SSLv2/SSLv3等不安全协议,配置强加密套件(如ECDHE-RSA-AES256-GCM-SHA384),并优先使用服务器密钥:
ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH; ssl_prefer_server_ciphers on; ```。
- 强制HTTPS与HSTS:通过
return 301 https://$host$request_uri;
强制HTTP跳转HTTPS;添加add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
启用HSTS,强制浏览器始终通过HTTPS访问,防止降级攻击。 - 证书管理:使用Let’s Encrypt等免费CA获取有效证书,定期通过
nginx -t
验证配置语法,并通过reload
热加载,确保证书不过期。
4. 防恶意请求与攻击
- 防SQL注入与XSS:通过
if
语句拦截包含恶意关键词的请求(如union select
),例如:
启用if ($query_string ~* "union.*select.*from") { return 403; }
X-XSS-Protection
头部增强浏览器XSS过滤:add_header X-XSS-Protection "1; mode=block";
。 - 限制请求体大小:通过
client_max_body_size
限制上传文件大小(如10MB),防止大文件上传消耗服务器资源:client_max_body_size 10M; ```。
5. 高级安全增强
- 安全头部设置:添加以下响应头防御点击劫持、内容类型嗅探等攻击:
add_header X-Frame-Options "SAMEORIGIN"; # 防止点击劫持 add_header X-Content-Type-Options "nosniff"; # 防止内容类型嗅探 add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://cdn.example.com"; # 控制资源加载 ```。
- 日志管理与监控:配置详细的访问日志(记录客户端IP、请求时间、状态码等)和错误日志(记录4xx/5xx错误),便于及时发现异常:
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; error_log /var/log/nginx/error.log warn; ```。
- 禁用未使用模块:通过
./configure --without-http_autoindex_module
等参数编译Nginx时禁用未使用的模块(如autoindex
),减少攻击面。
6. 系统级协同防护
- 防火墙配置:使用
iptables
或firewalld
限制仅开放必要端口(如80、443),禁止非法IP访问:iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT iptables -A INPUT -j DROP ```。
- Fail2Ban集成:通过Fail2Ban检测Nginx日志中的频繁失败登录尝试(如401错误),自动封禁恶意IP(如封禁1小时)。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Nginx安全防护有哪些技巧
本文地址: https://pptw.com/jishu/722913.html