nginx虽不处理tls协议栈缺陷,但可通过禁用不安全协议版本(tls 1.0/1.1、sslv2/v3)、限制高危http方法(trace/options等)、约束connect隧道端口、过滤注入特征及启用hsts等配置,在网关层主动规避协议级攻击。

禁用老旧不安全协议与密码套件
TLS 1.0/1.1 和 SSLv2/v3 已被广泛弃用,支持它们等于为 BEAST、POODLE、FREAK 等攻击敞开大门。必须显式关闭:在 server 或 http 块中配置:
-
ssl_protocols TLSv1.2 TLSv1.3;—— 仅启用 TLS 1.2 及以上 -
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;—— 使用前向保密、AEAD 类型密钥交换与加密套件 -
ssl_prefer_server_ciphers off;—— 让客户端优先选择更安全的协商结果
限制或禁用 HTTP CONNECT 隧道(防正向代理滥用)
攻击者常利用CONNECT 方法建立任意端口隧道,用于扫描、中继恶意流量甚至绕过防火墙。若非必需代理服务,应直接禁止:
在对应 location 块中加入:
-
if ($request_method !~ ^(CONNECT)$) { return 405; }—— 拒绝所有非 CONNECT 请求(仅用于代理场景) - 启用
ngx_http_proxy_connect_module后,严格限定目标端口:proxy_connect_allow 443 993 995; - 禁止开放 SMTP(25)、RDP(3389)、SMB(445)等高危端口
封禁危险 HTTP 方法与异常请求头
TRACE 方法可被用于跨站追踪(XST),OPTIONS 泄露服务器能力,HEAD/PUT/DELETE 在无状态静态服务中通常无业务意义:在 location 块中使用 limit_except:
-
limit_except GET HEAD POST { deny all; }—— 仅允许基础安全方法 - 额外检查
User-Agent、Referer是否为空或含已知扫描器指纹(如nmap、sqlmap),可用map+return 403实现 - 对含
%00、../、;exec、UNION SELECT等典型注入特征的$request_uri直接返回 403
切断协议降级与中间人诱导路径
防止攻击者强制协商低版本协议或篡改响应头泄露信息:补充关键防护项:
-
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;—— 强制 HSTS,避免首次请求走 HTTP -
ssl_session_cache shared:SSL:10m; ssl_session_timeout 4h;—— 复用会话减少重协商,降低降级机会 -
server_tokens off;—— 隐藏 Nginx 版本号,避免暴露已知漏洞版本线索











