安全组规则模型是什么
一条安全组规则由五个要素描述:方向、协议、端口范围、来源或目的、允许或拒绝;规则按优先级排序,数字越小越优先。连接是有状态的,放行了入方向的请求,这条连接的返回报文会自动放行,不需要再补反向规则。
基本信息
| 方向 | 入方向控制进入实例的流量,出方向控制离开实例的流量 |
|---|---|
| 状态 | 有状态:已建立连接的返回报文不受规则限制,无需配反向规则 |
| 默认策略 | 入方向默认拒绝全部,出方向默认允许全部(主流厂商口径) |
| 优先级 | 按优先级数字排序,越小越优先,同端口可先拒绝后允许 |
| 来源类型 | 地址段、其他安全组、前缀列表或特定实例;组引用比地址白名单更好维护 |
典型使用场景
- 收敛公网暴露面:只放行业务必需端口,其余一律拒绝,规则本身就是资产清单
- 按角色分层授权:Web 组对全网开放,应用组只接受 Web 组来源,数据组只接受应用组来源
- 临时排障放行:针对特定来源地址临时开一个端口,问题解决后立即撤销
- 限制出方向:对数据外发敏感的业务收紧出方向,只放行必要的目标地址与端口
- 跨环境引用:用安全组作为来源,测试环境无法直接连到生产数据层
- 审计与巡检:把规则导出成表,按端口与来源统计出公网开放清单
一条规则的五个要素
| 要素 | 取值示例 | 说明 |
|---|---|---|
| 方向 | 入 | 控制进入实例的流量 |
| 协议 | TCP | 也可选 UDP、ICMP 或全部协议 |
| 端口范围 | 443/443 | 用起始与结束表示范围 |
| 来源 | 0.0.0.0/0 或某安全组 | 地址段、安全组 ID 均可 |
| 策略 | 允许 | 与拒绝规则同时存在时按优先级判定 |
规则排查命令
规则排查命令
aliyun ecs DescribeSecurityGroupAttribute --RegionId cn-hangzhou --SecurityGroupId sg-xxxx # 导出当前规则
aliyun ecs DescribeSecurityGroups --RegionId cn-hangzhou --PageSize 100 # 列出全部安全组
# 把规则导出后按端口排序,检查是否有多余的公网放行有状态特性容易被误解:出方向全部拒绝时,本机主动发起的请求,它的返回报文依然能回来;但对方主动发起的连接会被拒绝。
拒绝规则与允许规则同时命中同一端口时,按优先级判定;规则写反的表现是『配了没生效』或『该拦的没拦住』,排查时要把整张表按优先级重排一遍。
用安全组作为来源比写地址段更稳:实例扩容、换地址都不需要改规则,也避免了遗漏某台机器的经典故障。
规则设计与维护
- 给规则写清用途说明:端口、来源、为什么开,半年后回头看仍然读得懂
- 按用途分组:同类服务的规则放在同一个安全组里,避免一个组混装所有端口
- 用安全组引用替代地址段:实例扩缩容与地址变化都不需要改规则
- 定期给规则瘦身:不再使用的放行逐条核对后删除,公网暴露面才会真正收敛
- 变更前先导出当前规则作为快照,误改时可以快速比对并恢复
与其他规则的关系
- 网络访问控制列表与安全组层级不同,两层都要核对
- 系统内防火墙的命令与云上规则互不影响,排障时要分别确认
- 来源用安全组引用时可读性更好,也更容易做审计