安全组和安全组规则概述-九游平台
安全组
安全组是一个逻辑上的分组,为具有相同安全保护需求并相互信任的云服务器、云容器、云数据库等实例提供访问策略。安全组创建后,用户可以在安全组中定义各种访问规则,当实例加入该安全组后,即受到这些访问规则的保护。
您在创建实例时(比如云服务器),必须将实例加入一个安全组,如果此前您还未创建任何安全组,那么系统会自动为您创建默认安全组并关联至该实例。除了默认安全组,您还可以根据业务需求创建自定义安全组并关联至实例。一个实例可以关联多个安全组,多个安全组按照优先级顺序依次匹配流量。
- 安全组sg-a的入方向存在一条放通icmp端口的自定义规则,因此可以通过个人pc (计算机)ping通ecs-a。但是安全组内未包含允许ssh流量进入实例的规则,因此您无法通过个人pc远程登录ecs-a。
- 当ecs-a需要通过eip访问公网时,由于安全组sg-a的出方向规则允许所有流量从实例流出,因此ecs-a可以访问公网。


您可以免费使用安全组资源,当前不收取任何费用。
安全组规则
- 安全组中包括入方向规则和出方向规则,用来控制安全组内实例的入方向和出方向的网络流量。
- 入方向规则:控制外部请求访问安全组内的实例,即流量流入实例。
- 出方向规则:控制安全组内实例访问外部的请求,即流量从实例流出。
- 安全组规则由协议端口、源地址/目的地址等组成,关键信息说明如下:
- 策略:支持允许或拒绝。当流量的协议、端口、源地址/目的地址成功匹配某个安全组规则后,会对流量执行规则对应的策略,允许或拒绝流量。
- 优先级:优先级可选范围为1-100,数字越小,规则优先级级别越高。安全组规则匹配流量时,首先按照优先级进行排序,其次按照策略排序,拒绝策略高于允许策略,更多信息请参见流量匹配安全组规则的顺序。
- 类型:支持设置ipv4和ipv6协议的规则。
- 协议端口:包括网络协议类型和端口范围。
- 网络协议:匹配流量的协议类型,支持tcp、udp、icmp和gre协议。
- 端口范围:匹配流量的目的端口,取值范围为:1~65535。
- 源地址或目的地址:在入方向中,匹配流量的源地址。在出方向中,匹配流量的目的地址。
您可以使用ip地址、安全组、ip地址组作为源地址或者目的地址。
- ip地址:某个固定的ip地址或者网段,支持ipv4和ipv6地址。比如:192.168.10.10/32(ipv4地址)、192.168.1.0/24(ipv4网段)、2407:c080:802:469::/64(ipv6网段)
- 安全组:目标安全组和当前安全组位于同一区域,表示流量匹配目标安全组内所有实例的私有ip地址。比如:当安全组a内有实例a,安全组b内有实例b,在安全组a的入方向规则中,放通源地址为安全组b的流量,则来自实例b的内网访问请求被允许进入实例a。
- ip地址组:ip地址组是一个或者多个ip地址的集合,对于安全策略相同的ip网段和ip地址,此处建议您使用ip地址组简化管理。
安全组及规则的工作原理
- 安全组是有状态的。如果您从实例发送一个出站请求,且该安全组的出方向规则是放通的话,那么无论其入方向规则如何,都将允许该出站请求的响应流量流入。同理,如果该安全组的入方向规则是放通的,那无论出方向规则如何,都将允许入站请求的响应流量可以流出。
- 安全组使用连接跟踪来标识进出实例的流量信息,入方向安全组的规则变更,对原有流量立即生效。出方向安全组规则的变更,不影响已建立的长连接,只对新建立的连接生效。
当您在安全组内增加、删除、更新规则,或者在安全组内添加、移出实例时,系统会自动清除该安全组内所有实例入方向的连接,详细说明如下:
- 由入方向流量建立的连接,已建立的长连接将会断开。所有入方向流量立即重新建立连接,并匹配新的安全组入方向规则。
- 由出方向流量建立的连接,已建立的长连接不会断开,依旧遵循原有安全组规则。出方向流量新建立的连接,将会匹配新的安全组出方向规则。

对于已建立的长连接,流量断开后,不会立即建立新的连接,需要超过连接跟踪的老化时间后,才会新建立连接并匹配新的规则。比如,对于已建立的icmp协议长连接,当流量中断后,需要超过老化时间30s后,将会新建立连接并匹配新的规则,详细说明如下:
- 不同协议的连接跟踪老化时间不同,比如已建立连接状态的tcp协议连接老化时间是600s,icmp协议老化时间是30s。对于除tcp和icmp的其他协议,如果两个方向都收到了报文,连接老化时间是180s,如果只是单方向收到了报文,另一个方向没有收到报文,则连接老化时间是30s。
- tcp协议处于不同状态下的连接老化时间也不相同,比如tcp连接处于established(连接已建立)状态时,老化时间是600s,处于fin-wait(连接即将关闭)状态时,老化时间是30s。
- 安全组规则遵循白名单原理,当在规则中没有明确定义允许或拒绝某条流量时,安全组一律拒绝该流量流入或者流出实例。
- 在入方向中,当请求匹配上安全组中入方向规则的源地址,并且策略为“允许”时,允许该请求进入,其他请求一律拦截。因此,默认情况下您一般不用在入方向配置策略为“拒绝”的规则。
表1中的入方向规则,确保安全组内实例内网网络互通,不建议您删除或者修改该安全组规则。
- 在出方向中,表1中的出方向规则允许所有流量从安全组内实例流出,即实例可访问外部任意ip和端口。如果您删除了该规则,则安全组内的实例无法访问外部,请您谨慎操作。
表1 安全组规则说明 方向
策略
类型
协议端口
源地址/目的地址
入方向
允许
ipv4
全部
源地址:当前安全组
入方向
允许
ipv6
全部
源地址:当前安全组
出方向
允许
ipv4
全部
目的地址:0.0.0.0/0
出方向
允许
ipv6
全部
目的地址:::/0
- 在入方向中,当请求匹配上安全组中入方向规则的源地址,并且策略为“允许”时,允许该请求进入,其他请求一律拦截。因此,默认情况下您一般不用在入方向配置策略为“拒绝”的规则。
流量匹配安全组规则的顺序
- 首先,流量按照安全组的顺序进行匹配。您可以自行调整安全组顺序,安全组序号越小,表示优先级越高。
比如,安全组a的序号为1,安全组b的序号为2,安全组a的优先级高于安全组b,流量优先匹配安全组a内的入方向规则。
- 其次,流量按照安全组规则的优先级和策略进行匹配。
- 先按照安全组规则优先级匹配,优先级的数字越小,优先级越高。
比如安全组规则a的优先级为1,安全组规则b的优先级为2,安全组规则a的优先级高于安全组规则b,流量优先匹配安全组规则a。
- 安全组规则优先级相同的情况下,再按照策略匹配,拒绝策略高于允许策略。
- 先按照安全组规则优先级匹配,优先级的数字越小,优先级越高。
- 流量按照协议端口和源地址,遍历了所有安全组内的入方向规则。
- 如果成功匹配某个规则,则执行以下操作:
- 如果规则的策略是允许,则允许该流量访问安全组内实例。
- 如果规则的策略是拒绝,则拒绝该流量访问安全组内实例。
- 如果未匹配上任何规则,则拒绝该流量访问安全组内的实例。
- 如果成功匹配某个规则,则执行以下操作:

安全组配置示例
您可以在安全组内放通指定ip地址,允许指定ip地址访问安全组内实例,或者在某个安全组内放通另外一个安全组,实现不同安全组内的实例内网互通。通过安全组规则,您可以灵活控制组网内流量的走向,以确保您的网络安全,以下为您提供了典型的安全组应用示例。
- 安全组sg-a入方向规则a01允许从指定ip地址 (172.16.0.0/24)访问安全组内实例的ssh(22)端口,用于远程登录安全组内的linux云服务器。
- 安全组sg-a入方向规则a02允许安全组内的实例可使用任何协议和端口互相通信,即子网subnet-a内的ecs网络互通。
- 安全组sg-b入方向规则b01允许sg-a内的实例访问sg-b内实例的ssh(22)端口,即通过子网subnet-a的ecs可远程登录subnet-b内的ecs。
- 安全组sg-b入方向规则b02允许安全组内的实例可使用任何协议和端口互相通信,即子网subnet-b内的ecs网络互通。
- 两个安全组的出方向规则允许所有流量从安全组内实例流出。


更多安全组规则配置示例,请参见安全组配置示例。
如果您通过中间网络实例在不同子网的实例之间转发流量,比如图4中,子网subnet-a的ecs通过虚拟ip和子网subnet-b的ecs互相通信。由于存在中间网络实例,此时安全组规则的源地址选择实例所在的安全组时,无法放通中间网络实例转发的流量,源地址必须设置成中间网络实例的私有ip地址或者子网网段。
- 安全组sg-a入方向规则a01允许sg-b内的实例使用任何协议和端口访问sg-a内的实例。
- 安全组sg-b入方向规则说明如下:
- 规则b02:允许sg-a内的实例使用私有ip地址访问sg-b内实例,但是当前组网下,sg-a内的实例和sg-b内的实例通信需要经过虚拟ip,此时虚拟ip的流量无法流入sg-b内的实例,该规则不适用于当前组网。
- 规则b01:允许虚拟ip(192.168.0.21)使用任何协议和端口访问sg-b内的实例。当前组网中,您还可以将源地址设置成子网subnet-a的网段192.168.0.0/24。


更多安全组规则配置示例,请参见安全组配置示例。
- 在安全组sg-a中,规则a01允许来自sg-b内实例的流量访问sg-a内的实例,源地址为安全组sg-b。
- 在安全组sg-b中,规则b01允许来自sg-a内实例的流量访问sg-b内的实例,源地址为安全组sg-a。


更多安全组规则配置示例,请参见安全组配置示例。
安全组配置流程

序号 |
步骤 |
说明 |
操作指导 |
---|---|---|---|
1 |
创建安全组 |
创建安全组时候,您可以使用系统提供的规则。预置的部分安全组规则,详细信息请参见安全组模板说明。 |
|
2 |
配置安全组规则 |
安全组创建完成后,如果模板里面的规则不能满足业务要求,您还可以在安全组中添加新的安全组规则,或者修改已有的安全组规则。 |
|
3 |
在安全组中添加实例 |
创建实例的时候,会自动将实例加入一个安全组内,实例将会受到安全组的保护。 如果一个安全组无法满足您的要求,您可以将实例加入多个安全组。 |
安全组的使用限制
- 为了确保良好的网络性能体验,建议一个实例最多关联5个安全组。
- 建议一个安全组关联的实例数量不应超过6000个,否则会引起安全组性能下降。
- 在一个安全组中,对于入方向规则来说,源地址是安全组的规则数量 源地址是ip地址组的规则数量 端口是不连续端口号的规则数量 ≤ 120条,否则超过数量的安全组规则将不生效。当同时存在ipv4和ipv6类型的安全组规则时,两种类型的安全组规则单独计算,即ipv4规则和ipv6规则可以各有120条。
对于安全组出方向规则来说,目的地址和端口存在一样的限制。
以安全组sg-a的入方向ipv4规则为例,表3中提供了部分符合限制条件的规则供您参考。其中,当一条安全组规则同时符合多个限制时,比如规则a02即使用了不连续端口,又使用了安全组作为源地址,此时只占用一条配额。
表3 入方向安全组规则示例 规则编号
策略
类型
协议端口
源地址
规则a01
允许
ipv4
全部
当前安全组:sg-a
规则a02
允许
ipv4
tcp: 22,25,27
其他安全组:sg-b
规则a03
允许
ipv4
tcp: 80-82
ip地址组:ipgroup-a
规则a04
允许
ipv4
tcp: 22-24,25
ip地址: 192.168.0.0/16
- 如果您添加安全组规则时,使用ip地址组或者不连续端口,那么该安全组规则对不同规格云服务器的生效情况存在差异,为了避免您的安全组规则不生效,请您查看表4了解详情。
表4 安全组规则限制 安全组规则
云服务器类型
添加安全组规则时,“源地址”和“目的地址”可选择“ip地址组”
不支持的x86云服务器规格如下:- 通用计算型(s1型、c1型、c2型 )
- 内存优化型(m1型)
- 高性能计算型(h1型)
- 磁盘增强型( d1型)
- gpu加速型(g1型、g2型)
- 超大内存型(e1型、e2型、et2型)
添加安全组规则时,“协议端口”可配置为不连续端口号
不支持的x86云服务器规格如下:
- 通用计算型(s1型、c1型、c2型 )
- 内存优化型(m1型)
- 高性能计算型(h1型)
- 磁盘增强型( d1型)
- gpu加速型(g1型、g2型)
- 超大内存型(e1型、e2型、et2型)
所有鲲鹏云服务器规格不支持配置不连续端口。
如果您在鲲鹏云服务器中添加安全组规则时,使用了不连续端口号,那么除了该条规则不会生效,该规则后的其他规则也不会生效。比如:
您先配置了安全组规则a(不连续端口号22,24),再配置了下一条安全组规则b(独立端口号9096),则安全组规则a和b均不会生效。
- 当您的组网中存在以下情况时,来自elb和vpcep的流量不受网络acl和安全组规则的限制。
- elb实例的监听器开启“获取客户端ip”功能时,不受限制。
比如规则已明确拒绝来自elb实例的流量进入后端云服务器,此时该规则无法拦截来自elb的流量,流量依然会抵达后端云服务器。
- vpcep实例类型为“专业型”时,不受限制。
- elb实例的监听器开启“获取客户端ip”功能时,不受限制。
实践建议
- 请您遵循白名单原则配置安全组规则,即安全组内实例默认拒绝所有外部的访问请求,通过添加允许规则放通指定的网络流量。
- 添加安全组规则时,请遵循最小授权原则。例如,放通22端口用于远程登录云服务器时,建议仅允许指定的ip地址登录,谨慎使用0.0.0.0/0(所有ip地址)。
- 请您尽量保持单个安全组内规则的简洁,通过不同的安全组来管理不同用途的实例。如果您使用一个安全组管理您的所有业务实例,可能会导致单个安全组内的规则过于冗余复杂,增加维护管理成本。
- 您可以将实例按照用途加入到不同的安全组内。例如,当您具有面向公网提供网站访问的业务时,建议您将运行公网业务的web服务器加入到同一个安全组,此时仅需要放通对外部提供服务的特定端口,例如80、443等,默认拒绝外部其他的访问请求。同时,请避免在运行公网业务的web服务器上运行内部业务,例如mysql、redis等,建议您将内部业务部署在不需要连通公网的服务器上,并将这些服务器关联至其他安全组内。
- 对于安全策略相同的多个ip地址,您可以将其添加到一个ip地址组内统一管理,并在安全组内添加针对该ip地址组的授权规则。当ip地址发生变化时,您只需要在ip地址组内修改ip地址,那么ip地址组对应的安全组规则将会随之变更,无需逐次修改安全组内的规则,降低了安全组管理的难度,提升效率。具体方法,请参见使用ip地址组提升安全组规则管理效率。
- 请您尽量避免直接修改已运行业务的安全组规则。如果您需要修改使用中的安全组规则,建议您先克隆一个测试安全组,然后在测试安全组上进行调试,确保测试安全组内实例网络正常后,再修改使用中的安全组规则,减少对业务的影响。具体方法,请参见克隆安全组。
- 您在安全组内新添加实例,或者修改安全组的规则后,此时不需要重启实例,安全组规则会自动生效。
如果您的安全组规则配置完未生效,请参考为什么配置的安全组规则不生效?。
相关文档
意见反馈
文档内容是否对您有帮助?
如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨