一、适用场景
使用 nginx stream 模块做四层 TCP/TLS 透明代理,包含 SMTPS 邮件代理、数据库代理、通用端口转发等场景。默认透明转发模式下,客户端直接与后端源站完成 TLS 握手,Nginx 无法管控 TLS 版本、加密套件,极易触发各类 SSL/TLS 安全漏洞。
二、常见同类高危 TLS 漏洞汇总
- 服务支持 TLS1.0 / TLS1.1 老旧不安全协议
- 服务支持 RSA 静态密钥交换,无前向保密能力
- 启用 CBC 模式、SHA1 等弱加密套件
- 存在不安全 SSL 重协商漏洞
- 未启用 TLS1.3 高安全传输协议
- 证书密钥长度不足、签名算法薄弱
- 开放匿名 DH 弱密钥协商漏洞
三、前置硬性环境要求
1. 必备 Nginx 编译模块
查看编译参数命令
nginx -V
必须拥有两个核心模块,缺一不可:
--with-stream
--with-stream_ssl_module
缺少stream_ssl_module无法在四层代理中管控 SSL,无法完成漏洞修复。
2. 缺失模块解决办法
保留原有全部编译参数,仅追加--with-stream_ssl_module,执行make编译,替换二进制程序即可,不改动任何业务配置。
3. 软件版本最低要求
- Nginx ≥1.13.0
- OpenSSL ≥1.1.1(完整支持 TLS1.3 协议)
四、核心修复原理
- 原始透明代理模式:客户端→Nginx 转发→后端源站TLS 握手由客户端与后端直连完成,漏洞由后端决定,修改 Nginx 配置无效。
- 安全修复模式:客户端→Nginx 终结 SSL(统一管控 TLS 规则)→Nginx 发起 SSL 连接后端对外暴露端口的所有 TLS 策略全部由 Nginx 定义,漏洞扫描仅识别 Nginx 配置,从源头封堵所有弱协议、弱加密套件。
五、通用标准安全配置
stream {
resolver 114.114.114.223.5.5.5 valid=30s;
resolver_timeout 5s;
server {
# 对外监听端口,开启SSL终结
listen 自定义端口 ssl;
# 证书配置(自签证书/商业正式证书均可)
ssl_certificate 证书存放完整路径;
ssl_certificate_key 私钥存放完整路径;
# 漏洞修复核心配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-CHACHA20-POLY1305-SHA256;
ssl_prefer_server_ciphers on;
ssl_ecdh_curve secp384r1:secp521r1;
ssl_reject_handshake on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# 后端代理连接配置
proxy_ssl on;
proxy_ssl_protocols TLSv1.2 TLSv1.3;
proxy_pass 后端服务地址:后端端口;
}
}
六、单项漏洞精准对应修复方案
| 漏洞类型 | 对应修复配置 | 实现作用 |
|---|---|---|
| TLS1.0/1.1 高危协议 | ssl_protocols TLSv1.2 TLSv1.3; | 直接拒绝低版本 TLS 握手请求 |
| RSA 弱密钥交换 | 仅保留 ECDHE 开头加密套件 | 彻底剔除纯 RSA 静态密钥协商 |
| 弱加密算法漏洞 | 剔除所有 CBC、SHA1、MD5 类套件 | 仅保留 GCM 高强度加密算法 |
| 不安全 SSL 重协商 | ssl_reject_handshake on; | 拦截恶意重协商攻击行为 |
| 匿名 DH 弱密钥漏洞 | 配置 ssl_dhparam 高强度密钥 | 禁止无身份弱密钥协商 |
| 未启用 TLS1.3 | 配置内写入 TLSv1.3 | 启用高速高安全新一代协议 |
七、通用漏洞封堵验证命令
1. 验证 TLS1.0 协议已封禁
openssl s_client -connect 代理IP:端口 -tls1
验收标准:握手直接失败,弹出协议版本错误,无法建立连接。
2. 验证仅使用 ECDHE 安全密钥交换
openssl s_client -connect 代理IP:端口 -tls1_2 | grep Cipher
验收标准:协商套件全部以ECDHE-开头,无独立 RSA 开头套件。
3. 强制弱 RSA 套件连接测试拦截
openssl s_client -connect 代理IP:端口 -tls1_2 -cipher AES128-SHA
验收标准:握手失败,拒绝弱加密套件接入。
4. 枚举全部开放加密套件
nmap --script ssl-enum-ciphers -p 端口 代理IP
验收标准:无任何老旧协议、弱套件、纯 RSA 密钥套件。
八、SMTPS 邮件代理专属功能验证方法
1. 原生 OpenSSL 手动验证(无需额外安装软件)
-
连接邮件代理端口
openssl s_client -connect 代理IP:代理端口 -tls1_2
连接成功出现 220 服务响应,代表 TLS 链路与四层转发正常。
-
执行标准 SMTP 交互指令
EHLO mailtest
AUTH LOGIN
- 弹出 334 账号提示:输入邮箱账号 Base64 编码
- 弹出 334 密码提示:输入邮箱授权码 Base64 编码
-
本地生成 Base64 编码(安全无外泄)
echo -n "邮箱账号" | base64
echo -n "邮箱第三方授权码" | base64 -
认证成功判定返回
235 Authentication successful代表鉴权正常,代理转发无异常。 -
完整发送测试邮件指令
MAIL FROM:<发件邮箱>
RCPT TO:<收件邮箱>
DATA
Subject: 邮件代理功能测试
代理转发收发邮件正常
.
末尾单独输入英文小数点结束内容,返回250 Ok即发送成功。
2. Swaks 工具自动化一键测试
-
工具安装(CentOS 系统)
yum install -y epel-release swaks
-
通用发送测试命令
swaks --from 发件邮箱 --to 收件邮箱 --server 代理IP:代理端口 --auth LOGIN --auth-user 发件邮箱 --auth-password 邮箱授权码 -tls
输出250 Ok代表邮件推送完成,业务运行稳定。
3. 日常客户端业务配置验证
固定通用配置(漏洞修复前后无需修改)
- SMTP 发送服务器:代理服务器 IP
- 对外端口:代理监听端口
- 加密方式:强制选择 SSL/TLS,禁止 STARTTLS 与无加密
- 登录账号:原有正常使用邮箱账号
- 登录密码:邮箱第三方客户端授权码
验证流程
- 保存配置后直接新建邮件发送
- 收件端正常接收、可双向回复
- 无连接断开、收发延迟、丢信等异常即为正常
4. 邮件代理常见故障排查
- 535 认证失败:未开启邮箱 SMTP 服务、授权码错误、账号限制第三方登录
- 连接超时:服务器未放行端口、Nginx 未启动、端口冲突
- 提示强制 STARTTLS:客户端加密协议选择错误
- 认证成功无法发信:邮箱厂商 IP 风控、反垃圾策略拦截
九、防火墙层面辅助加固方案
- 普通包过滤防火墙:仅能管控 IP 与端口,无法识别 TLS 协议版本,不能修复 SSL 类漏洞。
- 下一代 NGFW 防火墙(应急方案)
- 针对代理端口配置 SSL 安全策略
- 策略内直接禁用 TLS1.0、TLS1.1 协议
- 拦截 RSA 弱密钥、低强度加密套件
- 优点:全网统一管控所有服务器漏洞;缺点:SSL 解析占用设备性能。
- 最优部署方案:优先使用 Nginx 本地配置封堵漏洞,防火墙仅做端口放行即可。
十、通用报错汇总与解决
- 报错:listen ... ssl requires ngx_stream_ssl_module原因:缺少四层 SSL 模块;解决:重新编译 Nginx 追加对应模块。
- 配置重载失败:证书路径错误;解决:核对证书、私钥真实存放路径,保证文件可读。
- 客户端协议报错;解决:统一选用 SSL/TLS 加密模式。
- 代理连接后端失败;解决:开启 proxy_ssl,同步前后端 TLS 协议版本。
十一、后续同类 TLS 漏洞标准处理流程
-
漏洞扫描确定漏洞类型:弱协议 / 弱套件 / 弱密钥
-
确认当前代理架构,透明代理必须改为 Nginx SSL 终结模式
-
检查 Nginx 核心依赖模块,缺失优先编译补齐
-
写入对应安全封堵配置,禁用所有不安全策略
-
执行配置校验与重载
nginx -t
nginx -s reload -
使用 openssl 命令逐项验证漏洞是否封堵完成
-
全量复测业务功能,保证无业务中断
-
重新执行漏洞扫描,确认安全告警全部消除
十二、长期安全运维维护要点
- 定期升级 Nginx、OpenSSL 版本,修复底层 SSL 安全漏洞
- 定期轮换 SSL 证书与密钥,优先使用 4096 位高强度密钥
- 生产正式对外业务,禁止长期使用自签 SSL 证书
- 对外代理端口配置 IP 访问白名单,缩小访问范围
- 定期巡检服务器开放的 TLS 版本与加密套件列表
- 所有四层 SSL 代理业务统一套用标准安全配置,批量规避同类漏洞