安全组是什么
安全组是绑定在实例与弹性网卡上的虚拟防火墙,采用白名单模型:只有被规则放行的流量才能通过,未匹配任何放行规则的流量被丢弃。它是有状态的——请求方向被放行后,该连接的返回流量自动通过,不需要再补一条反向规则。安全组可以同时绑定多张,实例的实际放行结果是各张安全组规则的并集。
基本信息
| 绑定对象 | 云服务器实例 / 弹性网卡(实例级粒度) |
|---|---|
| 模型 | 白名单:未匹配放行规则即拒绝 |
| 状态 | 有状态:放行方向的返回流量自动放行 |
| 规则要素 | 方向、协议、端口范围、授权对象(CIDR 或另一个安全组)、优先级 |
| 数量限制 | 单实例可绑定的安全组数量、单安全组规则条数均有配额上限 |
| 默认行为 | 新建安全组通常入方向无规则即全部拒绝,出方向多数平台默认放行 |
典型使用场景
- 分层管控:Web 层安全组放行 80/443,数据层安全组只允许应用层安全组访问 3306
- 运维入口收敛:SSH/RDP 只放行跳板机网段,不对全网开放
- 实例级差异配置:同一子网内不同职责的实例挂不同安全组
- 按安全组引用授权:应用层扩缩容时数据库侧规则无需改动
- 临时放行:调试期间精确放行某个来源 IP,结束后立即收回
从实例侧区分拦截与服务故障
从实例侧区分拦截与服务故障
nc -zv -w 3 10.10.3.20 3306 # 端口连通性探测
curl -s --connect-timeout 3 http://10.10.3.20:8080/health
# 表现为「超时无响应」时多半是被安全组/网络 ACL 丢弃
# 表现为「connection refused」时说明报文已到达,是主机侧服务未监听
telnet 10.10.3.20 3306 # 不支持 nc 的老系统可替代使用常见现象与判断
| 现象 | 更可能的原因 |
|---|---|
| 连接超时、无任何响应 | 安全组或网络 ACL 丢弃了报文 |
| connection refused | 主机可达但端口未监听或系统防火墙拒绝 |
| 内网通、公网不通 | 缺少 EIP/NAT 出口或公网入方向未放行 |
| 同安全组的机器互相通、不同组不通 | 按安全组引用的授权规则未覆盖该来源 |
安全组作用在实例上、粒度细;网络 ACL 作用在子网上、粒度粗且无状态。两者同时存在时,任何一层不放行流量都不通,排查要两层一起看。
生产环境避免长期保留「入方向全部放行」的安全组,这类配置等同于关闭访问控制,实例一旦存在漏洞会直接被外部利用。
规则设计习惯
- 先按业务角色建安全组(Web、应用、数据、运维),再挂到对应实例上
- 层与层之间用安全组引用授权,避免写死 IP 导致扩缩容时改规则
- 管理端口只放行跳板机或运维网段,不对全网开放
- 临时放行的规则记录在案并在完成后清理,避免规则长期沉淀
- 变更前确认影响范围,先梳理该安全组被哪些实例引用
用安全组引用授权
用安全组引用授权
数据层安全组入方向规则:
协议 TCP 端口 3306 授权对象 sg-app(应用层安全组 ID)
效果:应用层实例增减时无需修改数据库侧规则
注意:授权对象为安全组时,生效范围随该组内实例变化而自动变化安全组规则条数有配额上限;当规则数量接近上限,通常说明授权方式过度依赖单个 IP,改用安全组引用往往能大幅收敛规则条数。