吴志军,陈 焕,雷 缙
(中国民航大学电子信息与自动化学院,天津 300300)
广域信息管理系统(SWIM,system wide information management)是民航领域航班协同决策的基础,为中国航班的协同管理与调度提供了面向民航全系统的信息平台[1]。面对快速增长的民航运输周转量和日益密集的航班飞行流量,SWIM增强了航班协同运行控制能力,彻底改变了航空公司、机场部门和空管局之间传统点到点的通信方式,实现了信息实时共享[2];SWIM是通过SOA(service oriented architecture)架构实现的,其重点是面向服务,即完成服务的封装和调用,服务之间可通过标准化接口相互调用。近年互联网技术飞速发展,Web技术凭借其标准化和通用性的优势被广泛应用于各行各业。SWIM各参与方之间的通信就是依靠Web服务技术,采用XML描述的软件程序,可编程,通过Web服务描述语言(WSDL,Web services description language)描述服务,促进了不同平台、不同操作系统计算机之间的互操作性[3]。然而,由于HTTP协议安全机制的缺乏和Web应用中存在的漏洞[4],Web技术的安全形势并不乐观。Web的攻击方式习惯上被分为SQL注入、XSS跨站攻击、溢出攻击、文件包含、信息泄露、拒绝服务、恶意上传等[5],SWIM信息交换过程中也存在这样的风险,由此可见,保障SWIM的通信安全十分重要,因此针对SWIM设计Web防火墙实现各客户端之间的可靠信息交换具有重要意义。
为研究SWIM服务的具体实现,文献[1]结合中国现有民航系统,分析并设计了SWIM信息交换系统,各客户端可利用这种方式实现数据交换,促进下一步SWIM基础设施的部署和安全策略的制定;为保障SWIM的通信安全,文献[2]提出在SWIM网络模型中添加QoS服务,保证交换信息的可靠性和实时性;为结合现有技术手段研究SWIM,文献[6]利用云计算技术搭建的云服务平台给SWIM的服务管理平台的设计提供了借鉴,通过研究得出,分布式节点的部署方式适合SWIM服务管理平台;为将Web防火墙技术应用于SWIM各客户端之间的安全通信,采用文献[7]中提出的防火墙功能模块的实现形式,通过不同功能模块之间的合作,最终保障通信安全。
整个项目的主要工作是SWIM Web防火墙在实现流量控制功能和负载均衡功能的基础上完成了内容过滤,在分析测试总体环境后,详细讨论了SWIM Web防火墙的流程设计,编码实现了测试脚本的基本内容,在此基础上结合相关测试技术,组织实施了SWIM Web软件防火墙的功能测试和性能测试,并分析了最终的测试结果。将SWIM Web订阅/发布服务作为研究对象,针对服务请求的高并发特征,利用流量控制算法、负载均衡算法和关键字匹配算法,完成了SWIM Web防火墙主要功能模块的设计,对中国保障SWIM安全通信建设具有一定的参考意义。
SWIM服务管理中心的定位是应用服务器的管理平台,形式上更加类似于中间件,设计目标是将管理与服务解耦合[8]。SWIM服务管理中心是基于组件化的分布式服务平台,由SWIM服务管理节点和服务器池构成,服务节点通过实现一些基本的模块而形成管理框架,管理服务器池为用户提供开放接口进行平台的扩展[3]。面对大量的资源服务请求,SWIM服务管理中心可以采用云计算技术实现,作为独立的第三方平台实现服务的发布客户端和订阅客户端之间的数据交换。其中,SWIM服务管理节点包含内核层和功能模块两部分,功能模块可以实现资源管理、通信和路由的功能[9]。
1)资源管理模块
SWIM资源管理模块基于树层次结构类型,对节点和服务器两种资源进行管理,服务器池按照SWIM Web服务处理方式的不同分为两类:请求/响应服务器域和订阅/发布服务器域。资源管理模块中定义了4个管理实体用于组织和管理资源:全局资源管理、动态资源管理、用户资源管理、服务器域资源管理。此外,存在1个资源目录用于存储SWIM服务管理中心所有的资源信息。全局资源管理负责管理平台中的所有资源,包括动态资源和非动态资源,动态资源是SWIM参与成员在服务节点进行实时交换的气象服务请求、航班服务请求、航线服务请求,而非动态资源是空闲的备份服务节点。资源管理模块结构层次如图1所示。
图1 资源管理模块结构层次Fig.1 Structure level of resource management module
2)通信和路由模块
通信模块是SWIM服务管理中心实现的关键技术,SWIM Web订阅/发布服务的实现涉及到大量的消息通信。路由模块与服务器的通信用于获取服务器的实时状态,每个SWIM服务管理节点都有1个路由模块,负责转发应用请求到目的服务器。路由模块可以代理应用请求和同步更新所有节点的路由信息,对于每个到达SWIM服务管理中心的订阅/发布请求,将会被随机送达1个服务节点,任何1个服务节点都可将该请求转发到响应该请求的服务器。
SWIM服务管理中心作为分布式平台,服务发布者将开发的服务发布至SWIM服务管理中心,服务订阅者通过平台提供的公共访问地址发送订阅请求以获取服务[6]。每个服务管理节点的运行都需要资源管理模块、通信模块和路由模块。SWIM Web订阅/发布服务涉及3个角色:SWIM服务管理中心、服务发布者(发布客户端)、服务订阅者(订阅客户端)。SWIM服务管理中心场景设计图,如图2所示。其中,AS代表具有特定功能的专用服务器。
SWIM Web防火墙的设计目标是在实施流量控制和负载均衡的基础上,对进入SWIM服务管理中心的订阅/发布服务实现内容过滤[7]。然后,服务发布客户端在Web订阅/发布服务器中将有状态的资源发布为主题,利用Web服务技术实现状态资源共享。Web防火墙针对HTTP/HTTPS协议设置并执行一系列的安全策略,防御应用层的攻击,使得恶意数据上传的风险大大降低,可有效提高Web服务的可用性,保护SWIM Web 客户端[10]。
SWIM Web防火墙系统架构由核心引擎和管理模块构成。核心引擎是Web防火墙的关键部分,用于处理所有输入、输出的数据流,所有发送给应用服务器的消息、数据都会被截取并进行有效过滤。防火墙总体架构如图3所示。
图2 SWIM服务管理中心分布式平台Fig.2 Distributed platform of SWIM service management center
图3 SWIM Web防火墙总体架构Fig.3 Overall architecture of SWIM Web firewall
当有请求访问SWIM服务管理中心,利用网络设备将请求转发到SWIM服务管理节点。选择节点后,进入SWIM Web防火墙。SWIM Web防火墙的流量控制模块首先实现服务分类,统计该类服务请求的流量资源消耗总和,根据设置上限做出判断,从而限制各类服务的访问流量,解决某些恶意请求持续发送占用服务器资源的问题。流量控制模块的控制策略基于以下假设:当超过限定的资源消耗量时,采取限制或者丢弃服务请求的措施。
任何对SWIM服务管理中心服务器的访问都会经过SWIM Web防火墙,不同节点的SWIM Web防火墙的流量控制模块相互协调,呈现出集中式流量控制功能,使用分布式的队列机制来限制不同服务的请求流量。针对订阅/发布服务,在进行流量控制时,是对服务中的气象、航线、航班资源各维持一个队列,同时限制每个订阅客户端的订阅请求速率和每个发布客户端的发布请求速率。流量控制模块中,对于队列中的每类请求,保存着1个统计表,统计每个服务管理节点流经SWIM Web防火墙的各种服务的局部流量。表格形式非常简单,采用哈希映射实现,哈希映射的关键是每种资源服务的ID,哈希值是在一定时间间隔内的该类请求的数量。每个订阅/发布请求的命运不仅由节点本地的SWIM Web防火墙的流量控制模块来决定,还必须通过该类订阅/发布请求流经所有节点SWIM Web防火墙的流量控制模块的总统计值来决定。流量控制模块功能实现流程如图4所示。
图4 流量控制模块工作流程图Fig.4 Working procedure of flow control module
每个流量控制模块决定转发或丢弃订阅/发布请求需经过以下处理过程:
1)流量控制模块计算一段时间间隔内各类请求的本地局部流量,然后在每一时间段末,向监视节点发送各类服资源请求进入该节点Web防火墙的局部流量;
2)监视节点中的统计功能实现各类请求全局流量的计算;
3)监视节点发送全局流量到各个服务管理节点的SWIM Web防火墙;
4)SWIM Web防火墙的流量控制模块收到全局流量统计值,并以此进行流量控制,决定该请求的转发或丢弃。
针对大量订阅/发布的并发访问请求,考虑到大量不同服务共享后台服务器的资源性能问题,以及集中式转发器可能会产生单点故障的问题,根据SWIM服务管理中心平台的特点,提出在SWIM Web防火墙中实现负载均衡功能,即将订阅客户端的订阅请求和发布客户端的发布请求的流量尽可能合理分配到SWIM服务管理中心的服务器池中的Web订阅/发布服务器上,防止部分服务器过载[11]。SWIM服务管理中心的分布式Web防火墙的实现形式为构建分布式转发架构,为实施负载均衡策略提供了基础环境。在实现上,利用引入的监视节点获取后端服务器的负载状态,负载均衡模块和监视节点相互配合,共同实现负载均衡[12]。值得强调的是,SWIM服务管理节点和客户端之间的交互是基于HTTP协议的,各节点Web防火墙之间以及与监视节点的交互过程则是基于TCP协议的。
SWIMWeb防火墙负载均衡功能的实现流程如下:
1)请求经Web防火墙的流量控制模块判断、允许后进入负载均衡模块;
2)监视节点周期性的监听服务器的状态,并将一定时间间隔内的负载状态信息统一反馈给各节点Web防火墙的负载均衡模块;
3)负载均衡模块做出选择,并将反馈信息发送给路由模块;
4)路由模块修改涉及的服务器路由表项,转发请求。
SWIM Web防火墙的负载均衡实现流程如图5所示。
图5 SWIM Web防火墙的负载均衡机制Fig.5 Load balancing mechanism of SWIM Web firewall
内容检测功能的实现基于数据包的过滤技术,首先监控进入SWIM Web防火墙的数据报文,然后内容过滤模块会对通过的数据包进行深层次检查过滤,通过控制添加要过滤的关键字,控制进入的报文内容,能够减少网络中不良信息的传播机率,使网络环境得到净化[13]。为屏蔽不和谐词汇,用户在防火墙管理模块设置要过滤的关键字,保存在关键字库内。对于经过防火墙的数据报文,进行内容合法化判断,完成报文过滤。
内容过滤模块采用关键字匹配算法,要点是串的模式匹配,将要过滤的主串和给定的模式串进行比较,查找主串中是否存在模式串[14]。若存在,则匹配成功,函数返回值设定为模式串在主串中出现的位置。若不存在,则匹配失败,函数返回值设定为-1。内容过滤的处理流程如图6所示。
综上,SWIM Web防火墙中流量控制模块考虑不同的服务区分以及在分析服务请求的访问速率的基础上限制流量,负载均衡模块在请求分发时考虑后台服务器负载状态找到最优的目的服务器,内容过滤模块完成过滤功能。内容过滤模块功能的实现是建立在流量控制模块和负载均衡模块的基础上的,部署该模块后,对进入的数据包采用过滤策略进行分析,对不满足过滤策略的数据包直接丢弃。部署Web防火墙的SWIM服务管理中心如图7所示。
图6 内容过滤模块工作流程图Fig.6 Working procedure of content filtering module
图7 部署Web防火墙的SWIM服务管理中心Fig.7 SWIM service management center of Web firewall deployment
由于条件所限,实验采用4台普通计算机,1台计算机作为终端模拟SWIM客户端,将一部分正常和非法的气象信息数据包存入到该计算机,1台部署Web防火墙模拟SWIM服务管理中心节点,该防火墙在LNMP(Linux Nginx MySQL PHP)平台中实现,Linux系统采用centos 6.4版本,Nginx服务器选取1.12.0版本进行编译安装,同时安装数据库MySQL,将SWIM Web防火墙的算法在Nginx模块中进行了算法实验验证,另外2台计算机用来模拟SWIM系统中的订阅/发布服务器,4台计算机之间采用交换机相连。
实验中所使用的数据包是国内某机场的运行航班信息和天气信息,这些信息对航班的正常飞行至关重要,一旦被不法分子截获并加入非法信息,将会影响航班的正常飞行。
防火墙的测试中包括了功能测试和性能测试两部分,验证SWIM Web防火墙具备为SWIM服务管理中心提供网络服务的能力,得到SWIM Web防火墙的网络服务的承载能力[15]。测试中,利用Nginx的HTTP框架,使用事件模块监听Web端口处理新连接事件,根据接收到的HTTP请求中的URL和HTTP头部,以nginx.conf中的server_name功能模块和locationa功能模块的配置项为依据,将请求按照其所在阶段依次分发到流量控制模块、负载均衡模块以及内容过滤模块,利用upstream机制实现和上游服务器的交互。实验网络拓扑如图8所示。
图8 实验网络拓扑图Fig.8 Experimental network topology
将关键字匹配算法编译进Nginx服务器的处理请求的NGX_HTTP_CONTENT_PHASE功能模块中,模拟SWIM场景,准备1个包含非法信息的航空气象情报,文件名为AWOS201409120537,文件中包含准备过滤的关键字,如图9所示。在SWIM Web防火墙管理模块中,将关键字设定为“机场恐怖袭击”,观察日志上报情况,该非法文件已经被成功过滤如图10所示。
图9 含有非法信息的SWIM气象情报Fig.9 SWIM weather intelligence with illegal information
图10 内容过滤测试Fig.10 Content filtering test
按照实验网络拓扑图,搭建实验平台,完成SWIM Web防火墙的时延测试,登录SWIM Web防火墙管理模块,配置好各类资源,同时也利用IXIA400T网络性能测试仪,先不开启SWIM Web防火墙中设计添加的3个功能模块,从Nginx的日志模块中读取不同数据传输量下的系统时延数据,然后运行防火墙,开启所有的功能模块,同样从日志模块中获得系统的时延数据,将收集到的数据,利用Matlab绘制曲线图,时延的测试结果对比图如图11所示。
图11 系统时延测试对比曲线图Fig.11 Comparison curves of system delay test
从图11中可看出两幅图的总体趋势:在数据包不断变大的过程中,同时时延也在不断变大,不过当数据包达到一定范围后,防火墙系统时延趋于稳定。当防火墙的功能模块关闭时,数据包经过Nginx服务器的功能模块时,当通过防火墙数据包数量逐渐增加时,系统最大时延为285 μs;当开启防火墙时,随着数据包数量的增多,系统最大时延为305 μs。综合分析,以软件化的方式实现带有流量控制、负载均衡和内容过滤功能的防火墙时,数据包通过防火墙系统的时延有一定增大,但幅度较小,对防火墙设备的单点故障影响不大。
SWIM Web防火墙的设计借助了Nginx服务器的功能模块,通过编写相应的脚本代码在相应的功能模块中编译实现特定功能,能够完成处理SWIM客户端的高并发请求。吞吐量是防火墙的一个重要性能指标,用来衡量防火墙转发数据包的能力,指的是单位时间内网络上传输的数据量,以“B/s”为单位。
测试吞吐量首先要根据标称性能确定被测试设备的可能吞吐量,吞吐量的大小主要由防火墙的硬件和程序算法效率决定,尤其是程序算法。本测试选取的数据包长的范围是64~512 B,当防火墙的所有功能模块都开启时,128 B报文的吞吐量应大于20 Mbps,利用网络性能分析仪IXIA400T收集数据,绘制曲线图如图12所示。
图12 系统吞吐量测试对比曲线图Fig.12 Comparison curves of system throughput test
从图12中可看出总体趋势:数据包不断增加的过程中,防火墙系统的吞吐量是不断上升的,最终趋于一个固定值。通过对比可以得到,当运行了SWIM Web防火墙功能模块的对应算法后,系统吞吐量明显下降,最大吞吐量为80Mbps,这和编译的程序算法有很大关系,防火墙的算法效率有待进一步提高。但是当数据包为128 B,其吞吐量大于20 Mbps,满足预估的吞吐量要求,可满足SWIM服务管理中心接收并发请求。
越来越多的民航业务系统参与到SWIM共享服务,SWIM服务管理中心的服务器池通过专用的Web订阅/发布服务器为订阅客户端和发布客户端提供服务,许多不同的订阅客户端需要共享SWIM发布服务客户端的资源。SWIM客户端之间的安全通信是该系统能够有效发挥作用的前提,SWIM服务管理中心的安全必须由Web防火墙来保证。
主要创新性的工作体现在SWIM Web防火墙实现了流量控制和负载均衡功能,解决了Web应用层防御经常面临的超负载问题,并在此基础上完成内容过滤,实现了功能集成。
SWIM Web防火墙的分布式部署以及功能模块的实现形式,使其具有极大的扩展性。今后的研究工作中,基于Nginx的Web应用防护系统的构建可以将更有效的内容过滤算法融合到SWIM Web防火墙,应对未知的攻击,也可在Nginx作为Web应用防护系统的同时,开发其静态文件缓存服务[16],实现可用性和安全性的统一。