思考:小云应该如何规划云上网络的安全性?
小云通过规划多个VPC实现网络隔离后,还需要考虑:
- VPC访问控制:在VPC部署业务服务器,如何保障其安全性?
- 跨VPC之间网络的打通:不同地域和不同VPC之间提供了隔离效果,那如果需要将其互联互通,应该怎么做?
- 关于第一点,如何保障VPC内业务服务器的安全性,通常有两种做法:
- 安全组:是一种实例级别的虚拟防火墙,能够控制ECS云服务器等云资源的出入站流量。安全组的入方向规则控制ECS云服务器的入站流量,出方向规则控制ECS云服务器的出站流量。阿里云上的安全组是一种有状态的防火墙,在安全组中,小云可以在入和出两个方向设置允许和拒绝规则来实现流量管控,由于安全组是有状态防火墙,小云只需要在入站方向设置允许或拒绝规则即可,例如小云只需要允许安全组入方向的TCP 协议的80端口,不需要主动允许出方向的TCP协议的 80端口,外部依旧能够访问到小云的网站,因为安全组会自动发现,出站的流量和入站的流量相关,会自动放通,这就是有状态防火墙的特点。
- 网络ACL:网络访问控制列表(ACL)是 VPC 中子网级别的虚拟防火墙,网络 ACL 与交换机必须进行关联才能对子网内的实例产生影响,实现对一个或多个子网流量的访问控制。网络ACL在入和出两个方向都可以设置允许和拒绝规则,其规则与安全组相似,入方向规则控制相关服务的入站流量,出方向规则控制相关服务的出站流量,小云可以对网络 ACL 的规则进行自主设置自定规则。网络 ACL 的规则是无状态的,设置入站规则允许某些请求后,需要同时设置相应的出站规则,否则可能会导致某些请求无法响应,必须同时设置入站和出站规则才能正常通信的情况,称为无状态流量管控。例如小云只在入方向设置了允许TCP协议的80端口通过,但是没有在出方向设置允许TCP协议的80端口通过, 此时外部将无法访问到小云的80端口。
- 关于第二点,如何打通不同VPC,将在下一小节中重点讲解。
思考:如果小云需要确保外部用户只能访问服务器的80端口,即外部用户只能访问网站,其他剩余的所有端口都无法访问,具体应该如何实现?
小云需要使用安全组或网络ACL完成专有网络VPC中的服务器端口进行访问限制。单独使用安全组或网络ACL均可帮助小云完成服务器端口访问的限制,但是为了更好的展示安全组和网络ACL的作用,本例中将同时设置它们。
如下图所示,安全组是ECS 云服务器实例级别的,需要绑定到具体的云服务器才能生效,网络ACL是子网级别的,需要绑定具体的交换机才能生效
小云通过安全组和网络ACL实现对外只开放HTTP 协议的 80端口号,具体流程如下:
- 新建并配置名为HTTP80-TEST的安全组,在入方向开放HTTP 协议的 80端口号,并拒绝其他访问;
- 新建具有公网能力的服务器,使用1步骤中创建的HTTP80-TEST的安全组,并部署一个网页用于访问权限的测试;
- 新建网络ACL,并绑定到子网,在网络ACL的入和出方向同时开放HTTP 协议的 80端口;
- 前面三个步骤过程中,会多次测试外网访问ECS 80端口,从而验证安全组和ACL是否生效。
1. 新建并配置名为HTTP80-TEST的安全组,在入方向开放HTTP 协议的 80端口号,并拒绝其他访问
- 访问专有网络VPC控制台,点击创建专有网络页面,进行如下配置后,点击确定,完成测试专有网络和交换机创建。
- 专有网络名称:VPC-HZ-1
- IPv4网段:192.168.0.0/16
- 交换机名称:VSW-HZ-1
- 交换机可用区:杭州 可用区G
- 交换机IPv4网段:192.168.1.0/24
- 访问ECS控制台的安全组管理页面,点击创建安全组按钮
- 在创建安全组页面中,进行如下配置后,点击确定,完成安全组创建。
- 安全组名称:HTTP80-TEST
- 网络:VPC-HZ-1
- 访问规则:确保入方向包含,允许源IP 0.0.0.0/0访问目的端口为HTTP(80)和SSH(22)的两条策略,删除其他条目。
2. 新建具有公网能力的服务器,使用1步骤中创建的HTTP80-TEST的安全组,并部署一个网页用于访问权限的测试
上一步中,小云已经完成了测试安全组HTTP80-TEST的创建,并且规则已经设置好,现在只需要在购买新服务器时,绑定这个安全组,即可测试安全组中的规则是否生效,需要注意的是,在新购买ECS云服务器时,至少要绑定一个安全组。
- 访问ECS控制台,购买如下配置的云服务器ECS实例,需要注意的是,VPC网络、交换机和安全组分别选用我们上面创建的资源。
实例名称和主机名 |
ecs-test |
付费类型 |
按量计费 |
地域 |
华东1(杭州) |
可用区 |
杭州可用区G |
网络 |
VPC-HZ-1 |
交换机 |
VSW-HZ-1 |
实例规格 |
突发性能实例 t5 1vCPU 2GiB内存 |
镜像 |
公共镜像CentOS 7.9 64位 |
系统盘 |
高效云盘40G |
公网IP |
分配公网IPV4地址 |
安全组 |
HTTP80-TEST |
- 部署网站,通过Workbench远程连接刚刚创建的ECS实例,部署一个网站用于安全规则的测试,登录服务器后,输入以下指令完成Apache软件的安装和配置:
yum install httpd -y echo ECS-TEST > /var/www/html/index.html systemctl enable httpd --now systemctl start httpd systemctl status httpd
- 测试网站是否可以访问,在浏览器中,输入ECS 云服务器的公网地址,可以看到网站的页面正常打开,说明安全组已经开放了80端口的访问:
3. 新建网络ACL,并绑定到子网,在网络ACL的入和出方向同时开放HTTP 协议的 80端口
- 接下来测试网络ACL的流量管控,访问网络ACL控制台,点击创建网络AC,所属专有网络选择上一步创建的专有网络VPC-HZ-1,名称为ACL-HZ-1,点击确定,完成ACL创建。
- 配置网络ACL,完成网络ACL的创建后还需要进行两个步骤的操作:关联交换机和配置入&出方向规则,需要注意的时,网络ACL是无状态的,需要同时开放入和出方向的80端口才能正常通信。
- 关联交换机,选择前面创建的交换机VSW-HZ-1,点击确定关联
- 删除默认入&出方向规则,删除入和出两个方向的默认规则,因为这两个规则的所有全部放通,小云只需要放通TCP 80即可。
- 测试网站是否可以访问,在浏览器中,输入ECS 云服务器的公网地址,虽然安全组是放行了80端口,但是网络ACL中,没有放行,这导致最终网页访问是失败的,这符合预期,后面在ACL中放行80端口,即可正常打开。
- 配置入&出方向规则,放行80端口,其中:
- 入方向规则:点击管理入方向规则,添加一条规则,规则名称为开放80端口,策略为允许,协议类型为TCP,源地址为0.0.0.0/0,目的端口范围为80/80,确认无误后,点击确定,完成添加。
- 出方向规则:点击管理出方向规则,添加一条规则,规则名称为允许出方向流量,策略为允许,协议类型为TCP,源地址为0.0.0.0/0,目的端口范围为1/65535,确认无误后,点击确定,完成添加。
提示1:这里的 0.0.0.0/0 特指任何来源,80/80是指端口范围,两个都是80,特指80这一个端口,如果是1/65535,那就是表示从1到65535的端口范围
提示2:需要注意到,出方向中源地址是指ECS等云产品本身,所以出方向只需要指定目的地址,由于用户一般是使用本机随机端口来访问WEB服务器的80端口,所以这里目的端口范围不能设置为80/80,而是1/65535,与-1/-1类似表示允许访问所有目的地址的端口。
- 测试网站是否可以访问,在浏览器中,输入ECS 云服务器的公网地址,发现已经可以正常打开页面:
经过如上测试,得出以下结论:
- 安全组是实例级别有状态的虚拟防火墙,只需要在入方向允许具体的端口即可,在云服务器ECS实例级别进行访问控制,推荐使用安全组
- 网络ACL是子网级别无状态的虚拟防火墙,需要同时在入和出两个方向允许流量才可以访问,通常适用于整个子网中,所有云资源的集中管控,范围比安全组更大,适用于大规模整个子网的整体规则管控。
安全组和网络ACL对比:
|
安全组 |
网络ACL |
级别 |
ECS等云资源实例级别管控 |
特定子网级别的流量管控 |
功能 |
支持允许规则和拒绝规则 |
支持允许规则和拒绝规则 |
是否有状态 |
有,返回数据流会被自动允许,不受任何规则影响 |
无,返回数据流必须被规则明确允许 |
何时生效 |
只有云资源绑定了安全组才会受到影响,可以为不同的实例绑定不同的安全组,实现更精细化配置 |
只要子网绑定了网络ACL,整个子网中的所有云资源都会受到影响 |
练习实验:企业级云上网络构建
https://developer.aliyun.com/adc/scenario/exp/65e54c7876324bbe9e1fb18665719179