温馨提示×

nginx安全设置有哪些关键点

小樊
50
2025-10-19 05:37:53
栏目: 编程语言

1. 隐藏服务器标识信息
通过server_tokens off;指令关闭Nginx版本号的返回,避免攻击者通过响应头识别服务器版本及潜在漏洞;进一步可使用headers-more-nginx-module模块彻底移除Server头部(如more_clear_headers Server;),减少信息泄露风险。

2. SSL/TLS加密与协议加固
启用TLS 1.3(最新安全协议)并禁用SSLv2/SSLv3等不安全协议(ssl_protocols TLSv1.3 TLSv1.2;);配置强加密套件(如ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH; ssl_prefer_server_ciphers on;);强制HTTP跳转HTTPS(return 301 https://$host$request_uri;),并通过add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";启用HSTS,防止协议降级攻击。

3. 访问控制与连接限制

  • IP白名单/黑名单:使用allow/deny指令限制敏感接口(如后台管理页面)的访问范围(如location /admin { allow 192.168.1.0/24; deny all; });
  • 并发连接限制:通过limit_conn_zone $binary_remote_addr zone=conn_per_ip:10m;定义IP连接数限制区域,再在serverlocation块中设置单IP最大连接数(如limit_conn conn_per_ip 100;),防止DDoS连接耗尽;
  • 请求速率限制:使用limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;定义请求速率区域,配合limit_req zone=req_limit burst=20 nodelay;限制突发请求(如每秒最多10个请求,允许突发20个),抵御暴力破解或CC攻击。

4. 防恶意请求与攻击

  • 限制HTTP方法:仅允许必要的HTTP方法(如GETPOSTHEAD),通过limit_except指令拒绝其他方法(如location / { limit_except GET POST HEAD { deny all; } }),防止TRACE、DELETE等危险方法攻击;
  • 防缓冲区溢出:调整client_body_buffer_size(如16k)、client_header_buffer_size(如1k)、client_max_body_size(如10m)等参数,限制客户端请求体与头的大小,避免缓冲区溢出;
  • 防路径遍历:使用alias指令替代root指定目录(如location /files { alias /var/www/data/; }),并通过deny all;禁止访问上级目录(如location ~ ^/(.*)/../ { deny all; }),防止通过../../../访问未授权文件;
  • 拦截恶意爬虫:通过map指令匹配User-Agent中的关键词(如botscan),将恶意爬虫请求返回403(如map $http_user_agent $is_bot { default 0; "~*(bot|scan)" 1; } server { if ($is_bot) { return 403; } })。

5. 敏感文件与目录防护

  • 禁止敏感文件访问:通过location指令匹配敏感文件类型(如.conf.log.bak.sql),返回403或444(直接关闭连接)(如location ~* \.(conf|log|bak|sql)$ { deny all; return 444; });
  • 关闭自动目录列表:设置autoindex off;,防止目录无index文件时自动暴露文件列表。

6. 安全头部增强
添加以下响应头防御常见Web攻击:

  • X-Content-Type-Options "nosniff":防止MIME类型嗅探攻击;
  • X-Frame-Options "SAMEORIGIN":防止点击劫持(禁止页面嵌入iframe);
  • Content-Security-Policy "default-src 'self'":限制资源加载来源(仅允许同域),防御XSS攻击;
  • X-XSS-Protection "1; mode=block":启用浏览器XSS过滤。

7. 权限与进程安全

  • 非root运行:通过user指令指定低权限用户(如nginx)和组(如nginx)运行Nginx(如user nginx nginx;),避免进程提权;
  • 文件权限控制:设置Nginx配置文件(如nginx.conf)权限为640(所有者可读写,组可读),日志目录权限为750(所有者可读写执行,组可读执行),防止未授权访问。

8. 日志与监控
开启访问日志(access_log /var/log/nginx/access.log combined;)和错误日志(error_log /var/log/nginx/error.log warn;),记录客户端IP、请求时间、方法、URI等关键信息;定期分析日志,通过fail2ban等工具自动封禁频繁攻击的IP。

9. 模块与版本管理

  • 去除非必要模块:编译时通过--without-http_*选项禁用未使用的模块(如--without-http_autoindex_module禁用自动目录列表),减少攻击面;
  • 定期升级版本:订阅Nginx安全通告(如官方邮件列表),及时升级到最新稳定版,修复已知漏洞。

0