4. 创建第一个防火墙
在完成 VPC、子网、路由表与 Internet 网关等基础网络准备后,下一步就是把 AWS Network Firewall 真正“放进”网络路径中。Network Firewall 本身不是一个独立运行的虚拟设备,它由三部分组成:防火墙(Firewall)、防火墙策略(Firewall Policy)和规则组(Rule Group)。防火墙负责绑定到 VPC 和子网,策略决定使用哪些无状态/有状态规则组以及默认放行或丢弃行为,规则组则承载具体的匹配与动作。理解这三者的关系,是成功部署第一个防火墙的关键。
本节以“保护一个业务 VPC 的南北向流量”为目标,演示通过控制台和 CLI 两种方式创建防火墙、关联 VPC 与子网,并用一次受控的连通性测试确认流量确实经过防火墙。示例参数均为教学假设,实际使用时请替换为你的真实资源 ID。
一、部署前的对象与参数准备
Network Firewall 必须部署在专用防火墙子网中,该子网不能承载其他业务实例。推荐为每个可用区准备一个防火墙子网,例如 10.0.100.0/28 和 10.0.101.0/28。同时需要准备一个业务子网(如 10.0.1.0/24)用于放置测试实例,以及一个路由表用于把流量引导到防火墙端点。
关键参数如下(示例):
- VPC:
vpc-0a1b2c3d4e5f67890,CIDR10.0.0.0/16 - 防火墙子网:
subnet-0fw1(10.0.100.0/28,AZ-a)、subnet-0fw2(10.0.101.0/28,AZ-b) - 业务子网:
subnet-0app(10.0.1.0/24,AZ-a) - 防火墙名称:
nfw-prod-01 - 策略名称:
nfw-policy-basic
需要特别说明的是:Network Firewall 的端点(Firewall Endpoint)由 AWS 在防火墙子网中自动创建,用户不能手动指定 IP,但可以通过 DescribeFirewall 查询到每个子网对应的端点 ID 和 IP,这些信息在后续配置路由时至关重要。
二、通过控制台创建防火墙
进入 VPC 控制台的 Network Firewall 页面,点击“创建防火墙”。第一步填写名称 nfw-prod-01,选择目标 VPC。第二步选择防火墙子网,勾选 subnet-0fw1 与 subnet-0fw2,AWS 会为每个子网分配一个端点。第三步创建或选择防火墙策略:这里新建 nfw-policy-basic,无状态默认动作设为“按顺序执行”,有状态默认动作设为“按顺序执行”,并暂时不添加规则组,以便先验证基础连通性。第四步确认配置并创建。
创建过程通常需要几分钟。状态从 PROVISIONING 变为 READY 后,说明防火墙端点已就绪。此时在防火墙详情页可以看到每个子网对应的端点 ID,例如 vpce-0aaa1111 和 vpce-0bbb2222。
三、通过 CLI 创建防火墙
CLI 方式更适合自动化与可重复部署。核心命令是 create-firewall,它需要同时指定防火墙子网映射和策略 ARN。策略可以先用 create-firewall-policy 创建。
aws network-firewall create-firewall-policy \
--firewall-policy-name nfw-policy-basic \
--firewall-policy '{
"StatelessDefaultActions": ["aws:forward_to_sfe"],
"StatelessFragmentDefaultActions": ["aws:forward_to_sfe"],
"StatefulDefaultActions": ["aws:drop_established"],
"StatefulEngineOptions": {"RuleOrder": "STRICT_ORDER"}
}'
aws network-firewall create-firewall \
--firewall-name nfw-prod-01 \
--firewall-policy-arn arn:aws:network-firewall:ap-northeast-1:123456789012:firewall-policy/nfw-policy-basic \
--vpc-id vpc-0a1b2c3d4e5f67890 \
--subnet-mappings SubnetId=subnet-0fw1 SubnetId=subnet-0fw2
创建后可用 describe-firewall 查看状态与端点:
aws network-firewall describe-firewall \
--firewall-name nfw-prod-01 \
--query 'FirewallStatus.SyncStates'
返回结果中每个子网会显示 Status: READY 以及对应的 Attachment 端点 ID。只有全部子网都 READY,才说明防火墙可以承载流量。
四、关联 VPC 与子网:路由是关键
创建防火墙并不会自动改变流量路径。真正让流量“经过”防火墙的是路由表。需要在业务子网的路由表中,把默认路由 0.0.0.0/0 的下一跳从 Internet 网关改为防火墙端点。对于多可用区部署,应使用端点 ID 作为目标,而不是 IP。
同时,防火墙子网自身的路由表需要保留指向 Internet 网关的默认路由,否则防火墙无法把放行的流量转发出去。这一“进—检—出”的路径关系,是 Network Firewall 部署中最容易出错的地方。
五、验证基本连通性
部署完成后,必须验证两件事:一是流量确实经过防火墙,二是防火墙在默认策略下不会误阻断合法流量。推荐使用以下测试闭环。
首先,在业务子网的测试实例上执行 curl -I https://www.example.com,观察是否返回 HTTP 状态码。若返回 200 或 301,说明出站流量被放行并成功到达 Internet。其次,在 Network Firewall 控制台的“监控”或 CloudWatch 指标中查看 PassedPackets 与 DroppedPackets。如果 PassedPackets 持续增长,说明流量确实命中了防火墙并被放行;如果 DroppedPackets 增长而业务不通,则说明策略或规则组存在阻断。
还可以通过 aws network-firewall describe-firewall 确认端点状态,并用 VPC 流日志观察源 IP 为测试实例、目的为公网的流量是否先到达防火墙端点。若流日志中看不到防火墙端点的记录,通常意味着路由表未正确指向端点。
六、常见失败点与判断依据
| 现象 | 可能原因 | 判断依据 |
|---|---|---|
| curl 超时 | 业务子网默认路由未指向防火墙端点 | 流日志中无端点记录,PassedPackets 不增长 |
| curl 返回连接被拒 | 防火墙子网路由未指向 IGW | 端点 READY,但出站流量无法离开 VPC |
| 部分可用区不通 | 仅关联了一个防火墙子网 | describe-firewall 中某子网状态非 READY |
| 策略误阻断 | 有状态默认动作设为 drop | DroppedPackets 增长,规则组命中日志可见 |