亚马逊AWS官方博客
利用 Transit Gateway 和 Gateway Load Balancer 实现东西及南北流量的集中检测
对于所有客户而言,安全始终是一个非常重要的话题,特别是网络安全。不论是从企业安全管控落地的视角(例如:基于亚马逊云科技云上安全着陆区),还是合规遵从的视角(例如:网络安全等级保护基本要求中安全通信网络、安全区域边界 的要求;汽车行业安全标准 UN R155,R156 中对系统平台后端网络安全的要求等),设计集中的网络安全流量检测中心,构建网络安全边界防护,过滤内部和外部网络访问流量都至关重要。
本文聚焦于设计和建设一个架构清晰的集中的网络安全流量检测中心,实现了在单个亚马逊云科技账号中多个 VPC 的情况下,或者多个亚马逊云科技账号中多个 VPC 的复杂场景下的网络流量深度检测。
本文将介绍如何使用亚马逊云科技的网络服务,包括 Gateway Load Balancer 和 Transit Gateway,以及 FortiGate(或类似网络安全产品)来构建一个安全 VPC,实现集中式的流量检测功能,包括南北流量检测、东西流量检测。同时为了满足某些应用场景,进一步将 Application Load Balancer 集成到安全 VPC 中,可以实现具体的业务服务公网暴露和不同的负载均衡需求。
主要内容包括:
- 总体架构设计介绍
- 南北流量检测的实现,包括互联网访问服务端,和服务端访问互联网两种场景
- 东西流量检测的实现,即 VPC 到 VPC 流量的检测
- 详细的参考配置过程
一、架构设计介绍
网关负载均衡器(Gateway Load Balancers,以下简称 GWLB) 让您能够部署、扩展和管理虚拟设备,例如防火墙、入侵检测和防御系统以及深度数据包检测系统(本文以 FortiGate 防火墙示例)。GWLB 工作在 OSI 模型的第四层网络层。
GWLB 与网关负载均衡器终端节点(GWLB endpoint,架构图中标注为 GWLBe)配合,将进出应用的流量指向防火墙。具体实现可参考手册中 GWLB 入门介绍章节(https://docs.thinkwithwp.com/zh_cn/elasticloadbalancing/latest/gateway/getting-started.html)。
Transit Gateway 是一个中央交换中心,支持动态和静态路由,实现跨 VPC 以及与本地网络的连接。
应用负载均衡器(Application Load Balancer,以下简称 ALB)工作在 OSI 模型的第 7 层应用层。ALB 侦听器支持路径、HTTP Header、源 IP 等多种条件设置不同的转发规则。
架构图:利用 Transit Gateway 和 Gateway Load Balancer 结合 Fortigate 实现东西及南北流量的集中检测
网络架构说明如下:
- 应用 VPC 通过 VPC attachment 与 Transit Gateway 连接,VPC 默认路由下一跳指向 Transit Gateway。为了简化,在每个应用 VPC 中选择一个 AZ 创建两个子网,一个用于应用部署,另一个用于 Transit Gateway Attachment。如果是生产环境,我们推荐为 Transit Gateway Attachment 选择至少两个不同的 AZ 来创建子网。
- Transit Gateway 配置两个路由表:
- Egress Route Table 与 2 个应用 VPC Attachment 关联,路由表包括一条默认路由到安全(Security)VPC attachment。
- Transit Route Table 与安全 VPC Attachment 关联,2 条路由目的地为 2 个应用 VPC,下一跳是对应的应用 VPC attachment。
- 集中的安全 VPC 在每个 AZ 中设置四个不同的子网,分别设置为 TGW 子网、NGFW 子网(包括 GWLB,GWLBe,防火墙实例)、ALB 子网、NAT 子网。其中 TGW 子网和 NGFW 子网为私有子网,ALB 子网和 NAT 子网为公有子网。针对不同的服务分别设置子网,除了公有子网和私有子网的考虑外,还能够对每个子网单独设置路由表,来实现流量的精细调度。如果路由表完全一致,可以合并在同一个子网中。
- 为了确保未来可以在统一的安全 VPC 中部署其他的安全产品(例如:堡垒机、入侵检测、入侵防御),请注意安全 VPC 的 CIDR 的分配。
架构中 VPC 及其子网的参考用途规划如下(具体 VPC、子网和路由的 CDIR 配置可参考架构图中标注,根据实际需求进行调整)。
VPC 名称 | VPC 用途 | 子网名称 | 子网用途 |
Security VPC | 集中处理南北向和东西向流量 | NAT Gateway | 部署 NAT Gateway 用于出站互联网访问 |
NG Firewall | 配置 GWLB endpoint,部署防火墙等安全虚拟设备,实现南北向和东西向流量防护 | ||
ALB | 部署面向互联网的 ALB | ||
TGW | 配置 Transit Gateway 实现网络互联的 VPC attachment | ||
APP-1&APP-2 VPC |
部署业务应用 | APP | 部署业务应用 |
TGW | 配置 Transit Gateway 实现网络互联的 VPC attachment |
注意:在此架构中,防火墙和应用端(如 Web 服务器)识别的源 IP 是 ALB 地址。如果需要 Web 服务器识别客户端真实 IP,可参考此链接进行设置(https://repost.aws/zh-Hans/knowledge-center/elb-capture-client-ip-addresses)。
二、报文流说明
接下来,我们根据不同场景(南北流量检测,东西流量检测)深入分析业务报文流,来帮助我们理解报文的处理全过程。根据 Internet 发起还是应用发起,两种不同的场景报文流有所差异。
1. Internet 发起访问应用 VPC 场景
Internet 发起访问应用 VPC 报文流向
① Client 通过 Internet 发起访问,希望与部署在 VPC-1/2 中的应用通信。客户端访问流量指向 ALB(或指向应用域名,由 Route53 CNAME/Alias 记录指向 ALB 的 endpoint)。
② ALB 根据侦听器规则和默认算法,选择目标组中的某台 EC2 实例来转发报文。此处我们假定会通过 ALB ENI-1 转发到 VPC-1 中 IP 为 10.1.1.11 的实例。根据 ALB- AZ1 子网路由表,目的地址 10.1.0.0/16 的下一跳为 GWLBe-1(注意此时报文源 IP 已被替换为 ALB ENI-1 IP 地址)。
③ GWLBe-1 收到报文后,使用 AWS PrivateLink 将流量路由到 GWLB。流量通过亚马逊云科技网络安全的路由,无需任何额外配置。
④ GWLB 使用 IP 报文五元组或三元组为该报文流选择后端防火墙实例,确保相同的报文流会落到同一个防火墙实例(对于有状态防火墙来说非常重要),即会话粘连。GWLB 采用 GENEVE 标头封装原始 IP 流量,并通过 UDP 端口 6081 转发到设备。通过 Overlay 封装,将所有 IP 流量转发到防火墙进行检查,不需要为不同端口和协议来配置侦听器。
GWLB 后面的防火墙实例(安装在 EC2 中的防火墙软件)解封装 GENEVE 标头,并根据配置的安全策略决定是否允许该流量。
⑤ 防火墙检查后,重新封装流量并将其转发给 GWLB。
⑥ GWLB 根据 GENEVE TLV 选择哪个 GWLBe,删除 GENEVE 标头并将流量转发到 GWLBe-1。
⑦ GWLBe-1 根据 NGFW- AZ1 子网路由表,转发报文至 TGW。
⑧ 由于安全 VPC 与 Transit Route Table 路由表关联,因此 TGW 根据 Transit Route Table,将目的地址为 10.1.1.5 的报文通过 VPC-1 attachment 转发到 VPC-1。
⑨ 最后,流量到达 VPC-1,数据包的目的地在 VPC CIDR 范围内,本地路由会将流量转到 IP 10.1.1.5 的应用程序实例。
应用到 Internet 响应报文流向
① 根据 VPC-1 路由表,应用程序通过默认路由(0.0.0.0/0)将报文转发到 TGW。
② 由于 VPC-1 与 Egress Route Table 出口路由表关联,TGW 使用出口路由表中的默认路由将报文发送到安全 VPC。
③ 在安全 VPC 中,TGW- AZ1 子网使用 TGW- AZ1 路由表中的默认路由将流量发送到同一可用区(AZ)中的 GWLBe-1。
④ GWLBe-1 收到报文后,使用 AWS PrivateLink 将流量路由到 GWLB。流量通过亚马逊云科技网络安全的路由,无需任何额外配置。
⑤ GWLB 使用 IP 报文五元组或三元组为该报文流选择后端防火墙实例,确保相同的报文流会落到同一个防火墙实例(对于有状态防火墙来说非常重要),即会话粘连。GWLB 采用 GENEVE 标头封装原始 IP 流量,并通过 UDP 端口 6081 转发到设备。通过 Overlay 封装,将所有 IP 流量转发到防火墙进行检查,不需要为不同端口和协议来配置侦听器。
GWLB 后面的防火墙实例(安装在 EC2 中的防火墙软件)解封装 GENEVE 标头,并根据配置的安全策略决定是否允许该流量。
⑥ 防火墙检查后,重新封装流量并将其转发给 GWLB。
⑦ GWLB 根据 GENEVE TLV 选择哪个 GWLBe,删除 GENEVE 标头并将流量转发到 GWLBe-1。
⑧ GWLBe-1 根据 NGFW-AZ1 子网路由表指向 ALB(前面已说明,由于报文源 IP 已被替换为 ALB ENI-1 IP 地址,因此回包目的地指向 ALB)。
⑨ 最后,ALB 根据公有子网默认路由,将报文指向 IGW,通过 Internet 传送回 Client 侧。
2. 应用发起访问 Internet 场景
应用发起访问 Internet 报文流向
① 根据 VPC-1 路由表,应用程序通过默认路由(0.0.0.0/0)将报文转发到 TGW。
② 由于 VPC-1 attachment 与 Egress Route Table 出口路由表关联,TGW 使用出口路由表中的默认路由将报文发送到安全 VPC。
③ 在安全 VPC 中,TGW- AZ1 子网使用 TGW- AZ1 路由表中的默认路由将流量发送到同一可用区(AZ)中的 GWLBe-1。
④ GWLBe-1 收到报文后,使用 AWS PrivateLink 将流量路由到 GWLB。流量通过亚马逊云科技网络安全的路由,无需任何额外配置。
⑤ GWLB 使用 IP 报文五元组或三元组为该报文流选择后端防火墙实例,确保相同的报文流会落到同一个防火墙实例(对于有状态防火墙来说非常重要),即会话粘连。GWLB 采用 GENEVE 标头封装原始 IP 流量,并通过 UDP 端口 6081 转发到设备。通过 Overlay 封装,将所有 IP 流量转发到防火墙进行检查,不需要为不同端口和协议来配置侦听器。
GWLB 后面的防火墙实例(安装在 EC2 中的防火墙软件)解封装 GENEVE 标头,并根据配置的安全策略决定是否允许该流量。
⑥ 防火墙检查后,重新封装流量并将其转发给 GWLB。
⑦ GWLB 根据 GENEVE TLV 选择哪个 GWLBe,删除 GENEVE 标头并将流量转发到 GWLBe-1。
⑧ GWLBe-1 根据 NGFW-AZ1 子网路由表默认路由(0.0.0.0/0,因为 Internet IP 不属于 172.16.0.0/16 或 10.x.0.0/16),指向 NAT- AZ1 的 NAT gateway-1。
⑨ 最后,NAT 网关将源私有 IP 10.1.1.5 翻译转换为自己的 EIP,并根据 NAT- AZ1 子网默认路由,将报文指向 IGW 传送到 Internet(Internet 侧收到的源地址为 NAT 网关 EIP 地址)。
Internet 到应用响应报文流向
① Internet 侧的响应报文,到达 IGW 时,根据目的地址会指向 NAT gateway-1。
② NAT gateway-1 知道该报文的真实目的 IP 为 10.1.1.5,根据 NAT- AZ1 子网路由表,将流量发送到 GWLBe-1。
③ GWLBe-1 收到报文后,使用 AWS PrivateLink 将流量路由到 GWLB。流量通过亚马逊云科技网络安全的路由,无需任何额外配置。
④ GWLB 使用 IP 报文五元组或三元组为该报文流选择后端防火墙实例,确保相同的报文流会落到同一个防火墙实例(对于有状态防火墙来说非常重要),即会话粘连。GWLB 采用 GENEVE 标头封装原始 IP 流量,并通过 UDP 端口 6081 转发到设备。通过 Overlay 封装,将所有 IP 流量转发到防火墙进行检查,不需要为不同端口和协议来配置侦听器。
GWLB 后面的防火墙实例(安装在 EC2 中的防火墙软件)解封装 GENEVE 标头,并根据配置的安全策略决定是否允许该流量。
⑤ 防火墙检查后,重新封装流量并将其转发给 GWLB。
⑥ GWLB 根据 GENEVE TLV 选择哪个 GWLBe,删除 GENEVE 标头并将流量转发到 GWLBE-1。
⑦ GWLBe-1 根据 NGFW- AZ1 子网路由表,转发报文至 TGW。
⑧ 由于安全 VPC 与 Transit Route Table 路由表关联,因此 TGW 根据 Transit Route Table,将目的地址为 10.1.1.5 的报文通过 VPC-1 attachment 转发到 VPC-1。
⑨ 最后,流量到达 VPC-1,数据包的目的地在 VPC CIDR 范围内,本地路由会将流量转到 IP 10.1.1.5 的应用程序实例。
3. 跨 VPC 通信场景(东西向)
VPC-1 访问 VPC-2 报文流向
① 根据 VPC-1 路由表,应用程序通过默认路由(0.0.0.0/0)将报文转发到 TGW。
② 由于 VPC-1 与 Egress Route Table 出口路由表关联,TGW 使用出口路由表中的默认路由将报文发送到安全 VPC。
③ 在安全 VPC 中,TGW- AZ1 子网使用 TGW- AZ1 路由表中的默认路由将流量发送到同一可用区(AZ)中的 GWLBe-1。
④ GWLBe-1 收到报文后,使用 AWS PrivateLink 将流量路由到 GWLB。流量通过亚马逊云科技网络安全的路由,无需任何额外配置。
⑤ GWLB 使用 IP 报文五元组或三元组为该报文流选择后端防火墙实例,确保相同的报文流会落到同一个防火墙实例(对于有状态防火墙来说非常重要),即会话粘连。GWLB 采用 GENEVE 标头封装原始 IP 流量,并通过 UDP 端口 6081 转发到设备。通过 Overlay 封装,将所有 IP 流量转发到防火墙进行检查,不需要为不同端口和协议来配置侦听器。
GWLB 后面的防火墙实例(安装在 EC2 中的防火墙软件)解封装 GENEVE 标头,并根据配置的安全策略决定是否允许该流量。
⑥ 防火墙检查后,重新封装流量并将其转发给 GWLB。
⑦ GWLB 根据 GENEVE TLV 选择哪个 GWLBe,删除 GENEVE 标头并将流量转发到 GWLBE-1。
⑧ GWLBe-1 根据 NGFW- AZ1 子网路由表(目的地为 10.2.1.5),转发报文至 TGW。
⑨ 由于 Security VPC 与 Transit Route Table 路由表关联,因此 TGW 根据 Transit Route Table,将目的地址为 10.2.1.5 的报文通过 VPC-2 attachment 转发到 VPC-2。
⑩ 最后,流量到达 VPC-2,数据包的目的地在 VPC CIDR 范围内,本地路由会将流量转到 IP 10.2.1.5 的应用程序实例。
VPC-2 响应 VPC-1 报文流向
① 根据 VPC-2 路由表,应用程序通过默认路由(0.0.0.0/0)将报文转发到 TGW。
② 由于 VPC-2 与 Egress Route Table 出口路由表关联,TGW 使用出口路由表中的默认路由将报文发送到安全 VPC,目的地为 TGW ENI-1(注意:此处必须启用 Transit Gateway appliance mode,否则报文会因为 AZ 亲和性被转发到 TGW ENI-2)。
③ 在安全 VPC 中,TGW- AZ1 子网使用 TGW- AZ1 路由表中的默认路由将流量发送到同一可用区(AZ)中的 GWLBe-1。
④ GWLBe-1 收到报文后,使用 AWS PrivateLink 将流量路由到 GWLB。流量通过亚马逊网络安全的路由,无需任何额外配置。
⑤ GWLB 使用 IP 报文五元组或三元组为该报文流选择后端防火墙实例,确保相同的报文流会落到同一个防火墙实例(对于有状态防火墙来说非常重要),即会话粘连。GWLB 采用 GENEVE 标头封装原始 IP 流量,并通过 UDP 端口 6081 转发到设备。通过 Overlay 封装,将所有 IP 流量转发到防火墙进行检查,不需要为不同端口和协议单独配置侦听器。
GWLB 后面的防火墙实例(安装在 EC2 中的防火墙软件)解封装 GENEVE 标头,并根据配置的安全策略决定是否允许该流量。
⑥ 防火墙检查后,重新封装流量并将其转发给 GWLB。
⑦ GWLB 根据 GENEVE TLV 选择哪个 GWLBe,删除 GENEVE 标头并将流量转发到 GWLBe-1。
⑧ GWLBe-1 根据 NGFW- AZ1 子网路由表(目的地为 10.1.1.5),转发报文至 TGW。
⑨ 由于安全 VPC 与 Transit Route Table 路由表关联,因此 TGW 根据 Transit Route Table,将目的地址为 10.1.1.5 的报文通过 VPC-1 attachment 转发到 VPC-1。
⑩ 最后,流量到达 VPC-1,数据包的目的地在 VPC CIDR 范围内,本地路由会将流量转到 IP 10.1.1.5 的应用程序实例。
在安全防护/流量检测类应用中,需要特别注意对称路由问题,非对称路由可能会导致防火墙丢包。需要在 Transit Gateway attachments 配置中启用 appliance mode。具体内容可以参考链接(https://thinkwithwp.com/cn/blogs/networking-and-content-delivery/introducing-aws-gateway-load-balancer-supported-architecture-patterns/ ),不再赘述。
为了实现 AZ 级别的保护,在 GWLB 中启用 Cross-zone load balancing 能有效地规避某个 AZ 所有虚拟安全设备故障导致的工作异常情况。具体的说明可以参考链接(https://thinkwithwp.com/cn/blogs/networking-and-content-delivery/scaling-network-traffic-inspection-using-aws-gateway-load-balancer/)。
三、参考配置
前面我们介绍了集中的网络安全流量检测中心的架构设计和不同场景下报文流的详细介绍。接下来,我们根据此架构,以 FortiGate 作为 NGFW 为例,介绍具体的配置细节。
1. 基础网络配置(VPC、子网和路由表)
基础配置包括创建 VPC、子网和路由表。实际配置的参数与架构图中的示例一致,可以视需要进行调整。下面展示部分配置(注意需要先创建完 TGW、GWLB、NAT、IGW 等服务,才能正常在路由表中配置对应的下一跳目标)。
VPC 示例:2 个应用 VPC,1 个安全 VPC(实现集中式的流量检测功能)
安全 VPC 子网设计和对应的路由表
应用 VPC 子网设计和对应的路由表
子网列表和 IP CIDR
路由表列表(与架构图中路由配置一致)
ALB-AZ1 子网路由示例(vpce-xxxx 为 GLB endpoint)
2. 以 FortiGate 为例,说明 GWLB 负载均衡器和防火墙目标组配置
此架构下,将创建 2 组 GWLB 分别关联 2 对不同 Fortigate 防火墙,分别对南北向以及东西向的业务流量进行安全检测和扫描。主要目的是因为南北向业务主要是外网,东西向则是内网业务流量,从整体安全架构考虑设计独立的业务流量处理架构更符合客户云端安全架构设计。
在业务初期,防火墙采用 VDOM 技术,将 2 台防火墙虚拟成 6 组防火墙,分为 NS-Traffic VDOM 和 EW-Traffic VDOM 对应设备处理流量的角色;另外 2 组为 Root VDOM 作为设备管理流量。接口采用物理独占模式,port1 作为管理口分配Root VDOM,port2 作为南北向流量处理业务接口分配 NS-Traffic VDOM,port3 作为东西向流量处理业务接口分配 EW-Traffic VDOM。
业务 VPC endpoint 也采用业务流量分离的模式,分别创建 NS-Endpoint 和 EW-Endpoint 区分不同的业务流量,每个 Endpoint 都根据业务部署情况采用冗余跨 AZ 模式部署,实现全冗余以及安全业务流量分离的高可用,业务隔离,安全防护整体云端安全架构。
GWLB 负载均衡器配置
GWLB 在创建时 Mapping 到 Security 规划的 NGFW 子网,目标组采用 GENEVE 协议,并在两个 NGFW 子网分别创建 GWLB endpoints(GWLBe)。
GWLB 配置
GWLB 目标组配置,注意选择 GENEVE 协议
GWLB endpoints(GWLBe)配置
GWLB ENI 地址,用于下面于 FortiGate 建立 NS(North South-南北)方向GENEVE 隧道
GWLB ENI 地址,用于下面于 FortiGate 建立 EW(East West-东西)方向 GENEVE 隧道
FortiGate 防火墙全局关键配置
FortiGate 设备 license 需要设备支持 Vdom 划分,用于隔离南北向和东西向的业务流量的安全扫描,此外还有就是隔离南北向和东西向的业务路由引流。
全局开启接口 HTTP 报文相应,默认端口 TCP 8008,用于 GWLB 建议 Geneve 隧道的健康检查。
接口配置
管理路由配置(root vdom)
FortiGate NS VDOM 隧道配置以及安全策略
策略路由用于防火墙进行安全检测后将业务流量回给 GWLB
FortiGate EW VDOM 隧道配置以及安全策略
策略路由用于防火墙进行安全检测后将业务流量回给 GWLB
3. TGW 配置
TGW 创建三个 VPC attachments、Transit Route Table、Egress Route Table。
- Transit Route Table 与安全 VPC attachment 关联(安全 VPC 到 TGW 的流量根据 Transit Route Table 进行转发),根据目标 IP CIDR 分别指 VPC-app-1 和 VPC-app-2。
- Egress Route Table 与 VPC-app-1 attachment 和 VPC-app-2 attachment 关联(VPC-app-1 和 VPC-app-2 到 TGW 的流量根据 Egress Route Table 路由条目进行转发),默认路由指向安全 VPC。
TGW attachments 配置(启用 Appliance Mode)
Transit 路由表与 Security VPC attachment 关联
Transit-route-table 路由
Egress 路由表与 VPC-app-1 attachment 和 VPC-app-2 attachment 关联
Egress-route-table 路由
4. ALB 配置
创建面向 Internet ALB,Mapping 到安全 VPC 中规划的两个 ALB 公有子网(172.16.1.16/28 和 172.16.2.16/28)。目标组创建时选择 Other private IP address,将 VPC-app-1 和 VPC-app-2 的应用 EC2 以私有 IP 方式注册到目标组,示例中为 10.1.1.11 和 10.2.1.12。
每个 AZ 选择一个公有子网 Mapping
创建侦听器
目标组选择 Other private IP address,以 IP 方式注册 APP VPC 中的 EC2
5. 业务验证
这里分别验证一下南北方向和东西方向的业务流量。这里因为测试配置原因,部分截图中 IP 有变化,不影响效果验证。
南北方向业务流量访问
业务请求被放行,正常访问示例中的网站业务
防火墙记录从 Internet 请求访问的业务信息,命中前面设置 NS-Traffic-Policy
有害请求被拒绝
Server 主动出访某带病毒网站,流量直接被 reset 同时防火墙记录 deny 相关信息以及 server 的 IP 作为审计溯源
东西方向业务流量访问
东西方向正常互访流量放行
防火墙可以记录 Server 互访请求信息,并且命中我们前面设置 EW-Traffic-Policy
本文详细描述了集中的网络安全流量检测中心的架构设计和思考以及报文流说明,并在单个亚马逊云科技账号下多个 VPC 的情况中,以 FortiGate 为例子详细说明了具体的配置过程,充分展现了利用亚马逊云科技 Transit Gateway 和 Gateway Load Balancer 结合 FortiGate 实现东西及南北流量的集中检测的完整图景。