您的位置:首页 > > 正文
发布时间:2020-04-10 16:33
具备高速缓存的HTTP代理防火墙的设计与实现

  随着WWW服务应用的逐渐普及,有效保障网络信息安全变得越来越重要。为了增强系统的安全性,当前的普遍做法是在用户和HTTP服务器之间架设防火墙,用来限制外部非法用户访问内部网络资源以及内部用户非法向外传递保密信息。防火墙通常分为包过滤防火墙和代理防火墙。包过滤防火墙的设计思想是在网络层根据IP包中含有的信息进行访问控制;代理防火墙的设计思想是在应用层针对具体协议进行控制。代理防火墙是保障网络安全的有效手段之一,但其实现方式往往会影响网络通信效率,使之成为网络通信的瓶颈。代理防火墙采用高速缓存可以提高用户请求速度,从而较好地解决这一问题。


  为了在增强安全性的同时保证通信效率,我们在RedHat Linux7.1平台上采用C语言开发了一个具备高速缓存的HTTP代理型防火墙。本文将对该防火墙的设计和实现方法进行讨论。


  1整体设计


  1.1体系结构


  本设计采用双宿主主机防火墙的体系结构,这种结构拥有两个或两个以上的网络接口,与接口相连的网络相互间在物理和逻辑上是分离的,其间的IP层通信被阻止,两网络间的通信必须通过应用层的代理服务来完成。运行代理服务软件的主机称为堡垒主机。


  堡垒主机配置两块网卡,分别用来连接内部网和外部网,对内和对外采用两个不同的IP地址。内部网上的所有计算机只能通过堡垒主机与外部相连。通过对堡垒主机操作系统RedHat Linux7.1的内核文件/etc/sysctl.conf中加入"net.ipv4.ip_forward=0",禁止了内核转发IP包的功能。IP包转发功能被禁止之后,内部网与外界的通信必须通过堡垒主机上的代理服务软件来完成,实现了内部网地址对外的屏蔽,这样能更有效地防止外部网对内部网的入侵。


  1.2工作机制


  —84—


  HTTP代理型防火墙以应用层HTTP/1.1协议为基础。


  HTTP/1.1协议的工作过程分为步:4


  ·客户建立起与服务器之间的连接;


  ·客户向服务器发出请求;


  ·服务器向客户机发送响应结果;


  ·客户机或服务器中的任一方断开连接。


  代理防火墙不允许客户机和服务器直接通信,客户机和服务器之间的所有交互都必须通过防火墙转发,代理防火墙的工作过程分为步:4(1)客户机向服务器发出的请求到达代理防火墙;(2)代理防火墙把请求转发给客户机真正需要联系的服务器;(3)服务器向代理防火墙返回响应;(4)代理防火墙把响应结果返回给客户机。


  代理防火墙作为客户机和服务器的中介,是一个极好的访问控制点,但同时也占用系统资源,降低效率。补偿办法是在代理防火墙的设计中加上对响应结果的高速缓存,这样可以提高用户的请求反应速度,缓解代理防火墙的通信瓶颈问题。


  1.3软件设计


  如图所示,代理防火墙分为个主要模块:守护进程模1 3块、代理与缓存模块、缓存清理模块。其中,守护进程监听提供HTTP代理服


  作者简介:李家欣(1978~),女,硕士生,研究方向:网络安全与通信;倪亮,硕士生;王乘,博导收稿日期:2002-03-04


  下作出不同反应:连接服务器、返回缓存内容、给用户返回


  304响应。缓存清理模块定期对缓存进行清理。


  2核心模块的开发


  2.1守护进程的开发


  守护进程的工作流程如图所示。主进程首先用2 Linux提供的socket函数创建一个TCP/IP协议的套接字,再用bind函数将其绑定到堡垒主机的IP地址以及提供HTTP代理服务的端口上,然后用listen函数将套接字转换成listen套接字,使linux内核能用套接字接收来自客户机的请求。此后守护进程将进入一个无限循环来处理客户机的请求。当客户请求到达时,守护进程调用accept接收请求,并用fork函数创建一个新的代理进程来处理响应。然后守护进程将关闭连接并等待下一个客户请求。


  2.2代理与缓存模块的开发


  2.2.1缓存文件结构


  缓存文件用来存放远端服务器返回的响应。当用户需要访问缓存中一备份的信息时,无需连接远端服务器,代理防火墙直接根据缓存文件生成响应返回给用户。缓存文件结构的设计必须要考虑到查找、保存和更新的效率。为此我们将服务器发回的每一个响应信息作为单独的文件保存,用对应的URL将其命名。由于既可以用域名也可以用IP地址来标识服务器,而IP地址和域名并不完全一一对应,设计中不区分IP地址和域名,允许两者重复。为了便于查找,创建了响应信息索引表,用来保存每个响应文件的使用信息。响应信息索引表的数据结构如下:struct CACHE_INDEX


  2.2.2缓存条件


  在代理防火墙收到客户请求时,可以通过对请求信息的分析来判断客户请求的响应是否可以被缓存;在响应到达后,也可以通过对响应信息的分析来判断该响应是否能被缓存。相对于请求信息而言的缓存条件称为条件,相对于返A回的响应信息而言的缓存条件称为条件。用户请求的响应B能被缓存的条件如下:


  ·A:请求类型为GET,且请求头中不含用来表示不可缓存的Cache-Control:no-cache或pragma:no-cache字段。


  ·B:响应为200,且请求头中不包含用来表示不可缓存的Cache-Control:no-cache或pragma:no-cache字段。


  2.2.3代理与缓存模块的工作流程


  HTTP请求和应答机制较为复杂,因此对请求与响应的分类处理就构成了代理与缓存模块的工作流程中最为复杂的一部分。图给出代理与缓存模块的工作流程图,流程中的3分类处理过程如下:


  首先,判断用户请求类型是否符合被缓存的条件。如若不能,则缓存中不可能存在与请求相符的响应对象,进程将连接用户请求的服务器,并直接将请求结果返回给用户而无需对结果缓存。若用户请求类型符合缓存条件,则进程将寻找缓存,并按以下两种不同的情况加以处理:


  (1)若进程在缓存中找到未过期的与请求相符的响应对象,则判断用户的原始请求是否为条件请求,若不是条件请求则返回缓存


  请求结果返回给用户而无需图3代理与缓存模块工作流程对结果缓存:


  1)用户请求是条件请求;2)用户请求是非条件请求,但返回响应结果表明不可缓存。对于非条件请求且返回的响应结果表明可以缓存者,则将响应结果更新到缓存。


  (下转第175页)


  —85—


  4.2优先级算法


  系统中的数据流种类很多,不能简单地将所有类型的数据流封装、传输,而要根据每种数据流的特点和系统对它们的时效性要求分别进行处理。


  系统中引入了优先级的概念,用以标识每种数据流的""发送顺序。系统信息属于重要信息,优先级定为。文字交1谈的文本信息,长度较短,在特定时间内所发出的是一段不可分割的文字,优先级定为。电子白板的绘图信息采用矢2量格式传送,数据量也不大,时效性要求高,优先级定为3。人耳的听觉对声音的连续性是十分敏感的,音频信息优先级定为。视觉对图像的连续性要求不太高,丢帧漏帧并4不会引起感官上太多的不适,视频信息优先级定为。预报5方法的数据为屏幕图像,实时性要求不高,优先级为。最6后是气象资料,要求更低,优先级为。当优先级确定后,7就可对不同级别的信息在传输中遇到冲突时加以区别对待。


  视频数据流和预报方法数据流连续性要求不太高,可以采用特殊的方法处理,当缓冲区队列满的时候,可以从队列中抛弃队列头部的旧""数据流,以便空出位置来存放新的数据流。


  发送算法如图6所示。


  图发送优先级算法6


  4.3接收数据的处理


  当网络数据到达会商系统时,会激活WinSock组件的相应事件,在该事件中先读取收到的数据流。操作系统在网络缓冲区中会将多个短的数据流合并到一个IP数据包中,所以首先要按照数据流中的数据类型及数据长度字段的指示将数据流分解成若干个独立的数据流,然后将各个数据流拆包,再按照数据类型的指示将数据流中的具体数据分别送往相应功能模块的程序中去处理,接收数据流处理流程见图。7


  图接收数据流处理流程7


  5结束语


  在远程天气会商系统开发过程中,通过设置数据流缓冲区,并引入优先级的概念来控制数据流的发送顺序,协调了系统中各功能模块为争夺网络资源而引起的冲突,充分利用了有限的网络资源。系统中采用数据流分层封装技术,降低了系统中各功能模块之间的耦合度,使系统具有良好的可扩充性和可维护性,便于课题组成员并行开发。目前课题组已在局域网上实现了天气会商系统,网络吞吐能力和时延控制达到了研制的目标。


上一篇 免费代理IP质量如何呢 下一篇 支持HTTP多路复用的代理服务器的设计与实现