《网络是怎样连接的》第五章 防火墙,缓存服务器

5.1 Web服务器的部署地点

5.1.1 在公司里部署Web服务器

服务器可以直接部署在公司网络上,并且可以从互联网直接访问,这种情况下,网络包先通过最近的POP中的路由器,接入网以及服务器端路由器之后,就直接到达了服务器

但将服务器部署在公司已经不是主流了,有两个原因
1,IP地址不足,这种方式需要为公司每个设备,都需要分配各自的公有地址,然而现在的公有地址已经不够用了

2,安全问题,从互联网传来的网络包会无节制地进入服务器,这意味着服务器在攻击者看来储于‘裸奔’的状态,这时存在大量的安全漏洞,需要部署防火墙

在这里插入图片描述

防火墙一般需要和反病毒,非法入侵检测,访问隔离等机制并用,它的作用类似于海关,只允许发往指定服务器的指定应用程序的网络包通过,屏蔽其它有风险的网络包

5.1.2 将Web服务器部署在数据中心

在这里插入图片描述
也可以将服务器部署在网络运营商的数据中心里,或者直接租用网络运营商提供的服务器

数据中心是与网络运营商核心部分NOC直接连接的,或者与运营商之间的枢纽IX直接连接,数据中心通过高速线路直接连接到互联网的核心部分,因此将服务器部署在这里可以获得很高的访问速度

数据中心不但提供安防服务器的场地,还提供各种附加服务,如服务器工作状态监控,防火墙的配置和运营,非法入侵监控等,其安全性也更高

5.2 防火墙的结构和原理

5.2.1 主流的包过滤方式

无论服务器在哪里,现在一般都会在前面部署一个防火墙,如果包无法通过防火墙,就无法到达服务器

防火墙的基本思路是只允许发往特定服务器中的特定应用程序的包通过,然后屏蔽其它的包。防火墙可分为包过滤,应用层网关,电路层网关等,最为普及的是包过滤方式

5.2.2 如何设置包过滤规则

网络包的头部包含了用于控制通信操作的控制信息,只要检查这些控制信息,就可以获得很多有用的内容

在设置包过滤规则时,首先要观察包是如何流动的,通过接收方的IP地址和发送方的IP地址,可以判断出包的起点和终点,根据接收方和发送方地址判断包的流向,设置包允许通过还是阻止它

5.2.3 通过端口号限定应用程序

为了规避风险,最好阻止除了必需服务(Web服务)以外的所有应用程序的包

当我们要限定某个应用程序时,可以在判断条件中加上TCP头部或者UDP头部中的端口号。Web服务器的端口号是80,当包的接收方的IP地址为Web服务器时,且发送端口号为80,就可以允许这些包通过

如果要允许访问除Web以外的其它应用程序,则只要将该应用程序的端口号设置到防火墙中并允许通过即可

5.2.4 通过控制位判断连接方向

光判断包的流向还不够,还需要根据访问的方向来进行判断。通过接收方IP地址,发送方IP地址,接收方端口号,发送方端口号,TCP控制位这些条件等,就可以判断出通信的起点和终点,应用程序种类和访问的方向

还有很多其它的字段可以用作判断条件,通过对这些条件进行组合,我们就可以对包进行筛选

对于采用UDP的协议(DNS查询等),UDP与TCP不同,它没有连接操作,无法像TCP一样根据控制位来判断访问方向,所以有些使用UDP协议的包可能会被防火墙拦截

5.2.5 从公司内网中访问公开区域的规则

不仅需要设计互联网和公开区域之间的包过滤规则,还需要设置公司内网和互联网之间,或者公司内网与公开区域之间的包过滤规则

5.2.6 从外部无法访问公司内网

包过滤方式的防火墙不仅可以允许或阻止网络包通过,还具备地址转换功能,因此需要进行相关的设置。

互联网和公司内网之间的包需要进行地址转换才能传输,以起点和终点为条件,根据需要设置是否需要进行地址转换,私有地址和公有地址之间的对应关系,以及端口号的对应关系都是自动管理的

5.2.7 通过防火墙

当包到达防火墙时,会根据这些规则判断是允许通过还是阻止通过,如果判断结果为阻止,那么这个包会被丢弃并记录下来,这是因为这些包常有非法入侵的痕迹

包过滤其实并不是防火墙的一种特使机制,而是应该看作在路由器的包转发基础上附加的一种功能,只不过当判断规则比较复杂时,通过路由器的命令难以维护这些规则,而且对阻止的包进行记录对于路由器来说也是比较大的负担,因此才出现了专用的硬件和软件

5.2.8 防火墙无法抵御的攻击

防火墙仅凭包的起点和终点并不能筛选出所有有风险的包。比如,Web服务器在收到含有特定数据的包时会宕机,但防火墙只关心包的起点和终点,它不会对包的内容进行检测,因此防火墙对这种情况无能为力

应对这种情况有两种方法:
1,及时修复服务器的Bug,修补安全漏洞
2,在防火墙之外部署用来检测包的内容并阻止有害包的设备或软件

5.3 负载均衡

5.3.1 性能不足时需要负载均衡

当服务器的访问量上升时,增加服务器线路的带宽是有效的,但并不是网络变快了就可以解决所有的问题,高速线路会传输大量的网络包,这会导致服务器的性能跟不上,由其是通过CGI等应用程序动态生成数据的情况下,对服务器CPU的负担更重

CGI程序服务器端HTML处理表的应用程序

为了应对这种情况,使用多台服务器来分担负载的方法更为有效,这种架构统称分布式架构,其中对于负载的分担有几种方法,最简单的就是采用多台Web服务器,减少每台服务器的访问量

需要一个机制将客户端发送的请求分配到每台服务器上,最简单的一种是通过DNS服务器进行分配。当访问服务器时,客户端需要先向DNS服务器查询服务器的IP地址,如果在DNS服务器中填写多个名称相同的记录,则每次查询时DNS按顺序返回不同的服务器IP地址。这种方式叫轮询,可以将请求平均分配到所有的服务器

但轮询也存在缺点,如果有一台服务器出现故障,此时普通的DNS服务器无法确认Web服务器是否正常工作,它还是会将宕机或故障的服务器的IP地址返回

此外,轮询也可能出现一些问题,在通过GCI等动态生成网页的情况下,有些操作需要跨越多个页面,如果这期间访问的服务器发生了变化,这个操作可能就无法完成

5.3.2 使用负载均衡器分配访问

为了避免前面出现的问题,可以用一种叫负载均衡器的设备,首先用负载均衡器的IP地址代替Web服务器的实际地址注册到DNS服务器上。客户端会认为负载均衡器是一台Web服务器,并向其发送请求,然后由负载均衡器来判断将请求转发给哪台Web服务器
在这里插入图片描述
如何判断将请求转发给哪台服务器是最为关键的,判断的条件有很多,根据操作是否跨越了多个页面,判断条件也会有所不同

如果操作没有跨越多个页面,则可以根据服务器的负载状况来进行判断。负载均衡器可以定期采集Web服务器的CPU,内存使用率,并根据这些数据来判断服务器的负载状况,也可以向Web服务器发送测试包,根据响应的时间长短来判断负载状况。但密集的去查询服务器的负载,这个查询操作本身就会增加Web服务器的负载。也有一种不去查询的方法,可以根据事先设置的服务器性能指数,按比例来分配请求

当跨越多个页面时,则不考虑Web服务器的负载,而是必须将请求发送到同一台Web服务器上,可以在发送表单数据时在里面加上用来表示关联的信息,或者对HTTP规格进行扩展,在HTTP头部加上用来判断相关性这样的信息。这样负载均衡器就可以通过这些信息做出判断,将一系列相关联请求发送到同一台Web服务器,对于不关联的请求则发到负载较低的服务器

5.4 使用缓存服务器分担负载

5.4.1 如何使用缓存服务器

除了使用多台功能相同的服务器分担负载外,还有一种方式,就是将整个系统按功能分成不同的服务器,如Web服务器,数据库服务器。缓存服务器就是一种按功能来分担负载的方法

缓存服务器就是一台通过代理机制对数据进行缓存的服务器。代理介于Web服务器和客户端之间,具有对Web服务器访问进行中转的功能。当进行中转时,它可以将Web服务器返回的数据保存在磁盘里,并可以代替Web服务器将磁盘中的数据返回给客户端,这样可以比Web服务器更快的返回数据

如果缓存了数据后,Web服务器更新了数据,那么缓存的数据就不可以用了,此外CGI程序等产生的页面数据每次都不同,这些数据也无法缓存,但总有一部分访问可以由缓存服务器直接处理,提升整体的性能,也可以通过让缓存服务器处理一部分请求,以减轻Web服务器的负担,从而缩短Web服务器的处理时间

5.4.2 缓存服务器通过更新时间管理内容

缓存服务器和负载均衡器一样,需要代替Web服务器被注册到DNS服务器中

在这里插入图片描述

5.4.3 最原始的代理-正向代理

还可以在客户端一侧部署缓存服务器,最早的代理机制就是将缓存服务器放到客户端一侧,被称为正向代理

正向代理刚出现的时候,就是用来缓存和实现防火墙。它会先接收来自客户端的请求消息,然后再转发到互联网中,这样就可以实现只允许通过必要的网络包了,如果能够使用代理的缓存,那么效果会更好

由于代理在转发过程中可以查看请求的内容,可以根据内容来判断是否允许访问,通过代理可以禁止员工访问危险的网站或与工作内容无关的网站。当设置正向代理时,浏览器会忽略网址栏的内容,直接将所有请求发送给正向代理

在这里插入图片描述

5.4.4 正向代理的改良-反向代理

使用正向代理需要在浏览器中进行设置,但浏览器的设置十分麻烦,如果设置错误,那么可能导致浏览器无法正常工作

可以将请求消息中的URI中的目录名与Web服务器进行关联,使得代理能转发一般的不包含完整网址的请求消息。前面的服务器端的缓存服务器使用的正是这种方式,称为反向代理

5.4.5 透明代理

缓存服务器还可以查看请求消息的包头部来判断转发目标,这种方法称为透明代理,透明代理集合了正向代理和反向代理的优点,是一个非常便捷的方式

正常情况下,请求消息是从浏览器直接发送到Web服务器,并不会到达透明代理,所以需要将透明代理放在请求消息从浏览器传输到Web服务器的路径中,当有消息时进行拦截

5.5 内容分发服务

5.5.1 利用内容分发服务分担负载

当缓存服务器放在服务器端上时,可以减轻服务器的负载,但无法减少网络中的流量

当缓存服务器放在客户端上时,可以减少网络中的流量,特别是当访问内容中含有大图片或视频时效果更明显。不过客户端的缓存服务器是归客户端网络运营商管理的,Web服务器的运营者无法管理它

在这里插入图片描述

Web服务器运营商和网络运营商签约,把自己的缓存服务器放在客户端的运营商,我们可以将缓存服务器部署在离用户很近的地方,同时Web服务器运营商还可以管理这些服务器

但这种方式也存在问题,对于在互联网上公开的服务器,任何地方的人都可以访问它,如果要实现这个方式,必须在所有的运营商POP中都部署缓存服务器才行,这个数量太大,不太现实

为了解决这个问题,一些专门从事相关服务的厂商由它们来部署缓存服务器,并租界给Web服务器运营者,这种服务称为内容分发服务 CDN

5.5.2 如何找到最近的缓存服务器

互联网中存在很多缓存服务器,当客户端访问服务器时,需要找到离客户端最近的一个

第一个方法是像负载均衡器一样用DNS服务器来分配访问,在DNS服务器返回Web服务器的IP地址时,对返回的内容进行一些加工,使其能够返回距离客户端最近的缓存服务器的IP地址

5.5.3 通过重定向服务器分配访问目标

HTTP规格中定义了很多头部字段,其中有一个叫做Location的字段,当Web服务器数据转移到其它服务器时可以使用这个字段。这种将客户端访问引导到另一台Web服务器的操作称为重定向,这种方法也可以将访问目标分配到最近的缓存服务器

5.5.4 缓存的更新方法会影响性能

还有一个因素会影响缓存服务器的效率,那就是缓存内容的更新方法,使用缓存时,这种方法对第一次访问是无效的,而且后面的每次访问都要向原始服务器查询数据有没有发生变化,如果遇到网络阻塞,会使响应时间恶化

要改善这一点,有一种方法是让Web服务器在原始数据发生更新时,立刻通知缓存服务器,使得缓存服务器上的数据一直保持最新状态

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值