文章首发于:
火线Zone社区(https://zone.huoxian.cn/)
最近看火线社区有好多云安全的文章,还有公众号上,学习到了好多,自己也开始学习一下,做一下记录,如果有不对的欢迎大佬指出!
VPC(Virtaul Private Cloud)
首先说一下自己的理解,VPC相当于一个局域网,相较于传统的网络,局域网下面有路由、子网等,在VPC中一样存在这些,所以我觉得这些交换机、路由、ACL就与传统网络类似。
首先我们来看一下在亚马逊AWS上对VPC的解释。
VPC的组成
我们再来看一下阿里云对于VPC的解释
Switch
首先看看常见的交换机都是用来做什么。
在阿里云中交换机叫vSwitch,可能是virtaul的意思。
可以通过创建交换机为专有网络划分一个或多个子网。同一专有网络内的不同交换机之间内网互通。云资源必须部署在交换机内,您可以将应用部署在不同可用区的交换机,提高应用的可用性。交换机不支持组播和广播。
NAT
我们常见在渗透中说的NAT,内网穿透 NAT网关可以提供公网地址转换功能,使您VPC内的ECS实例能够访问互联网和为互联网提供服务。
在NAT中还有两个名次,一个是SNAT,还有一个是DNAT。
SNAT
首先看一下阿里云官网的SNAT的架构图。
您可以通过公网NAT网关的SNAT功能,配置SNAT条目,使得VPC内无公网IP的ECS实例可以通过公网NAT网关绑定的EIP访问互联网。
DNAT
我们再来了解一下DNAT 官方解释:公网NAT网关支持DNAT功能,将公网NAT网关上的公网IP通过端口映射或IP映射两种方式映射给ECS实例使用,使ECS实例能够对外提供公网访问服务,在下面VPC创建中会演示关于DNAT的作用。
ACL
*访问控制*网络ACL是专有网络VPC中的网络访问控制功能。您可以在专有网络VPC中创建网络ACL并添加入方向和出方向规则。创建网络ACL后,您可以将网络ACL与交换机绑定,实现对交换机中ECS实例流量的访问控制。
安全组
比较常见的一个功能,我们在配置ECS的时候,可以配置入站出站的规则。
出站方向默认都是全放的(很少会改出站)
入站方向,换个比较好理解的
-
我们部署好Web网站之后需要放通80,开启了SSL,需要放通443,不然访问不了我们的网站
-
NC开启监听之后,还要在安全组中放通该端口即可
EIP
EIP全称(Elastic IP Address),中文:弹性公网IP。
弹性公网IP(Elastic IP Address,简称EIP)是可以独立购买和持有的公网IP地址资源。目前,EIP支持绑定到专有网络类型的ECS实例、专有网络类型的私网SLB实例、专有网络类型的辅助弹性网卡、NAT网关和高可用虚拟IP上。
询问AWS客服
虽然在写下这一篇文章之前,我就已经把VPC叫成局域网了,但是既然需要写给别人看,我觉得就还是确认一下,不要误人子弟首先我询问了客服:能否将VPC理解为局域网。
不得不说,AWS的客服真的很专业。
负载均衡(SLB)
负载均衡SLB(Server Load Balancer)是一种对流量进行按需分发的服务,通过将流量分发到不同的后端服务器来扩展应用系统的吞吐能力,并且可以消除系统中的单点故障,提升应用系统的可用性。
ALB:专门面向七层,提供超强的业务处理性能,例如HTTPS卸载能力。单实例每秒查询数QPS(Query Per Second)可达100万次。同时ALB提供基于内容的高级路由特性,例如基于HTTP报头、Cookie和查询字符串进行转发、重定向和重写等,是阿里云官方云原生Ingress网关。
CLB:支持TCP、UDP、HTTP和HTTPS协议,具备强大的四层处理能力,以及基础的七层处理能力。
ALB
应用型负载均衡ALB(Application Load Balancer)是阿里云推出的专门面向HTTP、HTTPS和QUIC等应用层负载场景的负载均衡服务,具备超强弹性及大规模应用层流量处理能力。ALB具备处理复杂业务路由的能力,与云原生相关服务深度集成,是阿里云官方提供的云原生Ingress网关。
CLB
传统型负载均衡CLB(Classic Load Balancer)是将访问流量根据转发策略分发到后端多台云服务器(ECS实例)的流量分发控制服务。CLB扩展了应用的服务能力,增强了应用的可用性。
这里的CLB就是传统的SLB负载均衡。
ALB与CLB的区别
首先作用的层不一样:ALB作用于七层,针对的协议都是HTTP,HTTPS ;CLB作用于四层,针对的协议主要是TCP,UDP这四层。
算法上的区别:最直观的就是,HTTP/HTTPS中会有一些请求头,例如Cookie,Session这些请求标头来粘性会话,但是在TCP协议就不会有这些HTTP标头。
常见负载均衡算法
1.Random 随机
这是最简单的一种,使用随机数来决定转发到哪台机器上。
优点:简单使用,不需要额外的配置和算法。
缺点:随机数的特点是在数据量大到一定量时才能保证均衡,所以如果请求量有限的话,可能会达不到均衡负载的要求。
2.Round Robin轮询
这个也很简单,请求到达后,依次转发,不偏不向。每个服务器的请求数量很平均。
缺点:当集群中服务器硬件配置不同、性能差别大时,无法区别对待。引出下面的算法。
3.随机轮询
所谓随机轮询,就是将随机法和轮询法结合起来,在轮询节点时,随机选择一个节点作为开始位置index,此后每次选择下一个节点来处理请求,即(index+1)%size。
这种方式只是在选择第一个节点用了随机方法,其他与轮询法无异,缺点跟轮询一样。
4.Weighted Round Robin 加权轮询
这种算法的出现就是为了解决简单轮询策略中的不足。在实际项目中,经常会遇到这样的情况。
比如有5台机器,两台新买入的性能等各方面都特别好,剩下三台老古董。这时候我们设置一个权重,让新机器接收更多的请求。物尽其用、能者多劳嘛!
这种情况下,“均衡”就比较相对了,也没必要做到百分百的平均。
Nginx的负载均衡默认算法是加权轮询算法。
5.Nginx负载均衡算法
有三个节点{a, b, c},他们的权重分别是{a=5, b=1, c=1}。发送7次请求,a会被分配5次,b会被分配1次,c会被分配1次。
一般的算法可能是:
-
轮训所有节点,找到一个最大权重节点;
-
选中的节点权重-1;
-
直到减到0,恢复该节点原始权重,继续轮询;
这样的算法看起来简单,最终效果是:{a, a, a, a, a, b, c},即前5次可能选中的都是a,这可能造成权重大的服务器造成过大压力的同时,小权重服务器还很闲。
Nginx的加权轮询算法将保持选择的平滑性,希望达到的效果可能是{a, b, a, a, c, a, a},即尽可能均匀的分摊节点,节点分配不再是连续的。
Nginx加权轮询算法
概念解释,每个节点有三个权重变量,分别是:
1) weight: 约定权重,即在配置文件或初始化时约定好的每个节点的权重。
2) effectiveWeight: 有效权重,初始化为weight。在通讯过程中发现节点异常,则-1;之后再次选取本节点,调用成功一次则+1,直达恢复到weight;此变量的作用主要是节点异常,降低其权重。
3) currentWeight: 节点当前权重,初始化为0。
观察到七次调用选中的节点顺序为{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}。
6.Weighted Random 加权随机
加权随机法跟加权轮询法类似,根据后台服务器不同的配置和负载情况,配置不同的权重,不同的是,它是按照权重来随机选取服务器的,而非顺序。
7.Least Connections 最少连接
这是最符合负载均衡算法的一个。需要记录每个应用服务器正在处理的连接数,然后将新来的请求转发到最少的那台上。
8.Latebcy-Aware
与方法6类似,该方法也是为了让性能强的机器处理更多的请求,只不过方法6使用的指标是连接数,而该方法用的请求服务器的往返延迟(RTT),动态地选择延迟最低的节点处理当前请求。该方法的计算延迟的具体实现可以用EWMA算法来实现,它使用滑动窗口来计算移动平均耗时。
Twitter的负载均衡算法基于这种思想,不过实现起来更加简单,即P2C算法。首先随机选取两个节点,在这两个节点中选择延迟低,或者连接数小的节点处理请求,这样兼顾了随机性,又兼顾了机器的性能,实现很简单。
9.Source Hashing 源地址散列
根据请求的来源IP进行hash计算,然后对应到一个服务器上。之后所有来自这个ip的请求都由同一台服务器处理。
VPC搭建与实践
登录阿里云控制台直接搜索VPC。
创建一个VPC
随后创建一个Switch
这里需要注意,在创建的时候要有ECS,不然无法创建NAT网关,此时我们去选择购买ECS。
这里需要注意一下可用区,因为如果交换机跟ECS不在同一个可用区是无法分配的。
此时我们需要去创建一个新的交换机,然后放在可用区K。
随后这里就可以正常选择了
最后需要确认一下自己的配置是否存在错误。
购买成功后,我们可以看到ECS当前是没有公网地址的。
并且我们也无法用SSH连接该服务器,只能使用阿里云控制台登录。
登录之后我们也可以发现其实当前ECS是没有网络的。
此时我们就需要去创建NAT网关。
随后等待资源创建即可
然后我们可以在SNAT条目中看到一条记录
此时我们回到ECS,发现可以通外网了
我们在一台服务器上启动NC监听,然后wget看一下服务器的出口地址,会发现就是我们配置的地址。
不过此时就有一个疑问,那么我如果再给这台机器分配一个弹性公网IP,那出口地址应该是NAT的网关地址还是弹性公网IP呢。
我们给ECS绑定一个弹性公网IP
随后我们设置一个密码就可以登录服务器了
然后我们可以看到当前的地址为绑定的弹性IP地址。
我们来看一下DNAT的作用。
首先我们首先创建一个DNAT。
并且映射ECS的80对应NAT的80端口。
然后我们登录阿里云的账户控制台直接连接服务器。
开启一个python的简易HTTP服务,然后使用另外的服务器wget 阿里云的ECS。
我们会发现根本访问不到80,因为我们没有开安全组。
然后我们再telnet就会发现通了
然后ECS也受到了请求
总结
1、SNAT
用来给服务器配置访问外网的权限
2、DNAT
用来将服务器的某个端口映射给公网
可以将VPC理解为一个相较于传统的局域网,但是传统的为物理的局域网设备,并且在本地,但是VPC在云上。
【火线Zone云安全社区群】
进群可以与技术大佬互相交流
进群有机会免费领取节假日礼品
进群可以免费观看技术分享直播
识别二维码回复【社区群】进群
【火线zone社区周激励】
2022.3.7 ~ 2022.3.13公告
【相关精选文章】
火线Zone是[火线安全平台]运营的云安全社区,内容涵盖云计算、云安全、漏洞分析、攻防等热门主题,研究讨论云安全相关技术,助力所有云上用户实现全面的安全防护。欢迎具备分享和探索精神的云上用户加入火线Zone社区,共建一个云安全优质社区!
如需转载火线Zone公众号内的文章请联系火线小助手:hxanquan(微信)
微信号
huoxian_zone
点击阅读原文,加入社区,共建一个有技术氛围的优质社区!
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论