华为云 VPC 安全组 vs 网络 ACL:选型与常见误配对照
华为云 VPC 安全组 vs 网络 ACL:选型与常见误配对照
很多人在华为云上刚建好 VPC、子网和 ECS 后,会同时看到「安全组」和「网络 ACL」两个入口。常见的情况是:只配了安全组,网络 ACL 保持默认;或者两边规则互相打架,SSH / 健康检查 / 跨子网互访莫名不通。本文用选型对照和误配清单,把两者讲清楚,方便按场景落地。
一句话区别
| 维度 | 安全组(Security Group) | 网络 ACL(Network ACL) |
|---|---|---|
| 作用对象 | 弹性网卡 / 实例级(挂到 ECS、ELB 等) | 子网级(绑到整个子网) |
| 规则状态 | 有状态:回程流量自动放行 | 无状态:入、出方向都要显式放行 |
| 默认行为 | 新建安全组通常「出方向全放行、入方向仅本安全组互通」等(以控制台当前默认为准) | 默认网络 ACL 一般允许所有入/出;自定义 ACL 未匹配时默认拒绝 |
| 规则顺序 | 多条规则之间是「允许优先」一类的集合语义(命中允许即可) | 按优先级编号从小到大匹配,先匹配先生效 |
| 典型用途 | 业务端口、跳板机、数据库只给应用网段 | 子网隔离、临时封禁网段、统一收口南北向 |
可以记成:安全组管「这台机器 / 这块网卡」,网络 ACL 管「这个子网里所有人」。
什么时候用安全组就够
以下场景,很多人只配安全组就够用:
- 单层业务:几台 ECS 同子网,对外开 80/443,管理口 22 只给办公网或堡垒机。
- 应用 → 数据库:应用安全组出方向访问 3306/6379;数据库安全组入方向只放行应用安全组 ID(比写散落的 IP 更稳)。
- ELB 后面的后端:后端安全组放行 ELB 健康检查源地址与业务端口(共享型常见探测网段与独享型不同,需按产品文档核对)。
安全组的有状态特性,对「客户端主动连出、服务端被动应答」特别友好:入方向放行 443 后,回程不用再写一条出站放行。
什么时候值得加网络 ACL
网络 ACL 更适合「子网边界」策略,例如:
- 多子网分层:Web 子网、App 子网、DB 子网;希望在子网边界统一禁止 DB 子网直接访问公网。
- 应急封禁:某个网段扫端口,需要在子网级快速拒绝,而不必逐台改安全组。
- 合规分区:测试子网与生产子网之间强制「默认拒绝 + 白名单放行」。
注意:网络 ACL 是无状态的。放行入方向 TCP 443 时,还要放行出方向的回程(常见写法是放行 ephemeral 端口范围,或按实际客户端端口规划)。只写半边规则,是很多人第一次配 ACL 时最容易踩的坑。
选型建议(可直接照着选)
- 默认起步:安全组做细粒度端口控制;子网继续用默认网络 ACL(全放行),先把连通性跑通。
- 需要子网级隔离或统一封禁:再创建自定义网络 ACL,绑到对应子网。
- 两者同时存在时:流量必须同时满足安全组和网络 ACL。任一侧拒绝,表现就是「ping 不通 / 连接超时」。
- 优先级心智:先想「这台实例该不该开这个端口」(安全组),再想「这个子网整层该不该出现这类流量」(ACL)。
常见误配清单
1. 只改了安全组入方向,忘了出方向或对端安全组
跨安全组互访时,常见情况是:A 的出方向默认已放行,但 B 的入方向没有放行 A 的安全组或网段;或者反过来,有人把出方向改成「拒绝全部」却没给必要目的端口留白名单。排查时习惯性两边一起看:源安全组出方向 + 目的安全组入方向。
2. 网络 ACL 只放开入方向,回程被默拒
无状态意味着:
- 入方向允许 TCP 22;
- 出方向还要允许对应回程(目的端口为客户端临时端口)。
很多教程示例会写「出方向允许 1024–65535」。具体范围以业务与镜像为准,但「出入成对」这条原则不要省。
3. ACL 优先级写反或重叠
网络 ACL 按优先级数字从小到大匹配。两条规则一个允许、一个拒绝时,数字更小的先生效。常见的情况是:想「拒绝某个 IP,再允许网段」,却把允许规则写在了更小的优先级上,导致拒绝永远轮不到。
4. 把安全组规则写到了错误的网卡 / 实例
一台 ECS 多网卡,或弹性网卡后来换绑时,安全组挂错网卡会导致「控制台看实例在、业务端口却不通」。改完规则后,确认关联的是正在跑业务的那块网卡。
5. ELB / 健康检查探测源被 ACL 或安全组拦掉
ELB 后端异常时,除了检查监听器和后端进程,还要核对:
- 后端安全组是否放行探测源;
- 后端所在子网的网络 ACL 入/出是否放行探测与回程。
只放安全组、ACL 仍拒绝探测网段,是「后端全变异常」的高频组合。
6. 用网络 ACL「细到端口级」替代安全组
技术上可以,但运维成本高:ACL 无状态、按子网生效,改一次影响子网内所有实例。端口级授权更适合放在安全组;ACL 更适合粗粒度隔离和黑白名单网段。
7. 默认 ACL 与自定义 ACL 绑错子网
新建自定义 ACL 后如果忘记绑定子网,策略不会生效;绑错到别的子网,则会出现「改了 A 子网规则,B 业务却挂了」。改完在控制台核对「关联子网」列表。
推荐落地顺序
- 画清子网:公网入口 / 应用 / 数据,能分则分。
- 每个角色一个安全组(web / app / db / bastion),用安全组 ID 互引,少写散落 IP。
- 连通性先在默认 ACL 下验证;稳定后再加自定义 ACL 做子网边界。
- 变更时一次只动一侧(先安全组或先 ACL),并保留回滚:记下原规则或先复制一份 ACL。
- 用同一 VPC 内的另一台 ECS
curl/nc验证,再从公网或专线侧验证,避免把「本机防火墙」和「云边规则」混在一起误判。
快速自检表
- [ ] 目的实例的安全组入方向是否放行协议 / 端口 / 源(IP 或安全组)?
- [ ] 源侧出方向是否被收紧?跨安全组时对端是否成对放行?
- [ ] 子网是否绑定了自定义网络 ACL?入、出是否成对?
- [ ] ACL 优先级是否按预期先匹配?
- [ ] ELB / 健康检查探测源是否在安全组与 ACL 中都放行?
- [ ] 规则是否挂在正确的网卡 / 正确的子网上?
小结
安全组负责实例级、有状态的精细授权;网络 ACL 负责子网级、无状态的边界控制。大多数业务可以「安全组为主、默认 ACL 为辅」;真正需要分区隔离或应急封禁时,再引入自定义网络 ACL,并牢记无状态成对放行和优先级顺序。两边同时生效,排查时按「安全组 → ACL → 本机防火墙 / 路由」的顺序对照,通常能较快定位误配点。
(配置项名称与默认值以华为云控制台当前区域文档为准;共享型 / 独享型 ELB 的探测源地址请对照对应产品说明。)
- 点赞
- 收藏
- 关注作者
评论(0)