什么是安全组
安全组是一种网络安全防护机制,用于防止未经授权的访问和保护计算机网络免受恶意攻击。它是一种虚拟防火墙,用于限制入向和出向网络流量通行。安全组工作在网络层和传输层,它通过检查数据包的源地址、目标地址、协议类型和端口号等信息来决定是否允许通过。安全组创建后,用户可以在安全组中定义各种访问规则,当弹性云主机加入该安全组后,即受到这些访问规则的保护。
不同资源池的安全组存在部分差异,如表1所示:
表1 可用区资源池和地域资源池的差异
对比项 | 多可用区资源池 | 地域资源池 |
---|---|---|
作用机制 | “白名单”机制,即不匹配规则时,默认拒绝所有访问。 | “白名单”机制,即不匹配规则时,默认拒绝所有访问。 |
创建安全组 | 需指定和VPC的关联关系 | 无需指定和VPC的关联关系 |
默认安全组 | 一个VPC一个默认安全组 | 一个资源池一个默认安全组 |
自定义模板安全组的默认规则 | 自定义模板类型的安全组不存在默认规则 | 每个自定义模板类型的安全组存在两条默认规则 |
默认安全组规则 | 存在默认安全组规则,具体规则以表3为准 | 存在默认安全组规则,具体规则以表2为准 |
安全组是否有状态 | 出/入方向均有状态 | 仅出向有状态 |
安全组模板 | 自定义、通用Web服务器、开放全部端口 | 自定义、通用Web服务器、开放全部端口 |
默认安全组:
- 对于地域资源池,系统会为每个用户默认创建一个安全组,多个VPC可以共用同一个安全组。默认安全组的默认规则可参考表2“地域资源池默认安全组规则”。
- 对于可用区资源池,系统会为每个VPC默认创建一个安全组。一般来讲不同VPC之间是不同的业务,VPC之间是相互隔离的,相同业务一般部署在一个VPC。大多数情况下,不同的VPC由于业务的差异,所使用的安全组规则应该是不一样的。每个VPC自动建立一个默认安全组,可以满足用户不同业务需要不同安全组的场景。默认安全组的默认规则可参考表3“可用区资源池默认安全组规则”。
安全组状态:
- 对于地域资源池来说,安全组出向是有状态的。如果您从实例发送一个出站请求,且该安全组的出站规则是放通的话,那么无论其入站规则如何,都将允许该出站请求的响应流量流入。
- 对于可用区资源池来说,安全组出/入方向均有状态的。如果您从实例发送一个出站请求,且该安全组的出站规则是放通的话,那么无论其入站规则如何,都将允许该出站请求的响应流量流入。同理,如果该安全组的入站规则是放通的,那无论出站规则如何,都将允许入站请求的响应流量可以出站。
自定义安全组:
- 对于地域资源池来说,用户创建安全组时,模板类型为自定义的安全组会存在两条默认规则,即出向默认放通所有IP地址(0.0.0.0/0、::/0)流量的数据报文通过。
- 对于可用区资源池来说,用户创建安全组时,模板类型为自定义的安全组不存在默认规则,如未添加规则,则默认安全组出、入方向将均拒绝所有访问。
不同资源池列表见产品简介-资源池区别页面,实际情况以控制台展现为准。
安全组规则
为了更好地管理安全组的入出方向,您可以设置安全组规则,去控制云服务器的出入向流量。通过配置适当的规则,控制和保护加入安全组的弹性云服务器的访问。
-
安全组规则可分为入向规则和出向规则。入向规则用于控制流入服务器实例的流量,出向规则用于控制从服务器实例流出的流量。默认安全组会自带一些默认规则,您也可以自定义添加安全组规则。
-
安全组规则主要遵循白名单机制,具体说明如下:
入方向规则:入方向指外部访问安全组内的云服务器的指定端口。当外部请求匹配上安全组中入方向规则的源地址,并且授权策略为“允许”时,允许该请求进入,其他请求一律拦截。通常情况下,您一般不用在入方向配置授权策略为“拒绝”的规则,因为不匹配“允许”规则的请求均会被拦截。
出方向规则:出方向指安全组内的云服务器访问外部的指定端口。在出方向中放通全部协议和端口,配置全零IP地址,并且策略为“允许”时,允许所有的内部请求出去。0.0.0.0/0表示所有IPv4地址,::/0表示所有IPv6地址。
地域资源池:
对于地域资源池来说,系统会为每个用户默认创建一个安全组,默认安全组包含一系列默认规则,主要是在出方向上的数据报文全部放行,入方向访问受限,安全组内的云服务器无需添加规则即可互相访问。
默认安全组规则如下表2:
表2 地域资源池默认安全组规则
方向 | 授权策略 | 类型 | 协议 | 端口范围 | 目的地址/源地址 | 说明 |
---|---|---|---|---|---|---|
出方向 | 允许 | IPv4 | Any | Any | 0.0.0.0/0 | 允许所有IPv4类型的出站流量的数据报文通过。 |
出方向 | 允许 | IPv6 | Any | Any | ::/0 | 允许所有IPv6类型的出站流量的数据报文通过。 |
入方向 | 允许 | IPv4 | Any | Any | 默认安全组ID (例如:sg-xxxxx) | 仅允许安全组内的云服务器彼此通信,丢弃其他入站流量的全部数据报文。 |
入方向 | 允许 | IPv6 | Any | Any | 默认安全组ID (例如:sg-xxxxx) | 仅允许安全组内的云服务器彼此通信,丢弃其他入站流量的全部数据报文。 |
入方向 | 允许 | IPv4 | TCP | 22 | 0.0.0.0/0 | 允许所有IP地址通过SSH远程连接到Linux云服务器。 |
入方向 | 允许 | IPv4 | TCP | 3389 | 0.0.0.0/0 | 允许所有IP地址通过RDP远程连接到Windows云服务器。 |
入方向 | 允许 | IPv4 | ICMP | Any | 0.0.0.0/0 | 使用ping程序测试云服务器之间的通讯状况。 |
可用区资源池:
对于可用区资源池来说,系统会为每个VPC默认创建一个安全组,默认安全组包含一系列默认规则,主要是在出方向上的数据报文全部放行,入方向访问受限。
默认安全组规则如下表3:
表3 可用区资源池默认安全组规则
方向 | 授权策略 | 类型 | 优先级 | 协议 | 端口范围 | 目的地址/源地址 | 说明 |
---|---|---|---|---|---|---|---|
出方向 | 允许 | IPv4 | 100 | Any | Any | 0.0.0.0/0 | 允许所有IPv4类型的出站流量的数据报文通过。 |
出方向 | 允许 | IPv6 | 100 | Any | Any | ::/0 | 允许所有IPv6类型的出站流量的数据报文通过。 |
入方向 | 允许 | IPv4 | 99 | ICMP | Any | 0.0.0.0/0 | 使用ping程序测试云服务器之间的IPv4地址通讯状况 |
入方向 | 允许 | IPv6 | 99 | ICMP | Any | ::/0 | 使用ping程序测试云服务器之间的IPv6地址通讯状况 |
入方向 | 允许 | IPv4 | 99 | TCP | 22 | 0.0.0.0/0 | 允许所有IPv4地址通过SSH远程连接到Linux云服务器。 |
入方向 | 允许 | IPv6 | 99 | TCP | 22 | ::/0 | 允许所有IPv6地址通过SSH远程连接到Linux云服务器。 |
入方向 | 允许 | IPv4 | 99 | TCP | 3389 | 0.0.0.0/0 | 允许所有IPv4地址通过RDP远程连接到Windows云服务器。 |
入方向 | 允许 | IPv6 | 99 | TCP | 3389 | ::/0 | 允许所有IPv6地址通过RDP远程连接到Windows云服务器。 |
入方向 | 拒绝 | IPv4 | 100 | Any | Any | 0.0.0.0/0 | 禁止所有IPv4类型的入站流量的数据报文通过。 |
入方向 | 拒绝 | IPv6 | 100 | Any | Any | ::/0 | 禁止所有IPv6类型的入站流量的数据报文通过。 |
实践建议
以下是一些关于安全组的建议和实践经验,帮助确保您的云环境的安全性,您可根据具体需求和环境来制定适合的安全组策略:
- 原则上,安全组规则取最小权限原则,通过设置所需的端口和协议,限制对必要IP地址的访问。只允许最少必要的流量进出您的资源实例。
- 定期更新安全组规则,以适应您的业务需求的变化。不再需要的规则应被删除,根据业务变化添加新的安全组规则。
- 根据资源的安全需求,将资源实例划分为不同的安全组。通过多层级的安全组可以实现细粒度的安全控制,确保安全性与灵活性之间的平衡。
- 通过有规范的命名等方式有意识地规划和管理安全组规则,易于查找。
- 安全组应与其他安全措施如网络ACL、防火墙等结合使用,以提供更全面的安全保护。
- 建议您不要直接修改线上环境使用的安全组,修改后的安全组会自动应用在安全组内的所有云服务器上,因此您可以先克隆一个安全组,在测试环境中进行调试,确保修改后云服务器之间的通讯正常,再将修改后的安全组同步到线上环境。