亚马逊AWS官方博客
Network Firewall 部署小指南(二)路由设计
在《Network Firewall 部署小指南(一)部署模型》一文中,介绍了 Network Firewall(以下简称 NFW)常见的四种部署模型:出站流量检查分布式、出站流量检查集中式、入站流量检查分布式和入站流量检查集中式。如果您希望把出入互联网的流量(即南北向流量)通过 NFW 进行检查及过滤,您需要修改 VPC 中的子网对应的路由表,而具体应如何进行路由设计,取决于您根据业务需求所选择的具体部署模型。本文提供了一个高阶路由设计,展示了四种部署模型的示例路由表配置来实现您的需求。若您想了解更多示例,请参见《AWS Network Firewall 的部署模型》。
路由设计考虑因素
在您针对 NFW 进行 VPC 路由设计时,您应当考虑以下几点因素:
- 由于 NFW 为有状态防火墙,需要确保流量出入同一个 NFW 终端节点(即采用对称的路由路径)
- 路由表中的 Target 应指向同 AZ 的 NFW 端点(vpce-xxx),避免产生跨 AZ 传输费用
- 在 NFW 上线前,建议对相关流量进行梳理,确保 NFW 策略配置正确
- 在 NFW 割接上线时,现有连接会中断,需要预留割接窗口
- NFW 为“透明”防火墙,即不会改变数据包的源、目的 IP,仅通过修改 VPC 中的路由表即可将 NFW 嵌入到现网架构中
在根据业务需求、后期维护等因素,选定部署模型为“分布式”或“集中式”部署后,您便可以根据下面不同的场景来进行对应的路由设计。本篇博客会根据以下四种部署模型,为您介绍对应的 VPC 路由表配置方法,并逐跳解析路由表查询、流量转发过程:
- 分布式部署
- 出站分布式部署模型
- 入站分布式部署模型
- 集中式部署
- 出站集中式部署模型
- 入站集中式部署模型
出站分布式部署模型
上图的 VPC 中,在两个 AZ 中分别部署了实例(instance-1,instance-2)、NFW 端点(vpce-1,vpce-2)、NAT 网关(NATGW-1,NATGW-2),以及互联网网关(IGW)。我们将 endpoint 部署在 NAT GW“后面”,可以在出站规则配置时,根据实例的私有 IP 进行规则设定。
以 instance-1 为例,当 instance1 进行出站访问时某公网 IP 时,VPC 的路由查询及流量转发过程如下:
1. Instance1 查看所在子网的路由表(路由表“1”),由于是公网 IP,匹配 0.0.0.0 路由,将流量发给位于本 AZ 的下一跳- vpce-1(Egress Firewall endpoint-1)。
2. Egress Firewall endpoint-1 收到流量后,将流量送到由 AWS 托管的 NFW 引擎进行规则匹配,如果规则允许转发,NFW 将流量送还给 Egress Firewall endpoint-1(此过程无路由表查询过程)。
3. Egress Firewall endpoint-1 收到允许通过的流量后,进行路由表查询转发(路由表“2”),由于目标地址为公网 IP,匹配路由 0.0.0.0,下一跳 natgw-1,将流量送到 NATGW-1。
4. NATGW-1 收到流量后,进行 SNAT(源地址 NAT 转换)转换,将 instance-1 的私有 IP 替换成 NATGW-1 的私有 IP,进行路由表查询(路由表“3”),检测目标地址为公网 IP 并匹配路由条目 0.0.0.0 下一跳为 IGW,将流量转发 IGW。
5. IGW 出站对流量进行 SNAT 转换,将 NATGW 的私网 IP 替换为 NATGW 的公网 IP,将流量送出站访问互联网。
6. 互联网回包时,沿上述路径反向过程,逐跳依次转发:
- IGW 收到互联网回包时,进行 DNAT(目标地址 NAT 转换)转换,并将流量发送给 NATGW-1。
- 查询路由表“3”,NATGW-1 将流量送至 vpce-1。
- 查询路由表“2”,匹配本地路由 10.0.0.0/16,下一跳本地(local)返回送至 instance-1。
7. 至此,经过 NFW 检测,由 VPC 内部的实例 instance-1 主动对互联网发起的出站请求,及对应的回包路由转发过程结束。
入站分布式部署模型
在做入站流量检测时,默认情况下 IGW 会将收到的数据,直接发给访问目标 ALB 或 NLB(匹配 local 路由),因此需要在 IGW 上绑定入向路由表(Ingress Routing 路由表), 改变 IGW 的默认转发规则。上图以互联网主动发起访问 ALB,且 ALB 转发至目标为 instance-1 的过程为例,介绍 NFW 在进行入向流量检测时,所需的路由设计。具体的入站路由查询及转发顺序如下:
1. 当互联网主动发起对 ALB 的访问时,流量首先会被送到 IGW,IGW 收到数据包后,发现目标地址为 VPC 内部位于 AZ1 内的 ALB,因此对其做 DNAT,将 ALB 的公网地址替换为 ALB 的私网地址,并查看绑定的 Ingress Routing 路由表(路由表”1″),匹配 10.0.2.0/24 的下一跳为 vpce-1(Ingress Firewall-1)进行转发。
2. Ingress Firewall-1 收到流量,并将流量送到 NFW 进行安全检查和规则匹配,如果允许通过,Ingress Firewall-1 检测路由表“2”,匹配 10.0.0.0/16 下一跳为“local”(本地),将流量直接发送到位于 AZ1 内 ELB 子网的 ALB。
3. ALB 根据配置规则,查看所在 ELB subnet 的路由表”3″,匹配 10.0.0.0/16 下一跳为“local”(本地)的本地路由,将流量转发至位于 AZ1 中 App subnet 内的 instance-1。
4. Instance-1 回包时, 沿上述路径反向过程,逐跳依次转发:
- Instance-1 默认将流量送至 ALB,ALB 检查路由表“3”,由于目标 IP 为公网 IP,匹配路由 0.0.0.0,下一跳为 vpce-1 的路由,将流量转发给 Ingress Firewall-1。
- Ingress Firewall-1 检测流量后,检查路由表“2”,匹配路由 0.0.0.0,下一跳为 IGW,将流量送给 IGW。
- IGW 进行 SNAT 转换,将流量返还给互联网(Ingress routing 路由表仅影响 IGW 入向流量转发)。
5. 至此,经过 NFW 检测,由互联网主动发起的入站请求,及对应的回包转发过程结束。
出站集中式部署模型
出站集中式的部署将 APP-VPC-1 及 APP-VPC-2 的互联网出口集中到 Inspection VPC,并在流量出站前进行集中的检测,以实现例如访问域名黑白名单、IP 地址黑白名单等需求。上图以 Instance-1 访问互联网的过程为例,为您介绍路由设计及转发过程:
1. Instance-1 访问公网 IP,此时查询路由表“1”匹配 0.0.0.0 路由,下一跳为 TGW,即将所有的发往非“local”路由的流量都送往 TGW 进行转发(实际部署中,可配置路由表条目为更明细路由,实现仅将部分需要的流量送往 TGW)。
2. TGW ENI-1 收到数据包后,会自动将数据包转发给 TGW,此时 TGW 发现该数据包来自于 APP-VPC-1 挂载(Attachment),且该挂载关联(Associate)了路由表“3”,因此查询 TGW 路由表“3”,匹配 0.0.0.0 路由,下一跳为“Inspection vpc 的挂载”,将数据包转发到“Inspection VPC”。
3. 当位于 Inspection VPC 中的 TGW ENI-11 收到数据包后,查询路由表“4”,匹配 0.0.0.0 路由,下一跳访问 Egress Firewall-1。
4. Egress Firewal-1 即为 NFW 的终端节点,NFW 在收到数据后进行规则匹配及出站流量检测,若结果为“允许”,则检查路由表“5”,匹配 0.0.0.0 路由,下一跳为 NATGW-1。
5. NATGW-1 收到数据包后,进行 SNAT 转换,查询路由表“6”,匹配 0.0.0.0 路由,下一跳发送给 IGW,IGW 收到数据后将流量发往互联网。
6. 当互联网回包时:
- 数据送还给 IGW,IGW 将数据包发送给 NATGW-1。
- NATGW-1 收到数据后,进行 DNAT,并发现目标地址为 Instance-1 的私网 IP,因此匹配 10.0.0.0/8 路由,下一跳为 Egress Firewall-1,将数据发送到 NFW 进行流量回包检测。
- NFW 检测后,若允许通过,将数据发送到 TGW ENI-11,并自动传递给 TGW。
- TGW 收到数据包后,发现数据来自于 Inspection VPC 挂载,且该挂载关联了 TGW 路由表“7”,目标地址为 instance-1 的私有 IP,因此匹配 10.0.0.0/16 的路由,下一跳为 APP-VPC-1 挂载。
- APP-VPC-1 挂载中的 TGW ENI-1 收到数据包,此时查询路由表“2”,发现目的地为 Instance-1 的私网 IP,因此匹配“10.0.0.0/16”路由,下一跳为 local,将数据发送到 Instance-1。
7. 至此,由 Instance-1 主动对外发起,经过集中式 NFW 检测的出站流量及对应的返回入站流量的数据包转发过程结束。
注意:由于 NFW 为有状态防火墙,因此在多可用区、东西向流量检测的场景下,在 TGW 的 Inspection VPC 挂载上,应当开启“设备模式支持/Appliance mode”,以确保 TGW 可以将去向、回向的数据包送到同一个 NFW endpoint 中,确保对称路由。
入站集中式部署模型
在入站集中式部署模型中,NFW 被部署在 VPC 的“最外侧”,常见场景为检测从互联网进入 VPC,访问负载均衡器(ALB 或 NLB)的流量。在上图的架构中,以互联网发起的流量依次通过 IGW、Ingress Firewall-1、ALB、TGW、NLB-1、Instance-1 为例,为您介绍路由设计及转发过程:
1. 用户从互联网发起对 ALB 的访问(例如解析 ALB 域名 ALB-internet-xxx),得到 ALB 的公网 IP,并将流量发送到 VPC。
2. 流量会先到达 Inspection VPC 的 IGW,IGW 检查数据包的目的公网 IP,并进行 DNAT 将公网 IP 转换为 ALB 的私网 IP(属于 ELB subnet in AZ1)。由于此时 IGW 上绑定了 Ingress routing 路由表,流量会匹配路由“ELB subnet in AZ1”,下一跳为“vpce-1”(即 Ingress Firewall-1)。
3. Ingress Firewall-1 进行流量检测,并允许通过后,查看所在子网的路由表“2”,匹配路由“100.0.0.0/16”,下一跳为 local,转发至 ALB。
4. ALB 收到流量后,会将源地址替换成自己的私有 IP(SNAT)、目的地址替换成目标 NLB 的 IP(DNAT),检查路由表“3”,由于目标地址(NLB-1)位于 VPC:10.0.0.0/16,因此匹配路由 10.0.0.0/8,下一跳 TGW。
5. TGW 收到流量后,发现数据来自于 Inspection VPC 挂载,且此 VPC 类型的挂载关联于 TGW 路由表“5”,因此匹配路由 10.0.0.0/16,下一跳为“App-vpc-1 attach”。
6. 位于 APP-VPC-1 的 TGW ENI-1 收到流量后,检查路由表“6”,匹配路由 10.0.0.0/16,下一跳为“local”,将流量转发至 NLB-1。
7. NLB-1 查询路由表“7”,将流量转发至目标 Instance-1。
8. Instance-1 在回包时:
- Instance-1 默认将流量发送至 NLB-1。
- NLB-1 收到数据包后,查询路由表,由于目标地址为 ALB 的私网 IP,位于 Inspection VPC,因此匹配路由 100.0.0.0/16,下一跳为 TGW,将数据发送给 TGW。
- TGW 发现流量来自于 APP-VPC-1 的挂载,且此挂载关联 TGW 路由表“9”,因此匹配路由 0.0.0.0,下一跳为“Inspection vpc attach”,将流量发送到 TGW ENI-11。
- TGW ENI-11 查询路由表“4”,将数据包发送给 ALB。
- ALB 收到数据后,进行 DNAT 将目的地址替换为公网 IP,查询路由表“3”,匹配路由 0.0.0.0,下一跳为 vpce-1,即 Ingress Firewall-1。
- Ingress Firewall 收到数据包进行检测后,查询路由表“2”,匹配路由 0.0.0.0,下一跳为 IGW,将流量发送到 IGW,IGW 发送回至位于互联网的最终用户。
9. 至此,由互联网用户发起,经过集中入站 NFW 检测,数据发送至 VPC 内部及返回的过程结束。
总结
这篇博客详细介绍了在 NFW “分布式”或“集中式”部署模型下,出站和入站路由设计以及数据包转发行为的不同处理方式。建议您根据具体的业务需求和复杂性,选择最适合的部署模式。同时,在考虑网络防护需求和 NFW 实现的复杂度时,请参考本文提出的路由设计建议,进行恰当的部署。