- 背景与目标 (Background & Objectives)
在金融、支付及高合规要求(如 PCI-DSS, ISO27001)的生产环境中,服务器集群(如 Kubernetes EKS、DR 灾备节点)通常位于私有子网(Private Subnet),禁止直接访问公网。然而,业务运行仍需依赖有限的外部连接(如调用第三方支付 API、拉取 Docker 镜像、更新病毒库等)。
为了平衡**"业务连通性"与 "数据安全性",我们需要构建统一的出口网关(Egress Gateway)**。
核心目标:
-
收敛管控 (Control):实施"默认拒绝(Default Deny)"策略,仅允许白名单域名通过。
-
审计溯源 (Audit):完整记录内网哪个 IP、在什么时间、访问了哪个外网域名。
-
隐私保护 (Privacy):隐藏内网拓扑结构,防止架构信息泄露给外部服务器。
2. 核心选型:Nginx 正向代理 (The Solution)
经过多维度评估,我们选择 Nginx + ngx_http_proxy_connect_module 作为标准出口网关方案。
2.1 为什么选择 Nginx?
-
主流地位:在 80% 的互联网及金融企业中作为标准网关使用。
-
性能强悍:基于 Epoll 事件驱动模型,处理高并发 HTTPS 隧道(CONNECT 方法)资源消耗极低。
-
配置灵活 :支持 CIDR 网段匹配 (
geo) 和泛域名匹配 (map),易于实现"配置即代码(IaC)"。 -
成本极低:运行于普通 EC2 实例,无需昂贵的硬件或软件授权费用。
3. [实战落地] Nginx 生产级配置指南 (Implementation)
为了确保网关在生产环境下的连通性、隐蔽性和可审计性,我们基于 "4大基石 + 3大进阶" 的体系进行构建。
3.1 四大基础基石 (The Foundation)
这四项配置是网关能够正常运行且具备基础安全能力的底线。
-
HTTPS 隧道支持 (The Enabler)
-
原理 :原生 Nginx 不支持 HTTPS
CONNECT方法,必须通过编译第三方模块ngx_http_proxy_connect_module开启。 -
配置 :
proxy_connect;且proxy_connect_allow 443 80;(严格限制端口,防止扫描滥用)。
-
-
DNS 动态解析 (The Navigator)
-
痛点:正向代理面对的是未知的互联网域名,Nginx 必须具备 DNS 解析能力。
-
配置 :
resolver 169.254.169.253 ipv6=off;(指向 VPC 内部 DNS,关闭 IPv6 避免延迟)。
-
-
连接稳定性调优 (The Tuner)
-
痛点:防止拉取大文件(如 Docker 镜像)时因默认超时(60s)而中断。
-
配置:
-
proxy_connect_connect_timeout 10s;(握手阶段快速失败)。 -
proxy_connect_data_timeout 60s;(传输阶段长超时,可视情况增加)。
-
-
-
模块化 ACL 与审计 (The Guard)
-
痛点:无日志=无审计。
-
配置 :利用
map分离配置文件;自定义log_format记录$connect_host(目标) 和$remote_addr(来源)。
-
3.2 三大进阶增强 (The Advanced)
针对金融场景的强化配置。
-
隐私清洗 (The Cleaner)
-
目的:防止内网拓扑泄露。
-
原理 :代理通常会透传
X-Forwarded-For,这会暴露内网 IP。我们需要主动置空这些头部。 -
注意 :Nginx 依靠 TCP 连接状态表维护路由,清洗头部完全不影响数据包正确返回给内网机器。
-
-
带宽保护 (The Traffic Shaper)
-
目的:防止失控的服务器耗尽 NAT 网关带宽,影响核心业务。
-
配置 :
limit_rate 10m;(限制单连接下载速度)。
-
-
高可用架构 (The Immortal)
- 架构 :避免单点故障(SPOF)。建议在 Nginx 前端挂载 AWS Network Load Balancer (NLB),后端部署多台 Nginx 组成 Auto Scaling Group。
4. 详细配置清单 (Configuration Code)
以下是经过验证的生产环境配置模板。
4.1 目录结构
/usr/local/nginx/conf/
├── nginx.conf # 主配置文件
├── map/
│ └── mapping.conf # 定义文件:IP库和域名白名单
└── vhost/
└── acl_logic.conf # 逻辑文件:拦截判断脚本
4.2 主文件 (nginx.conf)
http {
# [基石4] 定义审计日志 (JSON格式)
log_format proxy_log '{"time":"$time_iso8601", "client":"$remote_addr", '
'"target":"$connect_host", "status":$status, '
'"bytes":$body_bytes_sent}';
# 加载定义文件
include map/mapping.conf;
server {
listen 80;
listen 443;
# [基石2] AWS VPC DNS
resolver 169.254.169.253 ipv6=off;
# [基石1] 开启隧道
proxy_connect;
proxy_connect_allow 443 80;
# [基石3] 超时调优
proxy_connect_connect_timeout 10s;
proxy_connect_data_timeout 60s;
# [进阶1] 隐私清洗 (核心安全配置)
proxy_set_header X-Forwarded-For "";
proxy_set_header Via "";
# [进阶2] 限速 (可选)
# limit_rate 10m;
# 加载 ACL 逻辑
include vhost/acl_logic.conf;
# 日志记录
access_log logs/proxy_access.log proxy_log;
location / {
proxy_pass http://$host;
proxy_set_header Host $host;
}
}
}
4.3 定义文件 (map/mapping.conf)
# 1. 定义受限网段 (使用 geo 模块)
geo $remote_addr $is_restricted_node {
default 0;
10.21.10.0/25 1; # NonProd EKS
10.21.0.0/16 1; # DR 环境
}
# 2. 定义白名单域名 (使用 map 模块)
map $connect_host $is_whitelisted_domain {
hostnames;
default 0;
"ts01-gyr-maverick.cloudsink.net" 1; # 精确匹配
".internal.sgb.com" 1; # 泛域名匹配 (*.internal.sgb.com)
".sgb.com" 1;
}
4.4 逻辑文件 (vhost/acl_logic.conf)
set $acl_action "";
# 1. 标记来源
if ($is_restricted_node) {
set $acl_action "RESTRICTED";
}
# 2. 标记非白名单
if ($is_whitelisted_domain = 0) {
set $acl_action "${acl_action}_UNAUTHORIZED";
}
# 3. 联合判断:既是受限来源,又访问了非法域名 -> 拦截
if ($acl_action = "RESTRICTED_UNAUTHORIZED") {
return 403;
}
5. 竞品对比与劣势分析 (Comparative Analysis)
为了论证 Nginx 的合理性,我们对市场上其他主流方案进行了深度对比:
| 选型方案 | 核心定位 | 为什么在本场景中 不推荐? |
|---|---|---|
| Squid | 老牌缓存代理 | 1. 机制过时:核心优势是 HTTP 缓存,但在 HTTPS 时代无法缓存加密内容,优势尽失。 2. 性能瓶颈:传统 I/O 模型,高并发下资源消耗远高于 Nginx。 3. 维护复杂:配置文件晦涩,不支持模块化 ACL。 |
| AWS NAT Gateway | 基础网络设施 | 1. 无法管控 :它是 L4 层设备,只认 IP,完全不支持域名白名单。 2. 无法审计:无法记录访问的域名日志。 |
| AWS Network Firewall | 云原生防火墙 | 1. 成本极高:端点费 + 流量费,月成本通常是 Nginx EC2 的 10 倍以上。 2. 架构复杂:需引入专用子网和复杂的路由表切分(Firewall Sandwich 架构)。 3. 功能溢出:若只需域名管控,其 IPS/DPI 深度检测功能属于资源浪费。 |
| Palo Alto (NGFW) | 专业安全硬件 | 1. 部署重:通常需配合 Gateway Load Balancer (GWLB) 部署。 2. 成本置换:处理大规模吞吐(如镜像拉取)需要极其昂贵的 License。 3. 适用场景:仅在强制要求 IPS 入侵检测或应用层行为控制(App-ID)时考虑。 |
6. 总结 (Conclusion)
针对当前的 EKS 集群和 DR 环境,Nginx 正向代理方案是架构上的最优解。
-
满足了所有核心需求:通过 Map/Geo 实现了精细化的白名单控制,通过 Log 实现了合规审计。
-
避免了不必要的成本:相比 AWS Network Firewall 或 Palo Alto,节省了巨额的授权费和流量费。
-
保持了架构的简洁性:不需要改动 VPC 复杂的路由表,运维团队对 Nginx 语法也最为熟悉,技术风险最低。
此方案具备极高的扩展性,未来如有更高并发需求,只需在前端增加 NLB 进行横向扩展即可。