一、Network ACL 是什么(一句话)
Network ACL(NACL)= 子网级别的无状态防火墙
核心特点(一定要记住):
作用在 Subnet(子网)级别
无状态(Stateless)
支持 Allow 和 Deny
规则按编号从小到大匹配,先命中先执行
二、什么时候需要用 NACL?
| 场景 | 用 NACL | 用 SG |
|---|---|---|
| 整个子网统一策略 | ✅ | ❌ |
| 明确拒绝某些 IP | ✅ | ❌ |
| 实例级精细控制 | ❌ | ✅ |
| 大多数应用 | ❌ | ✅ |
实际生产中:Security Group 为主,NACL 为补充
三、创建 Network ACL(AWS Console 实操)
Step 1:进入 Network ACLs
路径:
AWSConsole→ VPC →NetworkACLs点击 Create network ACL
Step 2:填写基本信息
| 配置项 | 示例 |
|---|---|
| Name tag | app-nacl-public |
| VPC | 选择你的 VPC |
Step 3:编辑 Inbound Rules(入站规则)
点击刚创建的 NACL →Inboundrules →Editinbound rules示例:Public Subnet 常见配置
| Rule # | Type | Protocol | Port | Source | Allow/Deny |
|---|---|---|---|---|---|
| 100 | HTTP | TCP | 80 | 0.0.0.0/0 | ALLOW |
| 110 | SSH | TCP | 22 | 你的 IP | ALLOW |
| 120 | Ephemeral | TCP | 1024-65535 | 0.0.0.0/0 | ALLOW |
| * | ALL | ALL | ALL | 0.0.0.0/0 | DENY |
最后一条 * DENY 是隐式存在的
Step 4:编辑 Outbound Rules(出站规则)
点击Outboundrules →Editoutbound rules| Rule # | Type | Protocol | Port | Destination | Allow/Deny |
|---|---|---|---|---|---|
| 100 | ALL traffic | ALL | ALL | 0.0.0.0/0 | ALLOW |
如果你限制 Outbound,返回流量会被挡住
Step 5:关联 Subnet(关键一步)
点击Subnetassociations →Editsubnet associations✔ 勾选要应用的子网
✔ 点击 Save
NACL 只有关联子网后才生效
四、NACL vs Security Group(必背表)
| 对比项 | NACL | Security Group |
|---|---|---|
| 作用层级 | Subnet | 实例 |
| 状态 | 无状态 | 有状态 |
| 支持 Deny | ✅ | ❌ |
| 规则顺序 | 有(编号) | 无 |
| 默认规则 | 允许全部 | 入站全拒 |
五、完整流量示例(Public Subnet)
用户访问 EC2(HTTP):
Internet↓InternetGateway↓RouteTable↓NetworkACL(Inbound80允许) ↓SecurityGroup(Inbound80允许) ↓ EC2返回流量:
EC2 ↓SecurityGroup(自动允许) ↓NetworkACL(OutboundEphemeral允许) ↓Internet六、最常见踩坑(90% 新手会中)
❌ 忘了 Ephemeral Ports
👉 访问超时 / 页面打不开
必须允许:
1024–65535❌ Rule 编号顺序错误
👉 DENY 在前,ALLOW 永远匹配不到
❌ 只配了 Inbound,没配 Outbound
👉 返回流量被挡
七、考试一句话总结
Network ACL 是子网级别、无状态、防火墙,支持 Allow 和 Deny,规则按编号顺序执行,必须同时允许入站和出站流量。