助记提要
- 服务器部署形式和各自的特点 3种
- 包过滤的原理
- 防火墙无法抵御的攻击
- 负载均衡的作用和原理
- 缓存服务器的基本工作过程
- 正向代理、反向代理、透明代理
- 缓存服务器和内容分发服务
- 如何找到最近的缓存服务器
- 更新缓存的方式
5章 服务器端的局域网
1 Web服务器的部署
和路由器直接连接
现在很少用,一是需要给每个设备分配各自的公有地址,IP地址不够;二是这样会使互联网上传来的网络包直接进入到服务器,不安全。
通过防火墙隔离
使用防火墙屏蔽不允许的访问,降低安全风险。
部署在服务商数据中心
直接把服务器放在网络运营商的数据中心,或者租用运营商提供的服务器。
数据中心与NOC直连,因此服务器在这里会有很高的访问速度。数据中心一般在抗震的大楼,且有自主发电设备,还提供状态监控、防火墙配置、非法入侵监控等服务。
2 防火墙
防火墙可分为包过滤、应用层网关、电路层网关等方式。出于性能、价格和易用性等因素,包过滤方式是现在最为普及的方式。
包过滤依据的字段
网络包的头部包含用于控制通信操作的控制信息,这些可以作为包过滤的判断条件。
这些条件可以进行组合,将允许的访问和不允许的访问区分开。
头部类型 | 判定位置 | 含义 |
---|---|---|
MAC头部 | 发送方MAC地址 | 路由器转发包时会改写MAC地址。发送方MAC地址 表示上一个转发路由器的MAC地址 |
IP头部 | 发送方IP地址 | 发送该包的原始设备的IP地址。可以按发送设备设置规则。 |
IP头部 | 接收方IP地址 | 包的目的地IP地址。可以按包的目的地设置规则 |
IP头部 | 协议号 | TCP/IP协议未每个协议分配了编号,可以按协议类型设置规则。协议号包括:IP,0;ICMP,1;TCP。6;UDP,17;OSPF,89 |
TCP或UDP头部 | 发送方端口号 | 发送该包的程序对应的端口号。服务器程序的端口号一般是固定的,可以根据端口号确定是哪个程序发送的。客户端程序的端口号大多是随机的,很少用客户端发送的端口号设置规则。 |
TCP或UDP头部 | 接收方端口号 | 包的目的地程序对应的端口号。一般也是使用服务器的端口号设置规则。 |
TCP或UDP头部 | TCP控制位 | ACK,表示接收数据序号字段有效,用于通知发送方数据已经正确接收。 |
TCP或UDP头部 | TCP控制位 | PSH,表示发送方应用程序希望不等待发送缓冲区填充完毕,立即发送这个包。 |
TCP或UDP头部 | TCP控制位 | RST,强制断开连接,用于异常中断 |
TCP或UDP头部 | TCP控制位 | SYN,开始通信的连接操作中发送的第一个包,SYN为1,ACK为0。如果过滤掉这个包,后续的操作都会取消,整个访问都会被屏蔽。 |
TCP或UDP头部 | TCP控制位 | FIN,表示断开连接 |
TCP或UDP头部 | 分片 | 通过IP协议的分片功能拆分后的包,第二个分片会设置该字段 |
ICMP消息的内容 | ICMP消息类型 | 0,针对ping命令发送的ICMP echo消息的响应。该类型的消息和下面类型8的消息屏蔽后,ping命令就没有响应了。 |
ICMP消息的内容 | ICMP消息类型 | 8,执行ping命令时会发送ICMP echo消息。 |
ICMP消息的内容 | ICMP消息类型 | 其他,其他类型的ICMP消息屏蔽后可能导致网络故障 |
一般发送攻击前会通过ping命令查询网络中有哪些设备,屏蔽0和8,不响应ping命令,攻击者就无法获取网络中的信息了。ping命令也能用来查询设备是否在工作,屏蔽后可能让人误以为设备没有在工作。
包过滤示例
公司服务器使用防火墙隔离的方式部署,公司内网和公开区域分开。公开区域的公有地址为192.0.2.0/24。
规则是允许外网访问Web服务器,禁止Web服务器访问外网。具体设置如下表:
接收方IP | 接收方端口 | 发送方IP | 发送方端口 | TCP控制位 | 允许/阻止 |
---|---|---|---|---|---|
192.0.2.0/24 | 80 | - | - | - | 允许 |
- | - | 192.0.2.0/24 | 80 | SYN=1,ACK=0 | 阻止 |
- | - | 192.0.2.0/24 | 80 | - | 允许 |
- | - | - | - | - | 阻止 |
第一行,允许外部的包访问Web服务器上指定的程序。端口号限定程序,可以避免其他运行的不可访问程序的信息泄露到外部。
第二行,不允许Web服务器主动建立TCP连接。TCP连接需要收发3个包,第一个包的SYN为1,ACK为0。
第三行,起点为Web服务器的包设置为允许通过。Web服务器需要通知发送方数据已经正常收到,因此需要发送应答包。
外网访问服务器的时候,第一个包符合第一行条件,允许通过。第二个包是Web服务器发送的,控制位和第二行不一样,所以符合第三行,允许通过。后续的包都会符合第一行和第三行。
通过接收方和发送方IP地址,判断包的起点和终点;
通过端口号可以限定应用程序;
通过控制位判断连接的方向;
由于公司内网使用的是私有地址,因此默认是无法从外网访问内网的。防火墙具备地址转换的功能,所以才能把包传到公司内网。
实际设置时要防止公开区域和公司内网的包过滤规则产生冲突。
带有包过滤功能的路由器
包过滤的机制不是防火墙专用的机制,而是在路由器的包转发功能基础上附加的一种功能。
在过滤规则不复杂、也不需要记录日志的时候,可以使用附加了包过滤功能的路由器充当防火墙。
不过为了分析入侵者的收发,防火墙会把阻止的包记录下来。记录的操作给路由器负担太大。并且在规则较为复杂时,路由器的命令难以维护这些规则。所以防火墙一般是专用的硬件和软件。
防火墙无法抵御的攻击
防火墙根据包的起点和终点判断是否允许通过。但是如果包的内容中含有危险信息时,防火墙无法发现。
包的内容带来的问题,根源在于服务器程序中的BUG。
在BUG已知,又来不及更新到修复后软件版本时,可以在防火墙之外部署检查包内容的设备或软件。
3 负载均衡
服务器的访问量上升时,会有很多用户同时访问。提升服务器的性能带来的改善是有限的,最好的办法是增加多台服务器,把访问量分配到各个服务器上。
负载均衡是将客户端的请求分配到服务器上的机制。
通过DNS服务器分配
可以在DNS服务器填写多个名称相同的记录,这样客户端每次查询DNS服务器都会按顺序返回不同的IP地址。
这种分配方式的缺点是:
一般的DNS服务器无法确定Web服务器是否正常工作,因此仍然会返回故障服务器的地址。
对于有些跨多个页面的操作,操作期间访问的服务器变化后,就无法完成。
负载均衡器
将负载均衡器的IP地址代替Web服务器的实际地址注册到DNS服务器上,这样客户端会认为负载均衡器是一台Web服务器,并向其发送请求。收到请求后,负载均衡器会判断将请求转发给哪台Web服务器。
负载均衡器会定期采集Web服务器的CPU、内存使用率,也能向Web服务器发送测试包,从而根据数据和响应时间判断负载状况。
操作不跨页面时,负载均衡器根据Web服务器负载状况来判断。
操作跨多个页面时,请求必须发到同一台Web服务器上。
HTTP的工作方式是发送请求前建立TCP连接,等服务器发送完响应后断开连接,每一次HTTP访问都是独立的,无法判断是否相关。在使用代理机制后,无法通过IP判断发送请求的客户端是哪一个。
这种情况的解决方案之一,是在HTTP头部字段中加了判断相关性的信息。负载均衡器可以根据HTTP头部的字段做出判断,将相关的请求发送到同一台Web服务器。
4 缓存服务器
Web服务器需要检查网址和访问权限,并在页面上填充数据,最后才将页面返回给客户端。
缓存服务器可以提前将要访问的数据准备好,直接发给客户端,能比Web服务器更快地返回数据。这部分请求交给缓存服务器处理,降低了Web服务器的负载。
缓存服务器适合不需要Web服务器动态生成的数据。
4.1 缓存服务器工作过程
缓存中无数据的情况
第4步转发响应的时候,缓存服务器会在响应的头部加上via字段,告知客户端这个信息是经过缓存服务器中转的。
第4步同时会将响应数据保存到缓存中,并记录缓存时间。
一台缓存服务器对应多台Web服务器时,需要根据消息内容判断应该转发给哪台服务器。
随着缓存数据积累,用户访问数据命中缓存的几率也会提高。
命中缓存的情况
第2步会加一个If-Modified-Since头部字段,用来询问服务器本次请求的数据是否发生变化。Web服务器根据If-Modified-Since的值和页面数据的最后更新时间作比较,如果没发生变化,就不返回页面数据,而是返回一个表示数据无变化的响应。缓存服务器就将缓存的数据返回给客户端。
4.2 代理
缓存服务器是通过代理机制对数据进行缓存的服务器。
代理介于Web服务器和客户端之间,将Web服务器访问中转,并把Web服务器返回的数据保存在磁盘中,并代替Web服务器把磁盘的数据返回给客户端。
代理按照不熟的位置分为正向代理和反向代理。
正向代理
正向代理部署在客户端一侧。除了缓存之外,正向代理还能用来实现防火墙。除了包过滤之外,缓存服务器转发中可以查看请求的内容,因此也能控制公司内网允许访问的网站。
使用正向代理时,需要在浏览器设置的代理服务器一栏填写正向代理的IP地址。
浏览器发起请求时,会按照输入的网址判断目标服务器的域名,并向其发送消息,浏览器请求的URI是文件名或目录名(域名以后)。
设置正向代理后浏览器忽略网址栏的内容,直接把请求发给正向代理服务器。请求的URI是网址栏输入的完整网址(从“http:”开始到结束)。
反向代理
正向代理需要设置浏览器,这个很麻烦。
反向代理通过DNS解析引导客户端的访问,并在缓存服务器上设置转发目标,将请求消息中URI的目录名与Web服务器进行关联。反向代理可以转发不包含完整网址的消息。
服务器端的缓存服务器使用的就是反向代理。
透明代理
网络包的IP头部包含接收方的IP地址,知道了这个地址,就能知道要访问的服务器。
通过查看IP头部来确定转发目标的方式称为透明代理。
透明代理不需要像正向代理那样在浏览器设置参数,因此浏览器还是正常向Web服务器发送请求;
透明代理也不像反向代理那样在缓存服务器上设置转发目标。对DNS的设置会使透明代理本身成为访问目标,就无法判断转发目标了。
- 如何让消息到达透明代理
浏览器不会把透明代理服务器当做目标,透明代理自身也无法Web服务器
透明代理必须放在消息从浏览器传输到Web服务器的路径上,拦截经过的消息,再转发给Web服务器。如果请求消息有多条路径能到达Web服务器,这些路径上都得设置透明代理。
一般将网络设置为只有一条路可走的结构,然后在这条路上放透明代理。接入网就是这样的结构,接入网的入口可以放置透明代理。
5 内容分发服务
5.1 缓存服务器部署位置的影响
服务器端:降低Web服务器负担,无法减少互联网流量。Web服务器运营者能控制缓存服务器的数量和配置。
客户端:降低网络流量,少受网络拥塞的影响。但是Web服务器运营者无法控制缓存服务器。
互联网边缘:降低网络流量,且Web服务器运营者可以控制缓存服务器。
5.2 内容分发服务
Web服务器运营者和网络营商签约,把自己控制的缓存服务器放在客户端的运营商处。
虽然可以筛选一些主要的运营商进行签约,减少缓存服务器部署的数量,但是和运营商签约和部署这些服务器仍然很耗精力和费用,因此出现了专门从事相关服务的厂商,这种服务即内容分发服务,提供这种服务器的厂商称为CDSP。
CDSP和主要的网络供应商签约,部署很多台缓存服务器。也和Web服务器运营者签约,使缓存服务器配合Web服务器的工作。缓存服务器可以提供给多个Web服务器的运营者共享。
缓存服务器的运营工作由CDSP统一负责。
5.3 找到最近的缓存服务器的方法
使用DNS服务器分配最近的服务器
在DNS返回Web服务器IP地址时对返回的内容做一些加工。
事先从缓存服务器部署地点的路由器收集路由信息,将这些路由表集中在服务器端DNS服务器上。
客户端做出请求,先向客户端的DNS查询Web服务器的地址。客户端DNS层层询问后,找到服务器端的DNS服务器。
服务器端的DNS服务器根据各个路由器的路由表信息,得知各个路由器到达客户端DNS的路由,比较后找出距离客户端DNS最近的缓存服务器。
客户端DNS服务器一般和客户端离得较近,所以距离该DNS近的缓存服务器,和客户端的距离也近。
由于是根据客户端DNS的IP地址进行估算的,所以精度不高。
通过重定向分配访问目标
重定向是将客户端的访问引导到另一台服务器的操作。
将重定向服务器注册到Web服务器端的DNS服务器上,客户端会把请求发送到重定向服务器上。
重定向服务器也是收集了来自各个路由器的路由信息,根据这些信息找到最近的缓存服务器,然后把缓存服务器放到HTTP的Location字段中返回响应。
之后客户端会重新访问指定的缓存服务器。
重定向的缺点是增加了HTTP消息的交互次数,但是它根据客户端的IP地址估算,精度较高。
5.4 改善更新缓存的方法
第一次访问的数据需要向原始服务器请求,后续每次访问都需要向服务器询问数据是否发生变化。
如果遇到网络拥堵,响应时间就会受影响。
一种方法是让Web服务器在原始数据发生变化时,立即通知缓存服务器,使缓存服务器上一直是最新的状态。这样在第一次访问之后都能保持缓存效果。
另外,可以把页面的静态部分和动态部分分开,仅缓存内容不会发生变化的静态部分。