本章重点
- 防火墙的地位作用以及现代主流的服务器部署方式。
- 缓存服务器的作用以及部署方式。
- 三种代理方式以及区别。
- 内容分发服务是什么?缓存服务器不同部署方式的影响。
防火墙和网络访问
如果服务器不设置任何防护并且裸奔,很大概率受到网络攻击,现在公司基本都会使用防火墙+服务器的部署方式。还有一种是直接买服务器供应商也就是常见的上云,直接让专业的三方服务器管理进行防护。
防护网络攻击的手段目前主流的方式有三种,其中被使用最多也最有效的是包过滤。
第一种方式为包过滤,包过滤非常简单,因为在网络包的头部包含了网络请求的所有信息,通过接收方 IP 地 址和发送方 IP 地址,我们可以判断出包的起点和终点。因为请求的终点是可以确定的,也就是WEB服务器,所以这之间加入防火墙来隔离异常请求。
第二种方式是使用端口的方式进行限制,防火墙控制某个端口的请求网络是否可以来放行不同IP进入不同端口的权限。
第三种是TCP层面的防护,TCP 在执行连接操作时需要收发 3 个包,第一个包通常使用其他端口,可以判断一定是在 Web 服务器 程序中特别设置过的,因此只要按照服务器的设置来调整防火墙设置即可,通常这个包中 TCP 控制位中 SYN 为 1,而 ACK 为 0。
其他的包中这些值都不同, 因 此只要按照这个规则就能够过滤到 TCP 连接的第一个包。因为WEB服务器发往互联网被阻断了,所以这样就实现了拦截,从反方向来看,第一个包是发往WEB服务器的,返回时从WEB返回的,所以互联网访问WE B是没有问题的。
最后这样就实现了“可进不可出”的效果,根据第三章讨论的地址转换的工作原理,当使用地址转换时,默认状态下是无法从互联网访问公司内网的,因此我们不需要再设置一条包过滤规 则来阻止从互联网访问公司内网。
最后需要说明包拦截过滤并不是防火墙特有的功能,而是路由器的包转发功能基础上附加的一种功能。
对于防火墙这种机制是典型的“攘外但是不能安内”的存在,意思是说虽然对外的敌人是拦截的,但是出现了防火墙无法防御的内鬼是解决不了的,所以针对防火墙无法处理的问题,又引申出几种处理方式:
- 第一种是修复应用程序的BUG,这些BUG通常是技术人员在开发过程中没有考虑到的系统漏洞问题,这种问题是可以通过人为手段快速修复的 。
- 第二种是用加一层的绝招,对于异常流量进行拦截,比如最为经典的DDos攻击,使用自身的防火墙显然是不行的,必须有外部监控防护服务器进行保护。
负载均衡
单机的负载均衡是没有意义的伪负载均衡,下面讨论的都所有情况都是在多物理或者多主机映射的虚拟机的情况进行介绍。
负载均衡通常会使用缓存服务器,缓存服务器是一台通过代理机制对数据进行缓存的服务器。
缓存服务器位于web服务器和客户端之间具备对于WEB的中转功能,主要工作非常简单就是把WEB服务器返回的数据缓存在磁盘中序列化存储,目的是提高WEB服务器的响应速度。
缓存服务器最大的问题是服务器更细数据之后缓存可能还没同步而看到旧数据,为此缓存提供了缓存最大的保存时间以及用户访问隔离的特性,简单理解就是针对不同的客户端看到的内容是不同的,不过从服务器的角度看与之交互的是缓存服务器。
判断什么时候需要直接返回服务器数据而不是缓存数据,一种简单的方案是检查客户端的网络报文信息变动,并且自己在返回的时候也要告知自己是缓存还是服务器数据。
最后缓存的最大问题是缓存命中率的问题,但是此问题不在本章科普范围之内不做过多介绍。
代理处理
正向代理:正向代理刚刚出现的时候,其目的之一就是缓存,这个目的和服务器 端的缓存服务器相同。当设置了 正向代理时,浏览器会忽略网址栏的内容,直接将所有请求发送给正向代 理。请求消息的内容也会有一些不同。
正向代理是最为简单直观的代理方式,具备有下面的特点:
1、访问内部节点:通常使用跳板作为进入内网的工具。
2、加快访问速度:代理服务器可以缓存内网资源,用户请求已缓存资源时,直接发送给用户,比如国内阿里云的MAVEN仓库。
3、访问控制:代理服务器可以设置访问权限,控制外部主机对内网资源的访问。简单的权限控制防止外部访问内部网络。
一些好用的代理工具:
1.reDuh源码github.com/sensepost/r…
2.reGeorg源码github.com/sensepost/r…
3.tunna 源码 github.com/SECFORCE/Tu…
反向代理
正好与正向代理相反,对于客户端而言代理服务器就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端。
反向代理服务器的作用:
集群式部署实现负载均衡,CDN技术(构建在数据网络上的一种分布式的内容分发网),前端服务器,Nginx(异步框架的网页服务器)等。
1、用户访问web服务时,并不知道访问的是代理服务器,代理服务器就是web服务器。
2、加快访问速度,和正向代理一样可以缓存内网数据。
3、实现负载均衡,降低单个服务器的负担,提高整体资源的利用率。
透明代理
意思是客户端根本不需要知道有代理服务器的存在,它修改你的请求报文,并会传送真实IP。注意加密的透明代理则是属于匿名代理,意思是不用设置使用代理了。对于整个请求来说是无感知的。也因为是无感知的,所以透明代理不能和反向代理兼容。
透明代理的作用:
1、实践例子为当下很多公司使用的行为管理软件。
2、客户端访问web并不知道是通过代理服务器访问的。
3、防火墙设置透明代理,当PC让代理服务器请求web页面时,代理服务器返回页面数据。
内容分发服务
缓存服务器部署在不同的地方,其效果会完全不一样。关于部署的不同方式可以直接看下面的图,这里主要记录第三种部署方式的利弊。
第三种部署方式是和网络运营商签约的方式缓存服务器就近部署(类似CDN),当然这样的开销显然很大,所以在此之上也有中间商插入专门干这些事情,这些运营商被叫做CDSP( Content Delivery Service Provider,内容分发服务运营商)。
这些运营商会和主要的互联网供应商签约,并部署很多台缓存服务器,缓存服务器可以缓存多个网站的数据,因此 CDSP 的缓存服务器就可 以提供给多个 Web 服务器的运营者共享。
如何让客户端找最近的服务器
答案是是像负载均衡一样用 DNS 服务器来分配访问,对于DNS向Web返回IP的同时返回一些额外的信息。
而对于如何估算出客户端和就近服务器的距离,可以通过把所有的路由放到路由表中,可以通过路由次数的方式判断距离,虽然不一定完全一致,但是可以以较大的精度确定位置。
其他的办法是通过重定向的方式查找最近的缓存服务器,重定向服务器通过收集了来自各个路由器的路由信息,并根据这些信息找到最近 的缓存服务器。
除了收集路由信息,重定向也可以返回一个通过网络包往返时间估算到缓存服务器的距离的脚本, 通过在客户端运行脚本来找到最优的缓存服务器。
缓存更新的影响
缓存更新会影响缓存服务器的效率,所以更新方法非常重要。
比较常见的更新方式是每次原始服务器更新就立刻通知缓存服务器,让其一直保持最新状态,这个功能的执行者就是内容分发服务。
除了编写静态页面之外,还以一种方式是选择不保存页面而是将网页的动态内容和静态内容分离,比如图片服务器、文件服务器等等。
总结
这一章算是比较科普向的一章,其实也算是可看可不看的类型,个人认为重点是代理处理的部分,了解三种代理方式。
而负载均衡的内容则需要深入学习Nginx的相关内容,本章讲述的内容有些太浅了。
总之是轻松加愉快的一章内容。