安全组是云上的虚拟防火墙,它包含安全组规则和安全组内的云资源(虚拟机、弹性网卡等)。用户可以配置安全组规则来允许或拒绝指定类型的网络流量通行,还可以基于安全组划定安全域,通过授权安全组访问的能力,来实现云资源之间的访问控制。
为什么需要安全组?
- 访问控制
安全组提供了一种机制来限制对云资源的访问,仅允许经过验证和授权的流量进入或离开,从而增强了网络安全。
- 隔离和分段
通过使用不同的安全组,可以在同一个云环境内对不同的服务或应用进行网络隔离,减少潜在的攻击面。
- 规则灵活性
安全组通常允许用户根据需要创建和修改规则,以适应不断变化的业务需求和安全要求,无需更改底层网络基础设施。
- 简化管理
与传统物理网络设备相比,安全组易于配置和管理,用户可以通过云服务提供商的控制面板或API快速应用安全规则。
- 成本效益
安全组是云服务的一部分,通常不需要额外的硬件或软件投入,这为用户提供了一种成本效率高的网络安全措施。
什么是安全组规则?
安全组规则是您自定义的访问控制规则,用于控制安全组内云资源的出入站流量,可以实现对云资源的访问控制和网络安全防护。安全组规则的构成通常包括以下元素:
- 规则方向:规定规则是影响入站流量(Ingress)还是出站流量(Egress)。
- 授权策略:指明是允许(Allow)还是拒绝(Deny)匹配规则的流量。
- 优先级:可能存在多个规则,优先级定义了规则被应用的顺序,通常较低的数字表示更高的优先级。
- 协议类型:指定网络协议类型,如TCP、UDP、ICMP等。
- 端口范围:定义可接受流量的端口号或端口号范围,例如80端口用于HTTP。
- 授权对象:源或目的地,可以是特定的IP地址、IP地址范围或另一个安全组。
例如,搭建对外提供Web服务的网站,需要允许访问相应服务的端口,如HTTP(80)、HTTPS(443),安全组规则的配置示例如下表所示。
规则方向 | 授权策略 | 优先级 | 协议类型 | 端口范围 | 授权对象 |
---|---|---|---|---|---|
入方向 | 允许 | 1 | 自定义TCP | 目的:80/80 | 源:0.0.0.0/0 |
入方向 | 允许 | 1 | 自定义TCP | 目的:443/443 | 源:0.0.0.0/0 |
安全组有哪些实际应用?
下面以阿里云的云服务器ECS为例,介绍安全组的一些应用案例。
- 网站提供Web服务
安全组在为网站提供Web服务中起到过滤作用,允许合法的HTTP和HTTPS流量通过,同时阻止非法或未授权的网络访问,以保护Web服务器免遭恶意攻击。
- 通过本地服务器远程连接实例
在使用本地服务器进行远程连接实例之前,需要根据连接方式允许访问相应服务的端口。例如,当通过SSH远程连接Linux实例时,需要允许访问SSH(22)端口;当通过RDP远程连接Windows实例时,需要允许访问RDP(3389)端口。
- 实现不同安全组的实例内网互通
在同一个专有网络中,如果需要在实例之间进行数据共享等操作,例如安全组A的实例需要通过FTP访问安全组B的实例中的共享文件,您可以通过授权安全组的方式实现内网互通。相比于授权单个IP地址或CIDR地址块,授权安全组能够更加便捷地实现多个实例之间的访问。您可以轻松地允许一组实例访问另一组实例,而无需逐个配置每个实例的访问权限。
- 提供数据库访问
如果您在实例上部署了数据库,并需要允许其他实例通过内网获取数据,您可以在相应的安全组规则中配置允许来自指定IP地址或IP地址范围的流量访问对应端口,从而实现其他实例通过内网获取数据库数据的需求。
- 验证网络连通性
ICMP协议被用于传递控制消息,因此在进行一些测试操作之前,需要允许基于ICMP协议的访问。例如,在客户端执行ping
命令来测试网络连通性时,就需要允许ICMP协议的访问。
- 限制实例访问外部网站
如果您需要限制实例只能访问指定网站,可以将安全组作为白名单使用,设置默认拒绝所有出方向访问,然后仅允许访问指定网站的IP。
安全组的工作原理是什么?
安全组作为云上的虚拟防火墙,在决定网络流量能否通过时,它会按照协议、端口、授权对象,以安全组规则的优先级顺序,依次匹配每条规则。如果成功匹配某条规则,将会对流量执行授权策略指定的动作,允许或拒绝流量通行。
例如,通过SSH远程访问ECS实例时,安全组会根据用户客户端地址是否符合安全组规则,决定要不要放行。
- 规则评估
当网络流量尝试进入或离开安全组关联的云资源时,安全组会根据用户配置的规则对流量进行匹配。匹配通常基于源(或目的地)IP地址、协议类型(如TCP、UDP、ICMP)和端口号,规则定义了允许或拒绝的授权策略,流量会被执行匹配到的安全组规则的授权策略,从而被允许或拒绝。
- 状态跟踪
安全组通常支持状态跟踪,这意味着如果出站流量被允许,相应的入站响应流量通常也会被允许,即使没有明确的入站规则。这种状态跟踪确保了像HTTP请求这样的通信会话可以正常进行,即使安全规则只定义了出站规则。
- 默认访问控制规则
安全组通常带有默认访问控制规则,您可以查阅产品文档默认访问控制规则来确定不同类型安全组的默认访问控制规则。
- 资源关联
安全组被关联到云资源上,并在网络接口级别应用其规则。可以将多个安全组应用于单个资源,也可以将一个安全组应用于多个资源,以实现灵活的安全管理。
使用安全组时需要考虑哪些因素?
- 规划
您可以为安全组设置名称、描述,也可以设置安全组的标签、资源组,便于进行分类运维。建议您合理设置这些信息,方便快速识别安全组的用途,在管理较多安全组时更加清晰。
- 以白名单的方式使用安全组
即默认拒绝所有访问,添加允许规则来放通指定的端口范围和授权对象。
- 添加安全组规则时遵循最小授权原则
例如,开放Linux实例的22端口用于远程登录时,建议仅允许特定的IP访问,而非所有IP(0.0.0.0/0)。
- 遵循最小权限原则
在不需要普通安全组内云资源实例之间内网互通时,将普通安全组的组内连通策略设置为组内隔离。
- 尽量保持单个安全组内规则的简洁
按照用途将规则维护在多个安全组中,并将实例关联到这些安全组。单个安全组的规则数量过多,会增加管理复杂度。
- 不同类型应用的实例加入不同的安全组,分别维护安全组规则
例如,将允许公网访问的ECS实例关联到同一个安全组,仅放通对外提供服务的端口,例如80、443等,默认拒绝其他所有访问。避免在允许公网访问的ECS实例上提供其他服务,例如MySQL、Redis等,建议将内部服务部署在不允许公网访问的实例上,并关联其他的安全组。
- 避免直接修改线上环境使用的安全组
可以先克隆一个安全组在测试环境调试,确保修改后实例流量正常,再对线上环境的安全组规则进行修改。