更新时间:2024-03-05 GMT+08:00

安全组和安全组规则

安全组

安全组是一个逻辑上的分组,为具有相同安全保护需求并相互信任的云服务器、云容器、云数据库等实例提供访问策略。安全组创建后,用户可以在安全组中定义各种访问规则,当实例加入该安全组后,即受到这些访问规则的保护。

如果您未创建任何安全组,那么在首次创建需要使用安全组的实例时(比如弹性云服务器),系统会自动为您创建一个默认安全组并关联至该实例,关于默认安全组的更多信息,请参见默认安全组

安全组基本信息

  • 安全组是有状态的。如果您从实例发送一个出站请求,且该安全组的出方向规则是放通的话,那么无论其入方向规则如何,都将允许该出站请求的响应流量流入。同理,如果该安全组的入方向规则是放通的,那无论出方向规则如何,都将允许入站请求的响应流量可以流出。
  • 安全组使用连接跟踪来标识进出实例的流量信息,入方向安全组的规则变更,对原有流量立即生效。出方向安全组规则的变更,不影响已建立的长连接,只对新建立的连接生效。

    当您在安全组内增加、删除、更新规则,或者在安全组内添加、移出实例时,系统会自动清除该安全组内所有实例入方向的连接,详细说明如下:

    • 由入方向流量建立的连接,已建立的长连接将会断开。所有入方向流量立即重新建立连接,并匹配新的安全组入方向规则。
    • 由出方向流量建立的连接,已建立的长连接不会断开,依旧遵循原有安全组规则。出方向流量新建立的连接,将会匹配新的安全组出方向规则。

对于已建立的长连接,流量断开后,不会立即建立新的连接,需要超过连接跟踪的老化时间后,才会新建立连接并匹配新的规则。比如,对于已建立的ICMP协议长连接,当流量中断后,需要超过老化时间30s后,将会新建立连接并匹配新的规则,详细说明如下:

  • 不同协议的连接跟踪老化时间不同,比如已建立连接状态的TCP协议连接老化时间是600s,ICMP协议老化时间是30s。对于除TCP和ICMP的其他协议,如果两个方向都收到了报文,连接老化时间是180s,如果只是单方向收到了报文,另一个方向没有收到报文,则连接老化时间是30s。
  • TCP协议处于不同状态下的连接老化时间也不相同,比如TCP连接处于ESTABLISHED(连接已建立)状态时,老化时间是600s,处于FIN-WAIT(连接即将关闭)状态时,老化时间是30s。

安全组规则

安全组中包括入方向规则和出方向规则,用来控制安全组内实例的入方向和出方向的网络流量。安全组规则由协议端口、源地址/目的地址等组成,关键信息的说明如表1所示。
表1 安全组规则详细信息

参数

说明

协议类型

安全组规则中用来匹配流量的网络协议类型。目前支持“All”、“TCP”、“UDP”和“ICMP”等协议。

端口范围

安全组规则中用来匹配流量的目的端口,取值范围为:1~65535。

  • 在入方向规则中,表示外部访问安全组内实例的指定端口。
  • 在出方向规则中,表示安全组内实例访问外部的指定端口。

源地址(入方向)

源地址是入方向规则中,用来匹配外部访问请求的地址,支持多种格式:
  • IP地址:
    • 单个IPv4地址:示例为192.168.10.10/32。
    • IPv4网段:示例为192.168.52.0/24。如果要匹配所有IPv4地址,设置为0.0.0.0/0。
  • 安全组:您可以选择当前账号下,同一个区域内的其他安全组作为源地址。

    当安全组A内有实例a,安全组B内有实例b,在安全组A设置入方向规则时的“策略”为允许,源地址选择安全组B时,表示来自实例b的内网访问请求被允许进入实例a。

目的地址(出方向)

目的地址是出方向规则中,用来匹配内部请求访问的地址,支持多种格式:

  • IP地址:
    • 单个IPv4地址:示例为192.168.10.10/32。
    • IPv4网段:示例为192.168.52.0/24。如果要匹配所有IPv4地址,设置为0.0.0.0/0。
  • 安全组:您可以选择当前账号下,同一个区域内的其他安全组作为目的地址。

    当安全组A内有实例a,安全组B内有实例b,在安全组A设置出方向规则时的“策略”为允许,目的地址选择安全组B时,表示实例a内部的请求被允许出去访问实例b。

安全组规则遵循白名单规则,具体说明如下:
  • 入方向规则:入方向指外部访问安全组内实例的指定端口。

    当外部请求匹配上安全组中入方向规则的源地址,并且策略为“允许”时,允许该请求进入,其他请求一律拦截。

    因此,默认情况下,您一般不用在入方向配置策略为“拒绝”的规则,因为不匹配“允许”规则的请求均会被拦截。

  • 出方向规则:出方向指安全组内实例访问外部的指定端口。

    在出方向中配置目的地址匹配所有IP地址的规则,并且策略为“允许”时,允许所有的内部请求出去。

    0.0.0.0/0表示匹配所有IPv4地址。

表2所示,以自定义安全组sg-AB为例,根据sg-AB的入方向和出方向规则,为您详细解释安全组的规则。
表2 安全组sg-AB的规则说明

规则方向

协议端口

源地址/目的地址

描述

入方向规则

全部

源地址:sg-AB

针对全部IPv4协议,允许本安全组内云服务器的请求进入,即该条规则确保安全组内的云服务器网络互通。

入方向规则

TCP: 22

源地址:0.0.0.0/0

针对TCP(IPv4)协议,允许外部所有IP访问安全组内云服务器的SSH(22)端口,用于远程登录Linux云服务器。

入方向规则

TCP: 3389

源地址:0.0.0.0/0

针对TCP(IPv4)协议,允许外部所有IP访问安全组内云服务器的RDP(3389)端口,用于远程登录Windows云服务器。

入方向规则

TCP: 80

源地址:10.5.6.30/32

针对TCP(IPv4)协议,允许外部IP(10.5.6.30)访问安全组内云服务器的80端口。

出方向规则

全部

目的地址:0.0.0.0/0

针对全部IPv4协议,允许安全组内的云服务器可访问外部IP的所有端口。

  • 在安全组规则中放开某个端口后,为了确保网络正常通信,您还需要确保实例内对应的端口也已经放通。
  • 通常情况下,同一个安全组内的实例默认网络互通。当同一个安全组内实例网络不通时,可能情况如下:
    • 在入方向规则中,删除了同一个安全组内实例互通对应的规则。
    • 不同VPC的网络不通,所以当实例属于同一个安全组,但属于不同VPC时,网络不通。

      您可以通过VPC对等连接连通不同区域的VPC。

安全组的限制

  • 默认情况下,一个安全组最多只允许拥有50条安全组规则。
  • 默认情况下,一个云服务器或扩展网卡最多只能被添加到5个安全组中,安全组规则取并集生效。