使用 AWS Network Firewall 服务审查 IDC 和云上 VPC 间的流量

本文使用 AWS Network Firewall 服务审查 IDC 和云上 VPC 间的流量,通过手工配置更高优先级的静态路由,绕过现有 BGP 自动传播的路由条目,从而实现特定子网的流量白名单经过 NFW 完成扫描。本文使用 Site-to-site VPN 模拟 DX 专线,模拟出 BGP 协议自动传播路由表的效果。

本实验搭建了一个云上 VPC 和 IDC 环境的网络环境,实现 IDC 和云之间的网络流量被 NFW 审查的场景。

全文大量使用的技术术语缩写/简称如下:

全称 简称
Network Firewall NFW
Internet Gateway IGW
NAT Gateway NAT
Transit Gateway TGW
Direct Connect DX
CloudFormation CFN
Virtual Private Gateway VGW

一、验证 NFW 流量审查部署环境的挑战

1、DX 专线使用 VGW 和 TGW 的场景选择

IDC 和 云的连接通常是 DX 专线连接,在专线与 VPC 互联时候,有两种不同的技术组件连接,分别是单个 VPC 时候的 VGW 和多个 VPC 时候的 TGW 两种配置方式。由于 TGW 有额外流量费,因此很多用户会优先使用 VGW 连接到 VPC 以减少额外的流量费。使用 VGW 虽然没有互联流量成本,但是其路由表管理复杂度更高,因为 VPC 之间不能进行转发,所以需要多条点对点的互联。本文的场景假设云端只有一个业务 VPC 到 IDC 之间的流量需要审查,因此 VGW 方案完全足够。

使用 VGW 互联时候,通常会开启 BGP 的路由传播功能,让云上 VPC 可以自动学习到 IDC 路由器通告过来的子网路由,由此无须手工填写 IDC 网段的路由条目,即可实现云上和云下互通。

2、云和 IDC 之间的流量审查实现原理

在云和 IDC 联通后,BGP 宣告的路由是最短路径,从云上下一跳去往 VGW,即可到达 IDC。而启用 NFW 检测后,下一跳需要修改为 NFW 的 VPC Endpoint。此时,流量走向和 IDC 的 BGP 宣告的路由条目会产生差别。为解决路由表的差异,有两种办法。

第一个办法是关闭云上 VPC 的 BGP 路由传播学习功能,不让云上 VPC 自动学习到前往 IDC 的路由。然后手工填写去往 IDC 的所有路由条目。这样做的主要挑战是在 IDC 有许多子网的情况下,逐一手工填写路由表会非常麻烦,容易错配或者漏配,多个子网路由表还需要多次重复配置,效率低下。因此关闭云上 VPC 的 BGP 路由传播学习功能不是最佳选择。

第二个办法,是保持云上 VPC 的 BGP 路由传播学习功能,云上 VPC 始终接收到模拟 IDC 网络环境传播过来的路由条目。然后用手工填写优先级更高的路由条目,将流量送往 NFW 进行检查。当 VPC 路由表有多个条目的 CIDR 有交集的时候,将按照如下原则匹配优先级:

  • 手写静态路由优先级高于自动传播学习过来的路由条目
  • 更长的子网掩码(更精确的匹配)优先选择路由

以上两个原则确保了手工输入的路由表优先级更高,因此使得流量将优先经过 NFW 检测,从而实现无须关闭BGP传播就能控制将特定网段的流量发给 NFW 检测的效果。

3、使用 Site-to-site VPN + VGW 模拟 DX 专线 + VGW 的架构

由于 DX 专线服务的配置要求有线下路由器的 Connection 接入 DX 服务,并配置 VIF,由此导致做实验和技术验证的困难很高,需要真实环境才能模拟。本文使用 Site-to-site VPN + VGW 作为替代方案来模拟 DX 专线环境。因为 AWS 提供的托管的 Site-to-site VPN 服务落地到 VPC 时候,也是通过 VGW 接入 VPC,因此在 VGW 的路由传播功能测试时候,与真实 DX 环境的体验一致。由此,可将其作为本方案的模拟环境。

本文通过一个 CloudFormation 模板快速拉起这个环境,拉起后首先验证 BGP 网络宣告成功以及路由通畅,然后手工切换路由表将流量发送到 NFW,验证 NFW 的规则工作正常。

二、设计并启动整个模拟实验环境

1、网络架构设计

架构图如下:

在云上用一个独立的 VPC 模拟 IDC ,使用 site-to-site VPN 和 BGP 协议进行互联,并开启了路由传播。当 CFN 启动成功后,路由是自动传播的,流量默认走 VGW ,不经过 NFW。当配置 NFW 的路由后,流量将通过 NFW 子网,扫描完成后与 IDC 形成互通。

关于互联网出口的补充:IDC 网络和云端 VPC 网络都使用模拟 IDC 网络的 Router 作为唯一的互联网出口,这个 Router 即承担了去互联网流量的 SNAT,又承担了 Site-to-site VPN 的网关。当然,去往 Site-to-site VPN 的流量是不做 SNAT,网关只负责建立连接。

2、使用 CFN 模板启动实验环境

CloudFormation 模版例子:https://github.com/aobao32/nfw-vgw-demo/blob/main/cloudformation/vpc-dual-az-vgw-vpn-bgp-nfw-create.yaml

以上网络架构使用 CFN 模板实现,这里选择 CFN 而不是 AWS CDK,因为 CFN 更加简单,用户无需安装 AWS CDK 等开发包,这对进行网络测试而并非拥有完整 AWS 开发工具的网络用户更加友好。

首先进入 CloudFormation 服务界面,点击创建 Stack,选择上传模板。如下截图。

输入模板名称后,这里要选择的是在本区域的 EC2 密钥,如果在本区域还没有 EC2 登陆密钥,需要事先创建好。如下截图。

选择允许创建 IAM 权限。点击下一步继续。如下截图。

Review 所有选项,点击下一步完成。

等待大约15-20分钟,创建完成。如下截图。

注意:即便模板状态显示为绿色,也还需要再等待5-10分钟的,等待所有网络协议启动成功。

3、验证网络联通

CFN模板创建发起到完成,中间启动多种服务,大约需要20分钟。检查服务完全启动成功的标准是:

    1. AWS托管服务 site-to-site VPN 里边,BGP 隧道状态显示 UP,2条都显示 UP
    1. 云上VPC的 prv-rt-az1prv-rt-az2 两个路由表,里边学习到了 BGP 传播过来的路由
    1. 云上 VPC 的 EC2 和模拟 IDC 的 EC2 互 ping 成功

由此分别验证以上步骤。

首先进入 VPC 服务,查看 Site-to-site VPN 服务,点击 VPN ID。如下截图。

查看 VPN 隧道,确认里边显示的状态是 UP 。

现在切换到 VPC 服务,进入路由表界面,找到标签名为 prv-rt-az1 路由表,点击路由条目标签页,查看其中的路由传播 Propagated 字段,确认其中显示为 Yes。如下截图。

现在进入 EC2 服务,找到 VPC 云上 Workload 的 EC2 虚拟机,选中后,点击右上角 Connect 连接按钮。如下截图。

在弹出窗口中,选择第二个标签页 SSM Session Manager 标签页,然后点击右下角连接按钮。如下截图。

由此即可登陆到 EC2 。

登陆 EC2 成功后,从云上 VPC 的 EC2 上,使用 ping命令/curl命令 测试连接到 模拟 IDC 的 EC2,测试联通成功。测试通过后,进入下一步 NFW 路由表的配置。

三、手工配置路由将流量送给 NFW

1、手工配置路由表

手工切换流量,让流量经过 NFW:

    1. 从云上到 IDC方向:修改 prv-rt-az1prv-rt-az2,显式增加路由条目,将去往 IDC 的流量发送到 NFW 的 Endpoint
    1. 从IDC到云上方向:修改 vgw-ingress-rt 路由表,显式增加路由条目,将去往 云上VPC 的流量发送到 NFW 的 Endpoint

现在开始配置。首先找到 prv-rt-az1 路由表,添加去往 IDC 的路由,下一跳选择 AZ1 的 VPC Endpoint。如下截图。

对另一个 AZ 的路由表 prv-rt-az2 也做对应配置,下一跳选择 AZ2 的 VPC Endpoint。

最后编辑从 IDC 到 云上的路由表,即 vgw-ingress-rt 这张表,在里边分别填写 az1 和 az2 两个子网目标地址,下一跳分别选择两个 AZ 的 VPC Endpoint。如下截图。

完成以上配置后,流量会经过 NFW 检测。

2、NFW 规则设置

NFW 的设置可以在左侧的 NFW 菜单下,Policy 策略菜单中看到的 Stateful Policy 有状态组的规则,其中序号更小的是优先执行,序号更大的是最后执行,因此组合起来就是拦截HTTP请求、除此外放行所有规则。如下截图。

3、验证网络联通性和 NFW 流量检查

首先测试云到 IDC方向。在 EC2 界面,通过 SSM Session Manager 登陆到 EC2,从云上 EC2 访问代表 IDC 的 EC2 内网 IP,ping和curl访问都正常。如下截图。

接下来测试 IDC 到云方向。从代表 IDC 的 EC2,对云上 VPC 的 EC2 内网 IP 地址,发起 ping 命令可联通,但是 curl 访问会被拦截。这是 NFW 的预期行为,通过 CFN 模板启动的环境,NFW 预设规则会拦截从 IDC 到 云上VPC 方向 curl 访问。如下截图。

4、通过 CloudWatch 日志查看 NFW 对流量的检测和拦截

本 CFN 创建的 NFW,开启了日志功能,打开了 Flow 流量日志和 Alert 拦截日志。进入 CloudWatch 的 LogGroup日志组,查看名为:

  • nfw-log-flow:NFW 流量日志
  • nfw-log-alert:NFW 拦截流量的日志

即可确认流量被正常扫描。

上一章节我们测试了从 云上 VPC 方向到 IDC 方向,以及 IDC 方向到云上 VPC 方向,现在查看日志验证 NFW 行为符合预期。如下截图。

至此全部测试结束。

四、小结

通过以上实验,可以获得两个结论:

  • 1、针对 VGW 和 BGP 传播的测试,可以使用 AWS 托管的 Site-to-site VPN 建立 BGP 链接,由此可以开启 BGP 传播,并测试路由表配置
  • 2、VPC 路由表中,即使路由条目完全一样,手工输入的条目优先级比自动传播的优先级更高

五、参考官方文档

  • 带有Internet Gateway和NAT Gateway的架构:https://docs.aws.amazon.com/network-firewall/latest/developerguide/arch-igw-ngw.html

最后修改于 2026-06-02