如何配置安全组的入网规则配置安全组教程
在云端安全组提供类似虚拟防火墙功能,用于设置单个或多个 ECS 实例的网络访问控制,是重要的安全隔离手段。创建 ECS 实例时,您必须选择一个安全组。您还可以添加安全组规则,对某个安全组下的所有 ECS 实例的出方向和入方向进行网络控制。
本文主要介绍如何配置安全组的入网规则。
安全组相关的信息
在配置安全组的入网规则之前,您应已经了解以下安全组相关的信息:
安全组实践的基本建议
在开始安全组的实践之前,下面有一些基本的建议:
- 最重要的规则:安全组应作为白名单使用。
- 开放应用出入规则时应遵循“最小授权”原则,例如,您可以选择开放具体的端口(如 80 端口)。
- 不应使用一个安全组管理所有应用,因为不同的分层一定有不同的需求。
- 对于分布式应用来说,不同的应用类型应该使用不同的安全组,例如,您应对 Web、Service、Database、Cache 层使用不同的安全组,暴露不同的出入规则和权限。
- 没有必要为每个实例单独设置一个安全组,控制管理成本。
- 优先考虑 VPC 网络。
- 不需要公网访问的资源不应提供公网 IP。
- 尽可能保持单个安全组的规则简洁。因为一个实例最多可以加入 5 个安全组,一个安全组最多可以包括 100 个安全组规则,所以一个实例可能同时应用数百条安全组规则。您可以聚合所有分配的安全规则以判断是否允许流入或留出,但是,如果单个安全组规则很复杂,就会增加管理的复杂度。所以,应尽可能地保持单个安全组的规则简洁。
- [backcolor=transparent]调整线上的安全组的出入规则是比较危险的动作。如果您无法确定,不应随意更新安全组出入规则的设置。阿里云的控制台提供了克隆安全组和安全组规则的功能。如果您想要修改线上的安全组和规则,您应先克隆一个安全组,再在克隆的安全组上进行调试,从而避免直接影响线上应用。
设置安全组的入网规则
以下是安全组的入网规则的实践建议。
不要使用 0.0.0.0/0 的入网规则
允许全部入网访问是经常犯的错误。使用 0.0.0.0/0 意味着所有的端口都对外暴露了访问权限。这是非常不安全的。正确的做法是,先拒绝所有的端口对外开放。安全组应该是白名单访问。例如,如果您需要暴露 Web 服务,默认情况下可以只开放 80、8080 和 443 之类的常用TCP端口,其它的端口都应关闭。
- [backcolor=transparent] [backcolor=transparent]{[backcolor=transparent] [backcolor=transparent]"IpProtocol"[backcolor=transparent] [backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"tcp"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"FromPort"[backcolor=transparent] [backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"80"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"ToPort"[backcolor=transparent] [backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"80"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"SourceCidrIp"[backcolor=transparent] [backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"0.0.0.0/0"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"Policy"[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"accept"[backcolor=transparent]}[backcolor=transparent] [backcolor=transparent],
- [backcolor=transparent] [backcolor=transparent]{[backcolor=transparent] [backcolor=transparent]"IpProtocol"[backcolor=transparent] [backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"tcp"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"FromPort"[backcolor=transparent] [backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"8080"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"ToPort"[backcolor=transparent] [backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"8080"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"SourceCidrIp"[backcolor=transparent] [backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"0.0.0.0/0"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"Policy"[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"accept"[backcolor=transparent]}[backcolor=transparent] [backcolor=transparent],
- [backcolor=transparent] [backcolor=transparent]{[backcolor=transparent] [backcolor=transparent]"IpProtocol"[backcolor=transparent] [backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"tcp"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"FromPort"[backcolor=transparent] [backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"443"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"ToPort"[backcolor=transparent] [backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"443"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"SourceCidrIp"[backcolor=transparent] [backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"0.0.0.0/0"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"Policy"[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"accept"[backcolor=transparent]}[backcolor=transparent] [backcolor=transparent],
关闭不需要的入网规则
如果您当前使用的入规则已经包含了 0.0.0.0/0,您需要重新审视自己的应用需要对外暴露的端口和服务。如果确定不想让某些端口直接对外提供服务,您可以加一条拒绝的规则。比如,如果您的服务器上安装了 MySQL 数据库服务,默认情况下您不应该将 3306 端口暴露到公网,此时,您可以添加一条拒绝规则,如下所示,并将其优先级设为100,即优先级最低。
- [backcolor=transparent] [backcolor=transparent]{[backcolor=transparent] [backcolor=transparent]"IpProtocol"[backcolor=transparent] [backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"tcp"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"FromPort"[backcolor=transparent] [backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"3306"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"ToPort"[backcolor=transparent] [backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"3306"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"SourceCidrIp"[backcolor=transparent] [backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"0.0.0.0/0"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"Policy"[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"drop"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]Priority[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]100[backcolor=transparent]}[backcolor=transparent] [backcolor=transparent],
上面的调整会导致所有的端口都不能访问 3306 端口,极有可能会阻止您正常的业务需求。此时,您可以通过授权另外一个安全组的资源进行入规则访问。
授权另外一个安全组入网访问
不同的安全组按照最小原则开放相应的出入规则。对于不同的应用分层应该使用不同的安全组,不同的安全组应有相应的出入规则。
例如,如果是分布式应用,您会区分不同的安全组,但是,不同的安全组可能网络不通,此时您不应该直接授权 IP 或者 CIDR 网段,而是直接授权另外一个安全组 ID 的所有的资源都可以直接访问。比如,您的应用对 Web、Database 分别创建了不同的安全组:sg-web 和 sg-database。在sg-database 中,您可以添加如下规则,授权所有的 sg-web 安全组的资源访问您的 3306 端口。
- [backcolor=transparent] [backcolor=transparent]{[backcolor=transparent] [backcolor=transparent]"IpProtocol"[backcolor=transparent] [backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"tcp"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"FromPort"[backcolor=transparent] [backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"3306"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"ToPort"[backcolor=transparent] [backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"3306"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"SourceGroupId"[backcolor=transparent] [backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"sg-web"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"Policy"[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"accept"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]Priority[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]2[backcolor=transparent]}[backcolor=transparent] [backcolor=transparent],
授权另外一个 CIDR 可以入网访问
经典网络中,因为网段不太可控,建议您使用安全组 ID 来授信入网规则。
VPC 网络中,您可以自己通过不同的 VSwitch 设置不同的 IP 域,规划 IP 地址。所以,在 VPC 网络中,您可以默认拒绝所有的访问,再授信自己的专有网络的网段访问,直接授信可以相信的 CIDR 网段。
- [backcolor=transparent] [backcolor=transparent]{[backcolor=transparent] [backcolor=transparent]"IpProtocol"[backcolor=transparent] [backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"icmp"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"FromPort"[backcolor=transparent] [backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"-1"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"ToPort"[backcolor=transparent] [backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"-1"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"SourceCidrIp"[backcolor=transparent] [backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"10.0.0.0/24"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]Priority[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]2[backcolor=transparent]}[backcolor=transparent] [backcolor=transparent],
- [backcolor=transparent] [backcolor=transparent]{[backcolor=transparent] [backcolor=transparent]"IpProtocol"[backcolor=transparent] [backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"tcp"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"FromPort"[backcolor=transparent] [backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"0"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"ToPort"[backcolor=transparent] [backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"65535"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"SourceCidrIp"[backcolor=transparent] [backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"10.0.0.0/24"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]Priority[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]2[backcolor=transparent]}[backcolor=transparent] [backcolor=transparent],
- [backcolor=transparent] [backcolor=transparent]{[backcolor=transparent] [backcolor=transparent]"IpProtocol"[backcolor=transparent] [backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"udp"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"FromPort"[backcolor=transparent] [backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"0"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"ToPort"[backcolor=transparent] [backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"65535"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"SourceCidrIp"[backcolor=transparent] [backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"10.0.0.0/24"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]Priority[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]2[backcolor=transparent]}[backcolor=transparent] [backcolor=transparent],
变更安全组规则步骤和说明
变更安全组规则可能会影响您的实例间的网络通信。为了保证必要的网络通信不受影响,您应先尝试以下方法放行必要的实例,再执行安全组策略收紧变更。
[backcolor=transparent]注意:执行收紧变更后,应观察一段时间,确认业务应用无异常后再执行其它必要的变更。
- 新建一个安全组,将需要互通访问的实例加入这个安全组,再执行变更操作。
- 如果授权类型为 [backcolor=transparent]安全组访问,则将需要互通访问的对端实例所绑定的安全组 ID 添加为授权对象;
- 如果授权类型为 [backcolor=transparent]地址段访问,则将需要互通访问的对端实例内网 IP 添加为授权对象。
具体操作指引请参见 经典网络内网实例互通设置方法。