环境搭建

我们将使用cloudformation搭建一套NFW的环境。

cloudformation地址: https://github.com/aws-samples/sample-aws-network-security-workshop/blob/main/cfn-template/template.yaml

下载下来后在自己帐号进行部署:

image-20260227210235834


背景:作为一名新入职的高级网络安全工程师,我们接手了一个AWS环境,里面存在严重的安全漏洞:

  • DEV环境中的一个EC2实例遭到入侵
  • 过于宽松的网络策略使攻击者能够从DEV横向移动到PROD
  • 由于缺乏出口控制,攻击者窃取了敏感的客户数据

针对审计结果,网络团队已配置路由架构,将所有出口流量和东西向流量通过AWS Network Firewall进行转发。然而,目前没有任何防火墙规则,因此所有流量都在不受限制地通过。此外,Route 53 Resolver DNS查询日志记录已启用,但Route 53 Resolver DNS Firewall尚未部署。我们将配置Network Firewall规则并实施DNS Firewall,以保护环境安全并防止未来发生类似事件。

当前基础设施架构

VPC

该环境包括用于生产工作负载的Production VPC(10.1.0.0/16)、用于开发的Development VPC(10.2.0.0/16)、作为集中出口点的Egress VPC(172.16.0.0/24

安全服务

  • AWS Transit Gateway连接所有VPC,并通过使用Transit Gateway attachment功能 部署的AWS Network Firewall路由流量。这一功能允许Network Firewall作为Transit Gateway attachment直接部署在AWS托管服务VPC中。

  • 这样消除了手动创建和管理自有检查VPC的需求来简化部署,AWS会为我们处理检查VPC基础设施。

  • Network Firewall提供对所有东西向和出口流量的有状态检查,并具备IPS/IDS功能。

流量路径

  • 来自spoke VPC的出口流量通过Transit Gateway路由到Network Firewall进行检查,然后通过NAT Gateway进入互联网。

  • VPC之间的东西向流量同样通过Transit Gateway和Network Firewall进行检查,然后才能到达目的地。

流量路径示例:

1. EC2 实例发起请求
   Production VPC: 10.1.1.0/24
         │
         ▼
2. Workload Subnet RT
   0.0.0.0/0 → tgw-id (Transit Gateway)
         │
         ▼
3. Transit Gateway
   Spoke RT: 0.0.0.0/0 → Inspection Network Function
         │
         ▼
4. Egress VPC - NFW Endpoint
   AWS Network Firewall 检查流量
         │
         ▼
5. Inspection RT
   0.0.0.0/0 → Egress VPC Attach
         │
         ▼
6. NAT Gateway (172.16.0.16/28)
   私有 IP → 公有 IP
         │
         ▼
7. Internet Gateway
   出站到 Internet

什么是spoke VPC

Spoke = 自行车轮辐,来自 Hub-and-Spoke(轮毂-辐条)网络拓扑模型:

           Spoke 1
              │
              │
Spoke 4 ──── Hub ──── Spoke 2
              │
              │
           Spoke 3

网络架构中的 Hub-and-Spoke:

角色 含义 AWS 对应
Hub 中心枢纽 Transit Gateway / 共享服务 VPC
Spoke 分支/辐条 各业务 VPC(连接到中心)

示例:

                    ┌─────────────────┐
                    │   Spoke VPC 1   │
                    │  (Production)   │
                    └────────┬────────┘
                             │
┌─────────────────┐          │          ┌─────────────────┐
│   Spoke VPC 3   │          │          │   Spoke VPC 2   │
│   (Testing)     │──────────┼──────────│  (Development)  │
└─────────────────┘          │          └─────────────────┘
                             │
                    ┌────────┴────────┐
                    │    Hub (TGW)    │
                    │  Transit Gateway│
                    └────────┬────────┘
                             │
                    ┌────────┴────────┐
                    │  Egress VPC     │
                    │  (共享出口)      │
                    └─────────────────┘

为什么叫 Spoke:

比喻 网络
轮毂(Hub) 中心路由/服务
辐条(Spoke) 各个分支网络
辐条连接轮毂 Spoke VPC 连接 Transit Gateway
辐条之间不直连 Spoke VPC 之间通过 Hub 通信

在本节的架构图中:

VPC 角色
Production VPC (10.1.0.0/16) Spoke
Development VPC (10.2.0.0/16) Spoke
Transit Gateway Hub
Egress VPC (172.16.0.0/24) 共享服务 VPC

常见 Hub-and-Spoke 变体:

  1. 简单 Hub-Spoke

    Spoke VPCs ──► Transit Gateway ──► Shared Services
    
  2. 带检查的 Hub-Spoke

Spoke VPCs ──► TGW ──► NFW ──► NAT ──► Internet
  1. 多 Hub
Region A: Spoke ──► TGW-A ──┐
                            ├──► TGW Peering
Region B: Spoke ──► TGW-B ──┘

测试脚本

cloudformation部署好了自动化测试脚本,用于验证我们的网络配置和安全控制。当我们访问测试脚本URL时,它会触发CloudFront后面的Lambda函数,该函数使用AWS Systems Manager在EC2实例上执行命令。这些命令测试合法流量模式和潜在恶意流量的各种网络连接,然后在浏览器中显示哪些连接成功或失败的结果。

这种方法简化了测试,无需从多个EC2实例手动发出命令。由于SSM命令执行和结果收集,脚本通常需要10-15秒来执行。


访问 CloudFormation控制台 ,选择名为 template 的stack,点击 Outputs 标签,在这里,我们可以访问所有测试脚本URL

image-20260227215540224

对应六个实验内容如下:

Lab 1 - Securing Egress Traffic: 使用 Amazon Route 53 Resolver DNS Firewall 和 AWS Network Firewall 保护出口流量。

Lab 2 - Securing VPC to VPC Traffic: 使用 AWS Network Firewall 保护东西向流量。

Lab 3 - Network Observability: 分析由 AWS Network Firewall 和 Amazon Route 53 Resolver DNS Firewall 生成的日志。

Lab 4 - Command and Control Detection: 检测并阻止命令与控制流量模式。

Lab 5 - Domain Allow Lists: 使用域名允许列表实施限制性出站连接。

Lab 6 - TLS Inspection: 使用 AWS Network Firewall 启用加密流量检测。

Egress测试脚本(实验1)

Egress测试器验证DEV和PROD环境的出站互联网连接,测试到允许目标的合法连接以及到恶意或未授权目标的被阻止连接。

https://<CloudFront-Distribution-Domain>/egress

image-20260227215653267

DEV到PROD测试脚本(实验2)

DEV到PROD测试器验证开发环境和生产环境之间的连接,测试DEV和PROD服务之间允许的连接以及应被安全控制阻止的连接。

https://<CloudFront-Distribution-Domain>/dev-to-prod

image-20260227215742051

Domain Allow List测试脚本(实验5)

Domain Allow List测试器通过测试到明确允许域的连接同时阻止所有其他连接来验证基于域的过滤,确保我们的允许列表配置正常工作。

https://<CloudFront-Distribution-Domain>/allowlist

image-20260227215835704

TLS检测测试脚本(实验6)

TLS检测测试器通过测试加密流量模式并验证Network Firewall能够检测和执行HTTPS流量规则来验证TLS解密和检测能力。

https://<CloudFront-Distribution-Domain>/tls-inspection

image-20260227215904253