最近看火线社区有好多云安全的文章,还有公众号上,学习到了好多,自己也开始学习一下,做一下记录,如果有不对的欢迎大佬指出!

1、VPC(Virtaul Private Cloud)

首先说一下自己的理解,VPC相当于一个局域网,相较于传统的网络,局域网下面有路由,子网等,在VPC中一样存在这些,所以我觉得这些交换机,路由,ACL就与传统网络类似

首先我们来看一下在亚马逊Aws上对VPC的解释

image-20220317120832276

VPC的组成

image-20220317120901934

我们再来看一下阿里云对于VPC的解释

image-20220317120925800

2、Switch

首先看看常见的交换机都是用来做什么

image-20220317120938215

在阿里云中交换机叫vSwitch,可能是virtaul的意思

image-20220317121002543

可以通过创建交换机为专有网络划分一个或多个子网。同一专有网络内的不同交换机之间内网互通。云资源必须部署在交换机内,您可以将应用部署在不同可用区的交换机,提高应用的可用性。交换机不支持组播和广播。

3、NAT

我们常见在渗透中说的NAT,内网穿透 NAT网关可以提供公网地址转换功能,使您VPC内的ECS实例能够访问互联网和为互联网提供服务

image-20220317121023326

在NAT中还有两个名次,一个是SNAT,还有一个是DNAT

3.1、SNAT

首先看一下阿里云官网的SNAT的架构图

image-20220317121045408

您可以通过公网NAT网关的SNAT功能,配置SNAT条目,使得VPC内无公网IP的ECS实例可以通过公网NAT网关绑定的EIP访问互联网

3.2、DNAT

我们再来了解一下DNAT 官方解释:公网NAT网关支持DNAT功能,将公网NAT网关上的公网IP通过端口映射或IP映射两种方式映射给ECS实例使用,使ECS实例能够对外提供公网访问服务 在下面VPC创建中会演示关于DNAT的作用

4、ACL

*访问控制*网络ACL是专有网络VPC中的网络访问控制功能。您可以在专有网络VPC中创建网络ACL并添加入方向和出方向规则。创建网络ACL后,您可以将网络ACL与交换机绑定,实现对交换机中ECS实例流量的访问控制。

5、安全组

比较常见的一个功能,我们在配置ECS的时候,可以配置入站出站的规则

image-20220317121101195

出站方向默认都是全放的(很少会改出站)

image-20220317121116668

入站方向,换个比较好理解的

1、我们部署好Web网站之后需要放通80,开启了SSL,需要放通443,不然访问不了我们的网站

2、NC开启监听之后,还要在安全组中放通该端口即可

image-20220317121131557

6、EIP

EIP全称(Elastic IP Address),中文:弹性公网IP

弹性公网IP(Elastic IP Address,简称EIP)是可以独立购买和持有的公网IP地址资源。目前,EIP支持绑定到专有网络类型的ECS实例、专有网络类型的私网SLB实例、专有网络类型的辅助弹性网卡、NAT网关和高可用虚拟IP上。

7、询问AWS客服

虽然在写下这一篇文章之前,我就已经把VPC叫成局域网了,但是既然需要写给别人看,我觉得就还是确认一下,不要误人子弟 首先我询问了客服:能否将VPC理解为局域网

image-20220317121149227

image-20220317121155272

不得不说,AWS的客服真的很专业

8、负载均衡(SLB)

负载均衡SLB(Server Load Balancer)是一种对流量进行按需分发的服务,通过将流量分发到不同的后端服务器来扩展应用系统的吞吐能力,并且可以消除系统中的单点故障,提升应用系统的可用性

image-20220317123752876

  • ALB:专门面向七层,提供超强的业务处理性能,例如HTTPS卸载能力。单实例每秒查询数QPS(Query Per Second)可达100万次。同时ALB提供基于内容的高级路由特性,例如基于HTTP报头、Cookie和查询字符串进行转发、重定向和重写等,是阿里云官方云原生Ingress网关。

  • CLB:支持TCP、UDP、HTTP和HTTPS协议,具备强大的四层处理能力,以及基础的七层处理能力

8.1、ALB

应用型负载均衡ALB(Application Load Balancer)是阿里云推出的专门面向HTTP、HTTPS和QUIC等应用层负载场景的负载均衡服务,具备超强弹性及大规模应用层流量处理能力。ALB具备处理复杂业务路由的能力,与云原生相关服务深度集成,是阿里云官方提供的云原生Ingress网关。

image-20220317123836584

8.2、CLB

传统型负载均衡CLB(Classic Load Balancer)是将访问流量根据转发策略分发到后端多台云服务器(ECS实例)的流量分发控制服务。CLB扩展了应用的服务能力,增强了应用的可用性。

image-20220317123912172

这里的CLB就是传统的SLB负载均衡

8.3、ALB与CLB的区别

首先作用的层不一样
ALB作用于七层,·针对的协议都是HTTP,HTTPS
CLB作用于四层,针对的协议主要是TCP,UDP这四层
算法上的区别
最直观的就是,HTTP/HTTPS中会有一些请求头,例如Cookie,Session这些请求标头来粘性会话,但是在TCP协议就不会有这些HTTP标头

8.4、常见负载均衡算法

8.4.1、Random 随机

这是最简单的一种,使用随机数来决定转发到哪台机器上。

优点:简单使用,不需要额外的配置和算法。
缺点:随机数的特点是在数据量大到一定量时才能保证均衡,所以如果请求量有限的话,可能会达不到均衡负载的要求。

8.4.2、Round Robin轮询

这个也很简单,请求到达后,依次转发,不偏不向。每个服务器的请求数量很平均。

缺点:当集群中服务器硬件配置不同、性能差别大时,无法区别对待。引出下面的算法。

8.4.3、随机轮询

所谓随机轮询,就是将随机法和轮询法结合起来,在轮询节点时,随机选择一个节点作为开始位置index,此后每次选择下一个节点来处理请求,即(index+1)%size。
这种方式只是在选择第一个节点用了随机方法,其他与轮询法无异,缺点跟轮询一样。

8.4.4、Weighted Round Robin 加权轮询

这种算法的出现就是为了解决简单轮询策略中的不足。在实际项目中,经常会遇到这样的情况。

比如有5台机器,两台新买入的性能等各方面都特别好,剩下三台老古董。这时候我们设置一个权重,让新机器接收更多的请求。物尽其用、能者多劳嘛!

这种情况下,“均衡“就比较相对了,也没必要做到百分百的平均。

Nginx的负载均衡默认算法是加权轮询算法。

8.4.5、Nginx负载均衡算法

有三个节点{a, b, c},他们的权重分别是{a=5, b=1, c=1}。发送7次请求,a会被分配5次,b会被分配1次,c会被分配1次。
一般的算法可能是

  • 1、轮训所有节点,找到一个最大权重节点;
  • 2、选中的节点权重-1;
  • 3、直到减到0,恢复该节点原始权重,继续轮询;
    这样的算法看起来简单,最终效果是:{a, a, a, a, a, b, c},即前5次可能选中的都是a,这可能造成权重大的服务器造成过大压力的同时,小权重服务器还很闲。
    Nginx的加权轮询算法将保持选择的平滑性,希望达到的效果可能是{a, b, a, a, c, a, a},即尽可能均匀的分摊节点,节点分配不再是连续的。

Nginx加权轮询算法
1、概念解释,每个节点有三个权重变量,分别是:

  • (1) weight: 约定权重,即在配置文件或初始化时约定好的每个节点的权重。
  • (2) effectiveWeight: 有效权重,初始化为weight。 在通讯过程中发现节点异常,则-1; 之后再次选取本节点,调用成功一次则+1,直达恢复到weight; 此变量的作用主要是节点异常,降低其权重。
  • (3) currentWeight: 节点当前权重,初始化为0。

image-20220317124120654

观察到七次调用选中的节点顺序为{a, b, a, c, a, b, a},a节点选中4次,b节点选中2次,c节点选中1次,算法保持了currentWeight值从初始值{c=0,b=0,a=0}到7次调用后又回到{c=0,b=0,a=0}。

8.4.6、Weighted Random 加权随机

加权随机法跟加权轮询法类似,根据后台服务器不同的配置和负载情况,配置不同的权重,不同的是,它是按照权重来随机选取服务器的,而非顺序。

8.4.7、Least Connections 最少连接

这是最符合负载均衡算法的一个。需要记录每个应用服务器正在处理的连接数,然后将新来的请求转发到最少的那台上。

8.4.8、Latebcy-Aware

与方法6类似,该方法也是为了让性能强的机器处理更多的请求,只不过方法6使用的指标是连接数,而该方法用的请求服务器的往返延迟(RTT),动态地选择延迟最低的节点处理当前请求。该方法的计算延迟的具体实现可以用EWMA算法来实现,它使用滑动窗口来计算移动平均耗时。

Twitter的负载均衡算法基于这种思想,不过实现起来更加简单,即P2C算法。首先随机选取两个节点,在这两个节点中选择延迟低,或者连接数小的节点处理请求,这样兼顾了随机性,又兼顾了机器的性能,实现很简单。

8.4.9、Source Hashing 源地址散列

根据请求的来源ip进行hash计算,然后对应到一个服务器上。之后所有来自这个ip的请求都由同一台服务器处理。

二、VPC搭建与实践

登录阿里云控制台直接搜索VPC

image-20220317121232543

创建一个VPC

image-20220317121314731

随后创建一个Switch

image-20220317121330944

这里需要注意,在创建的时候要有ECS,不然无法创建NAT网关,此时我们去选择购买ECS
这里需要注意一下可用区,因为如果交换机跟ECS不在同一个可用区是无法分配的

image-20220317121352711

此时我们需要去创建一个新的交换机,然后放在可用区K

image-20220317121413089

image-20220317121431565

随后这里就可以正常选择了

image-20220317121503391

最后需要确认一下自己的配置是否存在错误
购买成功后,我们可以看到ECS当前是没有公网地址的
image-20220317121534757
并且我们也无法用SSH连接该服务器,只能使用阿里云控制台登录
img
登录之后我们也可以发现其实当前ECS是没有网络的
此时我们就需要去创建NAT网关

img

image-20220317121558224

image-20220317121610187

随后等待资源创建即可
img

img

然后我们可以在SNAT条目中看到一条记录

image-20220317121658818

此时我们回到ECS,发现可以通外网了

image-20220317121717983

我们在一台服务器上启动NC监听,然后wget看一下服务器的出口地址,会发现就是我们配置的地址

不过此时就有一个疑问,那么我如果再给这台机器分配一个弹性公网IP,那出口地址应该是NAT的网关地址还是弹性公网IP呢

image-20220317121744632

我们给ECS绑定一个弹性公网IP
img
img

img

随后我们设置一个密码就可以登录服务器了

image-20220317122058456

image-20220317122113027

然后我们可以看到当前的地址为绑定的弹性IP地址

image-20220317122129171

我们来看一下DNAT的作用

首先我们首先创建一个DNAT

image-20220317122228316

并且映射ECS的80对应NAT的80端口

image-20220317122305718

然后我们登录阿里云的账户控制台直接连接服务器

image-20220317122332313

开启一个python的简易HTTP服务,然后使用另外的服务器wget 阿里云的ECS

image-20220317122342741

我们会发现根本访问不到80,因为我们没有开安全组

image-20220317122402621

然后我们再telnet就会发现通了

image-20220317122429988

然后ECS也受到了请求

image-20220317122444224

三、总结

  • 1、SNAT
  • - 用来给服务器配置访问外网的权限
  • 2、DNAT
  • - 用来将服务器的某个端口映射给公网
  • 可以将VPC理解为一个相较于传统的局域网,但是传统的为物理的局域网设备,并且在本地,但是VPC在云上
说点什么吧...