双核心双出口星型网络的防毒方法、装置及系统
技术领域
本发明涉及网络技术领域,特别是涉及一种双核心双出口星型网络的防毒方法、装置及系统。
背景技术
目前大型园区网普遍采用双核心双出口星型结构,双核心双出口星型网络的实质是冗余配置。
如图1所示,在核心层中,核心路由器Ra和Rb互为热备,并分别通过链路1和链路2连接上层网络;在汇聚层中,汇聚路由器分别与每个核心路由器建立连接,如R1通过链路3和链路4连接核心路由器Ra和Rb。这种连接方式能够保障与上层网络的连通性不会因单点失效(比如Ra崩溃)而中断。双核心星型结构除链路冗余外,还承担负载均衡的功能。核心路由器Ra和Rb相对于汇聚层路由器是等距的,通过路由协议,如OSPF协议的等价多路径负载均衡,或者策略路由,主机10.1.3.68访问上层网络的出流量(黑色虚线表示),既可以选择路径(R1,Ra),也可以选择路径(R1,Rb),从而使得双核心设备和出口带宽得到充分利用。同理,从上层网络返回到10.1.3.68的流量,也可以选择路径(Ra,R1)或(Rb,R1)。
目前,一般采用透明代理防毒墙对网络传输中的病毒进行过滤,以保证网络安全。
透明代理防毒墙的原理如图2所示(图2右下侧方框是防毒墙的框架结构),在透明代理防毒墙系统中,客户端与服务器之间的原始连接被客户端与防毒墙系统之间的接管连接以及防毒墙系统与服务器之间的代理连接所取代。防毒墙系统的透明代理保证代理连接所使用的IP源地址和TCP源端口与原始连接一致;防毒墙系统的协议代理模块负责接管原始连接和发起代理连接,解析应用层协议,还原和缓存文件,并交给查毒引擎查杀。
透明代理防毒墙功能有效性的必要条件是:代理TCP连接的双向流量都必须通过同一台防毒墙,否则透明代理防毒墙会发生功能失效,甚至导致网络中断。
在图1中,对于在路由器Ra出口链路1上布置的防毒墙,如果10.1.3.68访问上层网络的流量经过Ra,但由于多链路负载均衡的原因,上层网络返回10.1.3.68的流量可能经过Rb一侧,就会发生防毒墙功能失效。
因此,如何实现在双核心双出口星型网络中,防毒墙只捕获TCP连接单向数据流的前提下,仍能做到病毒阻断,并报告带毒文件的网络位置信息是个亟待解决的问题。
发明内容
本发明提供了一种双核心双出口星型网络的防毒方法、装置及系统,在双核心双出口星型网络中,防毒墙只捕获TCP连接单个方向流量的前提下,仍能做到病毒阻断,并报告带毒文件的网络位置。
为实现本发明目的而提供的一种双核心双出口星型网络的防毒方法,包括如下步骤:
S100,在双核心双出口星型网络的双链路上各自部署一台防毒墙,双侧防毒墙之间彼此直连,两台防毒墙各自采用扣包方法查杀和阻断病毒;
S200,TCP连接的双向数据流经过防毒墙时,防毒墙各自独立地采用扣包方法查杀并阻断数据流中带毒文件的传输;TCP连接的单向数据流经过一侧防毒墙时,该侧防毒墙根据传输协议类型将同步信息同步到对端防毒墙;
S300,任一侧防毒墙根据对端防毒墙同步过来的同步信息,辅助进行子连接跟踪,并各自独立地对经过的TCP连接的单向数据流采用扣包方法进行病毒查杀,在发现病毒时报告带毒文件的精确网络位置。
较佳地,作为一种可实施方式,两侧防毒墙中各自设定用于发送和/或接收同步信息的网卡;所述两侧防毒墙之间通过双绞线进行物理直连。
较佳地,作为一种可实施方式,所述S200包括以下步骤:
S210,两侧防毒墙同时判断TCP连接双向数据流是否经过同侧防毒墙,如果是则执行步骤S220,否则执行步骤S230;
S220,防毒墙捕获并解析TCP连接的双向数据流,直接利用扣包方法对带毒数据流进行查杀和阻断后结束返回;
S230,一侧防毒墙捕获经过的TCP连接的单向数据流,根据传输协议类型判断是否需要同步所述同步信息到对端防毒墙;并在判断出需要同步所述同步信息到对端防毒墙时,提取出子连接协商信息或者传输文件的网络位置信息作为同步信息通过防毒墙间同步链路发送给对端防毒墙。
较佳地,作为一种可实施方式,所述S230,包括以下步骤:
S231,判断TCP连接的单向数据流的传输协议类型;
S232,当判断出所述传输协议为HTTP传输协议时,本侧防毒墙从TCP连接的单向数据流中捕获到GET信息作为同步信息,通过防毒墙间同步链路将所述GET信息发送给对端防毒墙;
S233,当判断出所述传输协议为SMTP或者POP3传输协议时,本侧防毒墙不提取同步信息,也不发送同步信息到对端防毒墙,两侧防毒墙各自从邮件本身中提取网络位置信息;
S234,当判断出所述传输协议为FTP传输协议时,本侧防毒墙以PORT、STOR、RETR、CWD和227应答作为同步信息,通过防毒墙间同步链路将所述PORT、STOR、RETR、CWD和227应答发送给对端防毒墙。
较佳地,作为一种可实施方式,所述S300包括以下步骤:
S310,判断所述TCP连接的单向数据流的传输协议类型;
S320,当判断出所述传输协议为HTTP传输协议时,本侧防毒墙对经过的单方向数据流利用扣包方法查杀和阻断病毒,并利用对端同步过来的GET请求中的URL信息对所查杀的病毒报告精确的网络位置;
当所述传输协议为SMTP或者POP3传输协议时,本侧防毒墙对经过的单向数据流直接利用扣包方法查杀和阻断病毒,并独立地从邮件本身中解析出网络位置信息;
当所述传输协议为FTP传输协议时,根据FTP文件传输模式和类型,本侧防毒墙选择利用对端同步信息中的PORT命令或227应答获知FTP数据连接的协商信息并跟踪数据连接,利用扣包方法查杀和阻断病毒,选择利用对端同步信息中的CWD、RETR和STOR命令获取带毒文件的网络位置信息。
较佳地,作为一种可实施方式,所述当所述传输协议为FTP传输协议时,根据FTP文件传输模式和类型,本侧防毒墙选择利用对端同步信息中的PORT命令或227应答获知FTP数据连接的协商信息并跟踪数据连接,利用扣包方法查杀和阻断病毒,选择利用对端同步信息中的CWD、RETR和STOR命令获取带毒文件的网络位置信息,包括以下步骤:
S321,判断所述FTP文件传输模式和类型;
S322,当判断出所述FTP文件传输为主动连接-文件上传时,上传方向的防毒墙直接对上传文件采用扣包进行病毒的查杀和阻断;并独立地获得子连接协商信息和文件路径信息;
S323,当判断出所述FTP文件传输为主动连接-文件下载时,下载方向的防毒墙利用对端同步的子连接协商信息和文件路径信息对下载文件采用扣包方法进行病毒的查杀和阻断;
S324,当判断出所述FTP文件传输为被动连接-文件上传时,上传方向的防毒墙利用对端同步的子连接协商信息采用扣包方法进行病毒的查杀和阻断,并独立地获得文件路径信息;
S325,当判断出所述FTP文件传输为被动连接-文件下载时,下载方向的防毒墙独立地获得子连接协商信息,采用扣包方法进行病毒的查杀和阻断,并获得对端同步过来的文件路径信息。
较佳地,两台防毒墙处于松散耦合关系,同步信息的丢失或者任一台防毒墙的宕机不会影响对端防毒墙的数据包转发和病毒阻断。
基于同一发明构思的一种双核心双出口星型网络的防毒装置:在双侧链路上各部署一台防毒墙,两侧防毒墙之间通过同步链路连接,其中:
双核心网络与外部网络的交互流量通过防毒墙进行传输;
所述同步链路物理连接两侧防毒墙,传输两侧防毒墙之间的同步信息;
两侧防毒墙用于查杀双核心双出口星型网络传输的数据流中的病毒。
较佳地,作为一种可实施方式,所述两侧防毒墙由相同的模块组成,所述防毒墙包括:
配置模块、数据流捕获模块、半连接判断模块、扣包查毒模块、信息同步模块、单向数据流处理模块和病毒报告模块;
所述配置模块用于配置两台防毒墙之间互相连通的同步链路;
所述数据流捕获模块,用于捕获经过防毒墙的数据流;
所述半连接判断模块,用于判断防毒墙是否只捕获TCP连接的单向数据流,当防毒墙捕获TCP连接的双向数据流时,则利用扣包查毒模块直接对数据流查杀病毒处理;当防毒墙只捕获TCP连接的单向的数据流时,则利用信息同步模块对数据流进行处理;
所述扣包查毒模块,用于对防毒墙所捕获的数据流中的病毒进行查杀,当半连接判断模块对数据流捕获模块所捕获的数据流进行判断后,防毒墙捕获TCP连接的双向数据流时,直接对数据流捕获模块捕获的双向数据流中的病毒进行查杀;
所述信息同步模块,用于判断所接收的单向数据流是否需要发送同步信息到对端防毒墙,当需要发送同步信息到对端防毒墙时,则发送同步信息,并通同步链路发送给对端防毒墙,否则直接利用单向数据流处理模块对单向数据流进行处理;
所述单向数据流处理模块,用于选择利用同步信息配合扣包查毒模块对防毒墙捕获的TCP连接的单向数据流进行子连接定位,病毒的查杀和阻断,并确定传输文件的网络位置信息;
所述病毒报告模块,用于在有病毒事件发生时,报告病毒事件,并同时报告带毒文件的网络位置。
较佳地,作为一种可实施方式,所述防毒墙捕获双向数据流时,扣包查毒模块对数据流查杀病毒后,如果发现带毒文件,病毒报告模块报告病毒事件,同时报告带毒文件的网络位置;
所述防毒墙捕获单向数据流时,扣包查毒模块对数据流查杀病毒后,如果发现带毒文件,病毒报告模块报告病毒事件,根据单向数据流处理模块确定的网络位置信息,同时报告带毒文件的网络位置。
基于同一发明构思的一种双核心双出口星型网络的防毒系统,包括服务器和客户端,以及所述双核心双出口星型网络的防毒装置。
本发明的有益效果包括:
本发明提供的一种双核心双出口星型网络的查毒方法、装置及系统。通过设置在双核心双出口星型网络出口处双侧链路上的两台防毒墙之间发送同步信息,防毒墙从所捕获的TCP连接单向数据流中还原出传输文件,并确定所述传输文件的网络位置信息,并利用扣包方法对防毒墙捕获的数据流病毒查杀和阻断,使防毒墙在只捕获TCP连接单向数据流的前提下,仍能做到病毒阻断,在报告病毒事件时同时报告带毒文件的网络位置,而且防毒墙本身不对用户网络拓扑和路由策略施加任何限制,不破坏双核心双出口星型结构的冗余特性,双出口链路上的防毒墙呈松散耦合关系,在对端宕机时不会失效。
附图说明
图1为现有技术双核心双出口星型网络示意图;
图2为现有技术透明代理防毒墙原理示意图;
图3为本发明一种双核心双出口星型网络的查毒方法的一具体实施例的流程示意图;
图4为本发明一种双核心双出口星型网络的查毒方法的一具体实施例的使用HTTP协议传输文件的示意图;
图5是扣包查毒方法的零拷贝sk_buff结构的栈式分配队列示意图;
图6是扣包查毒方法的网卡数据包收发包过程示意图;
图7是扣包查毒方法的网卡数据包在内核层接收并映射到应用层示意图;
图8为本发明一种双核心双出口星型网络的查毒方法的一具体实施例的使用SMTP协议传输文件的示意图;
图9为本发明一种双核心双出口星型网络的查毒方法的一具体实施例的使用POP3协议传输文件的示意图;
图10为本发明一种双核心双出口星型网络的查毒方法的一具体实施例的使用FTP协议传输文件的示意图;
图11为本发明一种双核心双出口星型网络的查毒装置的一具体实施例的防毒墙构成示意图。
具体实施方式
为使本发明双核心双出口星型网络的查毒方法及装置的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明做进一步详细说明,但是,应当说明的是,以下所描述的具体实施例仅用于说明本发明,但不是限定本发明的范围。
本实施例的双核心双出口星型网络查毒方法,如图3所示,包括如下步骤:
S100,在双核心双出口星型网络的双链路上各自部署一台防毒墙,双侧防毒墙之间彼此直连,两台防毒墙各自采用扣包方法查杀和阻断病毒;
S200,TCP连接的双向数据流经过防毒墙时,防毒墙各自独立地采用扣包方法查杀并阻断数据流中带毒文件的传输;TCP连接的单向数据流经过一侧防毒墙时,该侧防毒墙根据传输协议类型将同步信息同步到对端防毒墙;
S300,任一侧防毒墙根据对端防毒墙同步过来的同步信息,辅助进行子连接跟踪对子连接并各自独立地对流经的TCP连接的单向数据流采用扣包方法进行病毒查杀,在发现病毒时报告带毒文件的精确网络位置。
下面对上述步骤做详细说明:
步骤S100,在双核心双出口星型网络的双链路上各自部署一台防毒墙,双侧防毒墙之间彼此直连,两台防毒墙各自采用扣包方法查杀和阻断病毒。
如图1所示,在双核心双出口星型网络核心路由器Ra和Rb的出口处分别部署一台防毒墙。
此处需要说明的是,所述两台防毒墙的结构及功能完全相同,两台防毒墙根据TCP连接的双向数据流是否经过同侧防毒墙而决定是否同步信息到对端防毒墙。在两台防毒墙中设置发送、接收同步信息的网卡并进行物理直连。
较佳地,作为一种可实施方式,两侧防毒墙之间通过双绞线直连的一对网卡构成同步链路,网卡均处于混杂模式,可监听所有收到的数据包。
同步方法的实质是将带有同步信息的原始数据包通过本侧同步网卡拷贝一份并直接发往对端。
对端在收到同步的数据包后,使用数据包中的TCP首部的四元组信息定位相应的TCP连接数据结构,再根据具体的应用层解析出所需要的子连接协商信息或者传输文件网络位置信息。
需要说明的是,所述同步链路用于在两台防毒墙之间完成信息的传递,本实施例中通过双绞线直连的方式实现,当然也可以采用本领域技术人员所熟知的其他方式实现同步链路。
此处防毒墙采用扣包方法查杀并阻断病毒,取缔了传统的透明代理查毒手段。采用扣包方法的防毒墙并不接管原始连接,也不建立代理连接;而是作为数据流的观察者,在文件传输到达最后一个数据包时,在TCP层扣留该数据包和后续重传包,直到病毒传统引擎完成对文件的病毒扫描,再根据扫描结果决定被扣数据包的转发或丢弃,以及连接的继续或阻断。这种基于TCP层直接扣包而不是代理连接的杀毒技术,使得防毒墙类似于一根可以阻断病毒的导线,除了病毒扫描引入的延迟,或者阻断带毒连接外,不改变原始连接的任何特征。
较佳地,作为一种可实施方式,步骤S200,TCP连接的双向数据流经过防毒墙时,防毒墙各自独立地采用扣包方法查杀并阻断数据流中带毒文件的传输;TCP连接的单向数据流经过一侧防毒墙时,该侧防毒墙根据传输协议类型将同步信息同步到对端防毒墙,包括以下步骤:
S210,两侧防毒墙同时判断TCP连接双向数据流是否经过同侧防毒墙,如果是则执行步骤S220,否则执行步骤S230;
如图4所示,客户端10.1.3.68访问位于10.1.0.157上的web站点的主页面index.html,则客户端和服务器之间要完成TCP连接的三次握手,在建立TCP连接的三次握手过程中,防毒墙作为数据流的观察者,可以判断TCP连接的双向数据流是否经过同侧防毒墙。所述防毒墙在TCP连接握手阶段捕获解析并判断双向数据流是否通过同侧防毒墙为成熟技术,作为本技术领域人员可以根据介绍实现,此处不再赘述。
此处需要说明的是,在TCP的3次握手阶段之后,防毒墙就能够判断出TCP连接双向数据流的走向。如果单侧防毒墙只看到SYN包和第3个ACK包,或者只看到SYNACK包,就表明TCP连接双向数据流分别流经两侧链路。
S220,防毒墙捕获并解析TCP连接的双向数据流,直接利用扣包方法对带毒数据流进行查杀和阻断后结束返回;
此处需要说明的是,在双核心双出口星型网络中,对于布置在核心路由器出口处的防毒墙,在TCP连接双向数据流都经过同一防毒墙时,该防毒墙正常工作,可以完成查毒的工作。对本发明实施例双核心双出口星型网络查毒方法也是如此,当TCP连接双向数据流都经过同一防毒墙时,该防毒墙直接利用扣包方法对捕获解析出的双向数据流查杀并阻断病毒后结束返回,在报告病毒事件时,同时能报告带毒文件的网络位置。
S230,一侧防毒墙捕获经过的TCP连接的单向数据流,根据传输协议类型判断是否需要同步所述同步信息到对端防毒墙;并在判断出需要同步所述同步信息到对端防毒墙时,提取出子连接协商信息或者传输文件的网络位置信息作为同步信息通过防毒墙间同步链路发送给对端防毒墙;
此处需要说明的是,需要同步的信息是用来确定传输文件网络位置的信息的网络位置信息或者辅助子连接跟踪的自连接跟踪信息,要同步的数据包数量很少,占用的带宽和资源相当有限。如在使用HTTP协议进行文件传输时的客户端发出的GET请求数据包。
较佳地,作为一种可实施方式,所述S230,一侧防毒墙捕获经过的TCP连接的单向数据流,根据传输协议类型判断是否需要同步所述同步信息到对端防毒墙;并在判断出需要同步所述同步信息到对端防毒墙时,提取出子连接协商信息或者传输文件的网络位置信息作为同步信息通过防毒墙间同步链路发送给对端防毒墙,包括以下步骤:
S231,判断TCP连接的单向数据流的传输协议类型;
S232,当判断出所述传输协议为HTTP传输协议时,本侧防毒墙从TCP连接的单向数据流中捕获到GET信息作为同步信息,通过防毒墙间同步链路将所述GET信息发送给对端防毒墙;
S233,当判断出所述传输协议为SMTP或者POP3传输协议时,本侧防毒墙不提取同步信息,也不发送同步信息到对端防毒墙,两侧防毒墙各自从邮件本身中提取网络位置信息;
S234,当判断出所述传输协议为FTP传输协议时,本侧防毒墙以PORT、STOR、RETR、CWD和227应答作为同步信息,通过防毒墙间同步链路将所述PORT、STOR、RETR、CWD和227应答发送给对端防毒墙。
较佳地,作为一种可实施方式,本实施例中,一侧防毒墙通过网卡发送同步信息给对端防毒墙,同步信息经过两台防毒墙之间直连的双绞线到达对端。
此处需要说明的是,一侧防毒墙发送同步信息给对端防毒墙,对端防毒墙不返回确认信息,同步信息丢失不影响TCP数据流在两侧防毒墙的正常转发。因此,设置在双核心双出口星型网络两出口处的两台防毒墙呈松散耦合关系,一侧防毒墙宕机或者同步信息丢失时不影响对端防毒墙的数据包转发。
较佳地,作为一种可实施方式,步骤S300,任一侧防毒墙根据对端防毒墙同步过来的同步信息,辅助进行子连接跟踪,并各自独立地对经过的TCP连接的单向数据流采用扣包方法进行病毒查杀,在发现病毒时报告带毒文件的精确网络位置,包括以下步骤:
S310,判断所述TCP连接的单向数据流的传输协议类型;
S320,当判断出所述传输协议为HTTP传输协议时,本侧防毒墙对经过的单方向数据流利用扣包方法查杀和阻断病毒,并利用对端同步过来的GET请求中的URL信息对所查杀的病毒报告精确的网络位置;
当所述传输协议为SMTP或者POP3传输协议时,本侧防毒墙对经过的单向数据流直接利用扣包方法查杀和阻断病毒,并独立地从邮件本身中解析出网络位置信息;
此处需要说明的是,所述网络位置信息为邮件的发件人或收件人。
当所述传输协议为FTP传输协议时,根据FTP文件传输模式和类型,本侧防毒墙选择利用对端同步信息中的PORT命令或227应答获知FTP数据连接的协商信息并跟踪数据连接,利用扣包方法查杀和阻断病毒,选择利用对端同步信息中的CWD、RETR和STOR命令获取带毒文件的网络位置信息。
较佳地,作为一种可实施方式,所述当所述传输协议为FTP传输协议时,根据FTP文件传输模式和类型,本侧防毒墙选择利用对端同步信息中的PORT命令或227应答获知FTP数据连接的协商信息并跟踪数据连接,利用扣包方法查杀和阻断病毒,选择利用对端同步信息中的CWD、RETR和STOR命令获取带毒文件的网络位置信息,包括以下步骤:
S321,判断所述FTP文件传输模式和类型;
S322,当判断出所述FTP文件传输为主动连接-文件上传时,上传方向的防毒墙直接对上传文件采用扣包进行病毒的查杀和阻断;并独立地获得子连接协商信息和文件路径信息;
S323,当判断出所述FTP文件传输为主动连接-文件下载时,下载方向的防毒墙利用对端同步的子连接协商信息和文件路径信息对下载文件采用扣包方法进行病毒的查杀和阻断;
S324,当判断出所述FTP文件传输为被动连接-文件上传时,上传方向的防毒墙利用对端同步的子连接协商信息采用扣包方法进行病毒的查杀和阻断,并独立地获得文件路径信息;
S325,当判断出所述FTP文件传输为被动连接-文件下载时,下载方向的防毒墙独立地获得子连接协商信息,采用扣包方法进行病毒的查杀和阻断,并获得对端同步过来的文件路径信息。
此处需要说明的是,所述文件路径信息即为FTP文件传输中上传或下载的文件的网络位置。
较佳地,作为一种可实施方式,所述任一防毒墙根据对端防毒墙同步过来的子连接协商信息,辅助进行子连接跟踪以对子连接进行病毒查杀;或者根据同步过来的网络位置信息,在发现病毒时报告带毒文件的精确网络位置,包括以下操作:
防毒墙通过TCP四元组将通过同步链路发送过来的同步信息与所述TCP连接单向数据流置入同一个TCP连接数据结构中处理,从而识别负责文件传输的子连接,以及文件网络位置信息。
由上所述可得,在双核心双出口星型网络中,本发明实施例可以在防毒墙只捕获单向数据流的情况下完成对数据流的查毒,实现病毒扫描和阻断,并能确定数据流的网络位置。对于未列举的更多协议,也可以如法炮制。
下面详细说明本发明中的扣包查毒方法,其可以参见本申请人申请号201310066604.1的《网络传输数据病毒检测处理方法》发明专利申请文件。
网络传输数据病毒检测处理方法,包括如下步骤:
步骤A100,在网卡的内核层中设置预设大小的常驻内存作为零拷贝内存,并配置为零拷贝sk_buff结构的栈式分配队列,同时在内核层设置与栈式分配队列的索引相应的接收队列和放走队列,对网络传输的收发数据包进行分配和释放。
在网卡的内核层中设置预设固定大小的常驻内存作为零拷贝内存,用于网卡收包队列的分配和释放。
本发明实施例中,作为一种可实施方式,所述步骤A100包括如下步骤:
步骤A110,在网卡的内核层的低端内存中设置预设大小的常驻内存作为零拷贝内存;
较佳地,作为一种可实施方式,在32位Linux内核中,896MB以下的物理内存为低端内存,在该32位Linux内核的低端内存中,设置预设大小的常驻内存作为零拷贝内存,该零拷贝内存用于网卡收发包队列的分配。
步骤A120,将所述零拷贝内存分配为POOL_SIZE/2整数个物理页(POOL_SIZE/2为大于1的整数),每个物理页大小为4096字节,且设定为不允许换出到交换空间,并将每个物理页等分为2个半页,每个半页大小为2048字节,用于收发数据包;
较佳地,作为一种可实施方式,在内核层的低端内存中分配POOL_SIZE/2整数个物理页,在图5中以方块表示。每个物理页大小为4096字节,且设定为不允许换出到交换空间。每个物理页等分为2个半页,每个半页大小为2048字节。在零拷贝内存中,每个半页被称为零拷贝半页,用于收取数据包。
步骤A130,分配POOL_SIZE个sk_buff结构到零拷贝内存的POOL_SIZE个物理半页中,作为零拷贝sk_buff结构的零拷贝内存;
sk_buff结构是现有操作系统(如Linux系统)内核层中网络数据包处理的核心数据结构,每个sk_buff结构对应并存储一个网络数据包。
步骤A140,在零拷贝sk_buff结构中配置index域记录对应物理半页在零拷贝内存中的索引,使得每个索引一一对应绑定零拷贝sk_buff结构的零拷贝内存半页;
由于相对于地址寻址方式,索引更容易在内核层与应用层之间传递和引用,本发明实施例中,较佳地,作为一种可实施方式,在零拷贝sk_buff结构中配置index域记录对应零拷贝内存中物理半页的索引。物理半页的索引是根据该物理半页在零拷贝内存中的偏移而配置,根据该物理半页的索引和零拷贝地址就可以确定零拷贝内存中任一物理半页的地址从而寻址到该物理半页而读写其中的内容。
本发明实施例中,零拷贝sk_buff结构与POOL_SIZE个零拷贝半页通过利用索引一一对应且绑定使用:每一个sk_buff结构都可以被分配给网卡驱动用于收发网络数据包,网络数据包的内容存放在对应的物理半页中。
步骤A150,配置零拷贝sk_buff结构为栈式分配队列,在分配sk_buff结构时采用出栈操作,在释放sk_buff结构时采用压栈操作;
如图5所示,为了便于零拷贝sk_buff结构的分配,作为一种可实施方式,本发明实施例中,利用栈结构技术进行内存分配和释放,将配置零拷贝sk_buff结构为栈式分配队列,栈头以top表示,分配sk_buff结构地采用出(pop)栈操作,在释放sk_buff结构时采用压(push)栈操作。
步骤A160,根据所述零拷贝内存的索引,在内核层中设置数据包接收队列和放走队列。
内核层接收队列是在内核中分配的与零拷贝物理半页数量相等的队列,队列通过head从头部读取,通过tail向尾部写入。队列的每一项都可以存放一个零拷贝半页的索引,这个索引相应于sk_buff结构中的index域,借助该索引,可以找到对应的sk_buff结构和零拷贝半页。
类似地,放走队列与接收队列结构完全相同,因此在本发明实施例中不再一一详细描述。
步骤A200,通过虚存技术设置将所述零拷贝sk_buff结构的栈式分配队列、数据包接收队列和放走队列映射到用户层,在用户层以虚地址方式访问。
本发明实施例中,通过虚存技术设置,将该零拷贝sk_buff结构的栈式分配队列、数据包接收队列和放走队列映射到用户层,使得查杀毒计算机病毒的进程可以直接通过该用户层中的虚存进行访问,从而避免内核空间与用户层的拷贝;
本发明实施例中,通过虚存映射方法将该零拷贝内存、数据包接收队列和放走队列映射到网卡的用户层,并在用户层以虚地址方式直接访问,同时将数据包在内核中直接转发,从而绕开内核TCP/IP协议栈,而且其不依赖于内核桥接技术的数据包转发,从而剥离了与内核的紧密耦合关系,避免数据包在内核与用户层之间的拷贝,提高数据包的处理效率。
本发明实施例中,根据所述零拷贝内存的索引,在内核层中设置数据包接收队列和放走队列,并通过虚存映射方法,同时将这两个队列映射到应用层。
本发明实施例中,称应用层的接收队列为镜像接收队列,称应用层的放走队列为镜像放走队列,称应用层的零拷贝sk_buff结构的栈式分配队列为镜像分配队列。
作为一种可实施方式,映射由图5底部的方块表示,这些区域表示零拷贝内存在用户层中的映射。
作为一种可实施方式,应用层访问镜像分配队列、镜像接收队列和镜像放走队列通过映射设备文件完成的,通过在内核层中为每个网卡添加了一个字符型虚拟设备,应用层则透过对应于该字符型虚拟设备的设备文件完成对镜像分配队列、镜像接收/放走队列的映射和访问操作。
通过虚存映射方法设置将网卡的内核层数据映射到网卡的用户层,并在用户层以虚地址方式访问,是一种现有技术,因此,在本发明实施例中,不再一一详细描述。
步骤A300,在网卡处理收包软中断时,网卡驱动接收传输的数据包,将其传输入栈到零拷贝sk_buff结构的栈式分配队列中,并将接收数据包结构中的索引写入栈到接收队列。
如图6所示,现有技术中,高性能网卡如千兆/万兆网卡中普遍采用硬件环形队列结构,通过在收包环形队列中预留多个sk_buff结构,持续接收数据包时,由网卡DMA(Direct Memory Access,直接内存存取)将数据包连续写入多个sk_buff结构;发包时可向发包环形队列加入若干sk_buff结构,由网卡DMA将数据包从网口连续发出。当预留的sk_buff结构被到来的数据包填充并交付处理流程时,补充预留的sk_buff结构;当网卡发包完毕时,数据包占用的sk_buff结构随即释放。现有技术中内核层调用函数skb_alloc()和skb_free()为网卡分配和释放sk_buff数据结构。而现有技术中,由skb_alloc()分配的sk_buff结构的地址是无法预测的。
本发明实施例中,为实现对网卡传输的数据包的计算机查杀毒处理,作为一种可实施方式,将现有技术中的skb_alloc()函数和skb_free()函数修改为modified_skb_alloc()函数和modified_skb_kfree()函数,使得sk_buff结构的分配和释放是在零拷贝sk_buff结构的栈式分配队列中进行的,而不是随机分配,如下所示:
这样,通过modified_skb_alloc()函数和modified_skb_kfree()函数,在网卡驱动NAPI(New API)软中断转发数据的过程中,将网卡分配和释放数据包强制入栈或出栈到本发明设置的零拷贝内存的零拷贝sk_buff结构的栈式分配队列中,而零拷贝内存的零拷贝sk_buff结构的栈式分配队列被映射到用户层,为实现用户层数据包控制查杀毒做好了准备。
图6中一对构成转发关系的网卡eth0和eth1,图中用虚线表明了2块网卡之间的转发关系。
作为一种可实施方式,构成转发关系的一对网卡eth0和eth1,在网卡分配过程中,在分配sk_buff结构到网卡eth0的收包环形队列的时,采用modified_skb_alloc()函数,直接将数据包所在的sk_buff结构中的零拷贝半页的索引(即所述的sk_buff的index域)放入网卡eth0的收包环形队列(接收队列)。
在接收网卡数据包的同时,本发明实施例中,将接收数据包的sk_buff结构中的索引(index)直接写入栈到内核层接收队列的尾部,如图7所示。
步骤A400,将步骤A300中接收到的网卡数据包的sk_buff结构的栈式分配队列、写入接收数据包的sk_buff结构的索引的接收队列、以及放走队列通过映射设备文件映射到应用层,得到相应的写入网卡数据包的镜像分配队列、镜像接收队列和镜像放走队列。
在接收数据包的sk_buff结构中的索引(index)写入内核接收队列的尾部后,应用层则从镜像接收队列的头部读取这些索引,并找到对应的镜像分配队列中sk_buff结构的零拷贝半页网卡数据包,如图7所示。
如图7所示,构成转发关系的一对网卡eth0和eth1,网卡分配(接收)和释放(发包)sk_buff结构在零拷贝内存中进行,直接将数据包所在的sk_buff结构中的零拷贝半页的索引(即所述的sk_buff的index域)放入图7中部的eth0的接收队列,从而绕开了内核的TCP/IP协议栈和socket机制。
如图7所示,通过eth0映射设备文件和eth1映射设备文件,将网卡的镜像分配队列、接收队列和放走队列映射到用户层,用户层查毒进程通过打开映射设备文件,将网卡镜像分配队列、接收队列和放走队列映射到查毒进程的虚存空间,进行直接访问。
作为一种可实施方式,当用户层进程和内核层同时访问接收队列或者放走队列时,可以通过虚存本身的镜像分配队列的head指针和内核层栈式分配队列的tail指针进行同步:内核层通过写指针tail访问接收队列,用户层进程通过读指针head访问镜像接收队列。
设eth0网卡上收取数据包并放入eth0接收队列tail指向的位置,则用户层进程通过head指针从镜像接收队列获取数据包对应的sk_buff结构和零拷贝半页的索引,并通过该索引访问镜像分配队列的数据包的具体内容。
步骤A500,在用户层从镜像分配队列中读取相应的网卡数据包,将映射的网卡数据包解析还原,并将还原出的数据内容交给查毒引擎进行检测,将带有病毒的数据包丢弃,或者将无病毒的数据包转发,并出栈释放相应的索引。
具体地,所述步骤A500包括如下步骤:
步骤A510,应用层从镜像接收队列里收取索引(index)并读取数据包后,释放镜像接收队列中的索引,并将该索引(index)写入镜像放走队列的尾部;
步骤A520,根据用户层虚存中的镜像接收队列得到零拷贝内存映射到用户层的数据包,解析TCP/IP协议栈并对TCP连接进行跟踪管理,转发数据包,解析应用层协议,还原出传输文件的片段;
本发明实施例中,绕开Linux内核的TCP/IP协议栈,在网卡处理收包软中断时,将所述零拷贝内存中的数据包直接映射给用户层,解析TCP/IP协议栈并对TCP连接进行跟踪管理,转发数据包,解析应用层协议,还原出传输文件并交给查毒引擎进行检测,其绕开正常的内核协议处理流程,直接将数据包送达应用层,与内核的耦合度基本降到零。
数据包经过以太层、IP层协议的解析,IP分片包的重组;TCP层协议的解析,TCP层连接的建立和维护,用于跟踪TCP连接和子连接(例如FTP数据连接),乱序包定序;应用协议层(例如HTTP/FTP/AMTP/POP3等协议)的解析,协议传输文件的还原和临时文件的保存,然后就可以将还原文件的片段交给流引擎进行病毒特征检测。
所述将数据包进行以太层、IP层协议的解析,IP分片包的重组;TCP层协议的解析,TCP层连接的建立和维护,用于跟踪TCP连接和子连接(例如FTP数据连接),乱序包定序;应用协议层(例如HTTP/FTP/AMTP/POP3等协议)的解析,协议传输文件的还原和临时文件的保存,是一种现有技术,因此,在本发明实施例中,不再一一详细描述。
步骤A530,在应用层对解析得到的数据包利用查毒引擎进行病毒检测,并根据对数据包检测结果和数据包次序判断,对网卡数据包及sk_buff结构的栈分配队列进行处理;
防毒墙最核心的功能是病毒阻断,即在发现传输文件数据包带有病毒时,破坏传输文件并断开连接。本发明实施例中,采用结合文件引擎和流引擎相结合的技术,进行查毒引擎查毒,即使用流引擎进行数据包片段进行病毒特征检查,并在文件对应的所有片段都经过检查后,还原出完整的文件,然后将还原文件将交给文件引擎,再对还原文件做病毒特征的检查。
作为一种可实施方式,由于网络文件传输通常分成若干数据包传送,本发明实施例的查毒引擎是文件引擎和流引擎的结合进行查毒,对每个数据包所携带的部分文件内容进行查毒。步骤A530中,在应用层对解析得到的数据包利用查毒引擎进行病毒检测处理,并根据对数据包检测结果和数据包次序判断,对网卡数据包及sk_buff结构的栈分配队列进行处理;包括如下步骤:
步骤A531,在应用层对解析得到的数据包使用流引擎进行数据包的数据片段进行病毒特征检查,在发现传输文件带毒时,即时阻断连接,破坏传输文件并断开连接,并释放镜像放走队列中的索引;
网络传输文件传输时分成若干数据包进行传送,对每个数据包所携带的部分文件内容,本发明实施例中,使用流引擎进行明文的病毒特征检查。
如果数据包被流引擎发现带有病毒特征,则需要丢弃数据包并阻断对应的TCP连接;
作为一种可实施方式,较佳地,在丢弃数据包时,调用ioctl()函数传入该数据包的对应的镜像放走队列中的索引,在内核层找到该索引对应的sk_buff结构,直接释放,并进行出栈操作释放镜像放走队列中的索引。
步骤A532,如果数据包经过流引擎检测表明无病毒特征,且该数据包不是传输文件的最后一个数据包,则该数据包不必扣留而直接转发;如果数据包是传输文件的最后一个包,则表明传输文件还原完成,将还原的临时文件交给文件引擎做彻底的病毒检测,并扣留该传输文件的最后一个数据包直到文件引擎完成查毒;
如果数据包是传输文件的最后一个数据包,则表明传输文件还原完成,需将还原的传输文件交给文件引擎做彻底的病毒检测,此地将该数据包扣留在查毒进程中直到文件引擎完成查毒。
本发明的网络传输数据病毒检测处理方法,摒弃传统的代理连接技术,用户层的查毒进程获取数据包后,当发现该包是正在传输的文件的最后一个包时,可以选择扣住该包而不转发,直到查毒引擎完成对传输文件的检测为止。在扣包期间,需要丢弃数据包所在TCP连接所在方向上的后续包和重发包。
由于文件引擎查毒的时间无法确定,依赖于传输文件的类型、大小、是否加壳等因素,如果文件引擎查毒时间过长且因最后一个数据包一直被扣留,则可能引起发包方对该数据包的重传,因此,更佳地,作为一种可实施方式,本发明实施例中,在扣包期间阻拦连接上的后续数据包,直接丢弃不予处理和转发。
作为一种可实施方式,较佳地,所述步骤A532中,扣留该数据包直到文件引擎完成查毒,是通过ioctl()函数调用完成,包括如下步骤:
步骤A5321,在阻断数据包对应的TCP连接时,调用ioctl()函数传入该数据包的对应的镜像放走队列中的索引,在内核层中查找到该索引对应的sk_buff结构,根据sk_buff的数据包特征,包括但不限于seq/ack_seq/时间戳/窗口等,伪造rst连接重置包发往收包方,达到阻断连接的目的,并将被扣数据包的TCP四元组添加到预先设置的阻拦特征哈希表中;
所述阻拦特征哈希表是预先设置的根据存储被扣数据包的TCP四元组(源IP地址、源端口、目的IP地址、目的端口)的连接特征的哈希表。
步骤A5322,在扣包期间阻拦连接上后续数据包时,调用ioctl()函数传入后续数据包的对应的镜像放走队列中的索引,在内核层中找到该索引对应的sk_buff结构,将sk_buff给出的连接特征,包括但不限于TCP四元组(源IP地址、源端口、目的IP地址、目的端口,源和目的同时隐含了被扣数据包的方向),与内核层中的阻拦特征哈希表进行比对,并在查找到与被扣数据包TCP四元组特征相同时,直接丢弃该后续数据包。
在扣包期间,当接收到后续数据包,并在内核层NAPI软中断中处理该后续数据包时,将连接特征中的TCP四元组(源IP地址、源端口、目的IP地址、目的端口,源和目的同时隐含了被扣数据包的方向),与内核层中的阻拦特征哈希表进行比对,一旦发现后续数据包连接特征的TCP四元组存在于阻拦特征哈希表中,就直接丢弃该数据包。
当文件对应的所有数据包都经过检查后,通过解压缩,脱壳(通过算法或虚拟机)等,还原出完整的文件,然后将还原文件将交给文件引擎,对还原文件做病毒特征的检查处理。
当文件对应的所有数据包都经过防毒墙时,防毒墙可以还原出完整的文件,此时还原文件将交给文件引擎,通过虚拟机做解压脱壳后再做病毒特征的检查。
流引擎(即基于流引擎的病毒扫描方法)对文件的数据片段进行病毒特征检查,以及对整个文件利用文件引擎(如瑞星反病毒引擎、瑞星杀毒软件引擎等)进行病毒特征检查,是本领域的现有技术,因此,在本发明实施例中,不再一一详细描述。
本发明实施例利用双引擎病毒阻断的效果是:流引擎发现病毒时可即时阻断连接,当文件引擎发现病毒时可将文件最后的数据包破坏掉,以破坏压缩或加壳的文件,同时断开连接。
步骤A533,文件引擎查毒完成后,如果确认文件无毒,则按照正常应用层转发流程,将该数据包的索引放入转发网卡镜像放走队列tail指向的位置,并且取消对该连接后续数据包的阻拦;转发网卡的内核层则在网卡软中断中,从内核放走队列的头部读取索引(index),并根据索引查找到对应的sk_buff结构,将数据包填入网卡的发包环形队列传送出去,按照出栈操作释放该sk_buff结构对应的索引。
在文件引擎查毒完成并允许连接上后续数据包时,调用ioctl()函数传入被扣数据包的对应的镜像放走队列中的索引,在内核层中找到该索引对应的sk_buff结构,根据sk_buff给出的连接特征,包括但不限于TCP四元组(指TCP连接的源IP地址、源端口、目的IP地址、目的端口),在阻拦特征哈希表中匹配查找到并删除对应的被扣数据包的TCP四元组,这样被扣数据包的连接特征的TCP四元组不再存在于阻拦特征哈希表中,从而使后续数据包不再被阻拦。
作为一种可实施方式,本发明实施例中,在网卡的软中断(如图6中的NAPI软中断)中,当网卡收到发送来的数据包时,则绕开正常的TCP/IP协议栈和桥接技术,根据配置的网卡间转发关系,直接调用转发网卡的发包函数hard_start_xmit()将从零拷贝内存中获取数据包转发到发包环形队列,转发出去。
这种内核中数据包的直接转发,与内核的耦合度基本为零,避开了内核桥接代码中对端口MAC地址的学习、对生成树协议的支持和经过netfilter规则链的开销,可以明显提升小包吞吐率和转发性能。
步骤A534,如果文件引擎查毒完成后,如果确认文件带毒,则丢弃扣留的数据包,阻断对应的TCP连接,并且取消对该连接后续数据包的阻拦,直接进行出栈操作释放sk_buff结构对应的索引。
本发明实施例通过零内存拷贝,利用虚存将内核层的传输文件的数据包映射到用户层,对TCP/IP协议栈进行解析,并对TCP连接进行跟踪管理,从而取代代理连接;对数据包进行转发,而不采用Linux内核的桥接技术;对应用层协议进行解析,还原出传输文件并交给查毒引擎检测,使得防毒墙系统与内核的耦合很小且保持稳定;其摒弃传统的代理连接技术,采用独特的扣包机制,在不改变原始连接任何特征的前提下,通过流引擎和文件引擎的双重检测,保证了对带毒传输文件及时和准确的阻断。
下面通过具体实施例说明,对于使用不同协议传输的传输文件,本发明双核心双出口星型网络查毒方法在防毒墙只捕获单向数据流的情况下的具体实施。
实施例1:
使用HTTP协议进行文件传输,如图4所示,为双核心双出口星型网络的简略图。本实施例中防毒墙具体的查毒方法包括如下步骤:
客户端10.1.3.68访问位于服务器10.1.0.157上的web站点的主页面index.html,客户端发出的syn包经过防毒墙1和路径1,而服务器返回的synack包则经过路径2和防毒墙2,防毒墙1没有捕获到与syn包所对应的synnack包,由此,防毒墙1可以在客户端与服务器建立连接的过程中可以判断出防毒墙1捕获单向的数据流,同时也可得知,防毒墙2也捕获单向的数据流。
防毒墙1捕获解析出单向数据流,并判断是否需要同步信息到防毒墙2,在本实施例中,使用HTTP协议进行文件传输,客户端发送的GET请求中包含网络位置信息(URL信息),而经过防毒墙2的服务器应答中没有有关网络位置信息的数据包,因此,在本实施例中使用HTTP协议进行文件传输中,防毒墙1从捕获解析出的单向数据流中提取GET信息作为同步信息,通过防毒墙间同步链路将所述GET信息发送给防毒墙2。
较佳地,作为一种可实施方式,防毒墙1使用专用的网卡通过防毒墙1和防毒墙2之间连接的双绞线发送GET请求数据包到防毒墙2。
在本实施例中,如图4所示,防毒墙2只捕获HTTP应答,防毒墙2利用扣包方法查杀捕获的应答数据流时,需要还原出完整的传输文件。以下对还原HTTP应答中的传输文件做详细的说明。
HTTP应答具有固定的格式,由起始行,消息头和消息体3部分构成。
起始行包含协议版本号(HTTP/1.1),应答状态码(200)和应答状态描述(OK)3个域构成,以“\r\n”(回车换行)字符结束。
消息头由若干消息头域组成,描述HTTP应答的各种属性,如服务器信息、cookie值、传输文件类型、传输文件采用何种压缩格式、传输文件大小、是否采用分块传输(chunk编码)以及是否采用MIME格式传输等。每个消息头域以“\r\n”结束,整个消息头以“\r\n\r\n”结束。
对HTTP应答消息头进行解析,明确HTTP协议的应答,携带的文件的大小、类型、压缩格式及传输方式。
消息体就是传输文件,通常分成若干TCP数据包进行传送。根据对HTTP消息头的解析结果,足以从HTTP应答中还原出传输文件。
如上所述,防毒墙2在只捕获HTTP应答的条件下,从HTTP应答中还原出传输文件,但防毒墙2无法知道从所捕获的单向数据流中还原出的传输文件的网络位置信息(http:// 10.1.0.157/index.html)。
在使用HTTP协议的传输文件中,网络位置信息只能从传输文件对应的GET请求起始行的URL域中获取,本实施例中,防毒墙2通过TCP四元组将防毒墙1通过同步链路发送过来的GET请求与捕获到的HTTP应答置入同一个TCP连接数据结构中进行处理,在GET请求起始行的URL与传输文件之间建立对应关系,从而,根据从GET请求起始行的URL域中获得的网络位置信息确定传输文件的网络位置信息。
此处需要说明的是,防毒墙1发送给防毒墙2的GET请求与HTTP应答到达防毒墙2的先后顺序是不固定的,图4中通过“赛跑”图标反映了防毒墙1发送给防毒墙2的GET请求与HTTP应答的这种关系。防毒墙1发送给防毒墙2的GET请求经过同步链路所需时间很短,而HTTP应答由若干连续数据包组成,防毒墙1发送给防毒墙2的GET请求在HTTP应答最后一个数据包之前到达防毒墙2,就不会影响带毒文件URL的获取和报告。
当传输文件带有病毒时,防毒墙2报告病毒事件并同时报告带毒文件的网络位置信息,即10.1.0.157站点的index.html。
实施例2:
使用SMTP协议进行文件传输,如图8所示,发送邮件通常采用SMTP协议,SMTP协议经过客户端与服务器的认证阶段后,即进入邮件传输阶段。本实施例中防毒墙具体的查毒方法包括如下步骤:
客户端10.1.3.68通过端口3000访问服务器10.1.0.157,客户端发出的syn包经过防毒墙1和路径1,而服务器返回的synack包则经过路径2和防毒墙2,防毒墙1没有捕获到与syn包所对应的synnack包,由此,防毒墙1可以在客户端与服务器建立连接的过程中可以判断出防毒墙1捕获单向的数据流,同时也可得知,防毒墙2也捕获单向的数据流。
防毒墙1判断是否需要同步信息到防毒墙2,在本实施例中,使用SMTP协议发送邮件,如图8所示,发送邮件内容也由防毒墙1捕获,因此,对于使用SMTP协议发送邮件时,防毒墙不需要同步信息到另一防毒墙,本实施例中,防毒墙1不发送同步信息给防毒墙2,同时,防毒墙1对捕获解析出的单向数据流利用扣包查毒方法查杀病毒。
如图8所示,SMTP协议规定邮件本身的传输只发生在客户端到服务器的25端口的方向上,通常以“DATA\r\n”命令开始,客户端随后发送邮件,邮件内容分成若干行发送,每行以“\r\n”结束,整个邮件以“.\r\n”结束。防毒墙1捕获发送邮件请求及邮件内容。
防毒墙1可以根据上述特性,在“DATA\r\n”命令与“.\r\n”命令之间捕获整个邮件并进行还原。邮件内容遵循多用途互联网邮件扩展(MIME,Multipurpose Internet MailExtensions)格式,防毒墙1可以具体还原出邮件的内嵌资源或附件,从而防毒墙1可还原出完整的文件,顺利的利用扣包查毒方法对所捕获的单向数据流查杀病毒。
整个邮件在“DATA\r\n”命令之后的数据包中包含发件人及邮件主题,也即邮件的网络位置信息。所以,当文件带有病毒时,防毒墙1在报告病毒事件时可同时报告带毒文件的精确网路位置。
当发送邮件有病毒时,防毒墙1报告病毒事件并同时报告带毒邮件的发件人及邮件主题。
实施例3:
使用POP3协议进行文件传输,如图9所示,邮件接收通常采用POP3协议,POP3协议经过客户端与服务器的认证阶段后,即进入邮件传输阶段。本实施例中防毒墙具体的查毒方法包括如下步骤:
客户端10.1.3.68通过端口3000访问服务器10.1.0.157,客户端发出的syn包经过防毒墙1和路径1,而服务器返回的synack包则经过路径2和防毒墙2,防毒墙1没有捕获到与syn包所对应的synnack包,由此,防毒墙1可以在客户端与服务器建立连接的过程中可以判断出防毒墙1捕获单向的数据流,同时也可得知,防毒墙2也捕获单向的数据流。
防毒墙1判断是否需要同步信息到防毒墙2,在本实施例中,使用POP3协议接收邮件,对于邮件的发送与接收,传输文件的网络位置可以根据邮件内容中的发件人及邮件主题确定,所以防毒墙1不需要发送同步信息到防毒墙2,本实施例中,防毒墙1不发送同步信息给防毒墙2。
如图9所示,POP3协议的邮件传输只发生在服务器的110端口到客户端的方向上。在客户端发出RETR命令试图收取某封邮件后,服务器返回“+OK\r\n”后开始发送邮件,邮件内容分成若干行发送,每行以“\r\n”结束,整封邮件以“.\r\n”结束。防毒墙2捕获接收邮件请求应答及邮件内容。
“+OK\r\n”是POP3服务器处理命令成功的应答,并不专属于RETR命令,不能作为邮件内容开始的标志。但邮件头部总是带有诸如“To”或“From”的行。防毒墙2在“+OK\r\n”后的数据包里匹配“to”或“From”等关键字,以此判断邮件开始传输的数据包,直到发现“.\r\n”结束,从而捕获整封邮件并进行还原。接收邮件内容与发送邮件内容相同,同样遵循MIME格式,防毒墙2可具体还原出邮件的内嵌资源或附件,从而防毒墙2可还原出完整的文件,顺利的利用扣包查毒方法对所捕获的单向数据流查杀病毒。
整个邮件在“to”或“From”等关键字之后的数据包中包含发件人及邮件主题,也即邮件的网络位置信息。当接收邮件有病毒时,防毒墙2报告病毒事件并同时报告带毒邮件的发件人及邮件主题。
实施例4:
使用FTP协议进行文件传输,本实施例中,防毒墙具体的查毒方法包括如下步骤:
FTP传输文件通过控制连接和数据连接合作完成。控制连接负责在客户端与服务器之间协商数据连接的端口,并指定待传输文件的路径。数据连接是控制连接的子连接,数据连接唯一的功能是文件传输。
数据连接分为主动连接和被动连接两种方式。主动连接是指,由客户端通过PORT命令指定随机端口x1,再由服务器20端口发起到客户端x1端口的连接;被动连接是指,由服务器通过对PASV命令的227应答指定随机端口y,客户端随机选择端口x2,并发起到服务器端口y的连接。
防毒墙必须通过捕获和解析PORT命令或227应答,才能跟踪到数据连接。数据连接的唯一目的是文件传输,可分为文件上传和文件下载。
因此,如图10所示,FTP协议的文件传输共有4种情形,包括:主动连接-文件上传,主动连接-文件下载,被动连接-文件上传和被动连接-文件下载。图10(a)为主动连接-文件上传,图10(b)为主动连接-文件下载,图10(c)为被动连接-文件上传,图10(d)为被动连接-文件下载。
如图10所示,FTP协议的文件传输中主动连接-文件上传的情形,防火墙1可以同时捕获PORT命令和上传的文件;被动连接-文件下载的情形,防火墙2可以同时捕获227应答和下载的文件。在这两种情况下,可以在没有另一侧防毒墙协助的情况下,跟踪到数据连接并从数据连接中正确地还原出传输文件。
而对于主动连接-文件下载和被动连接-文件上传的FTP文件传输的情形,对布置在双核心双出口星型网络出口处的防毒墙不能在只捕获TCP连接单向数据流时,还原传输文件并进行病毒扫描。
因此,在本实施例中,对上述四种使用FTP协议的文件传输情形,主动连接-文件上传,主动连接-文件下载,被动连接-文件上传,被动连接-文件下载都使用同步链路将防毒墙捕获到的PORT、STOR、RETR、CWD命令和227应答发送给另一侧的防毒墙。
本实施例中,防毒墙通过两台防毒墙之间的直连的双绞线发送同步信息到另一防毒墙。
下面分别对FTP协议文件传输的不同情形进行详细说明。
如图10(a)所示,对于主动连接-文件上传的FTP协议文件传输情形,防毒墙1捕获PORT、STOR、CWD命令和上传文件,防毒墙1通过防毒墙1和防毒墙2之间的同步链路将所捕获解析出的PORT、STOR、CWD命令信息发送给防毒墙2。
此时,由于上传文件也是通过的防毒墙1,因此,同步到防毒墙2的PORT、STOR、CWD命令信息并不实际使用,防毒墙1根据PORT命令,跟踪到即将发起的数据连接的TCP四元组特征,还原出传输文件,顺利地利用扣包方法对所捕获的TCP连接单向数据流进行病毒的查杀和阻断。
防毒墙1根据所捕获到的CWD命令,跟踪当前的文件操作目录;根据所捕获到STOR命令,跟踪到传输文件的文件名,再通过与跟踪到的操作目录组合,得到传输文件的完整网络位置信息,即FTP服务器上的文件路径。
当上传文件带有病毒时,防毒墙1报告病毒事件并同时报告带毒文件的FTP服务器路径。
如图10(b)所示,对于主动连接-文件下载的FTP协议文件传输情形,防毒墙1捕获解析出PORT、RETR、CWD命令,并通过防毒墙1和防毒墙2之间的同步链路将所捕获解析出的PORT、RETR、CWD命令信息发送给防毒墙2。
防毒墙2捕获下载文件。此时,防毒墙2根据防毒墙1发送过来的PORT命令,跟踪到即将发起的数据连接的TCP四元组特征,还原传输文件,顺利地利用扣包查毒方法对所捕获的TCP连接单向数据流进行病毒查杀和阻断。
防毒墙2根据由防毒墙1发送过来的CWD命令,跟踪当前的文件操作目录;根据由防毒墙1发送过来的RETR命令,跟踪到传输文件的文件名,通过与跟踪到的操作目录组合,得到传输文件的完整网络位置信息,即FTP服务器上的文件路径。
当下载文件带有病毒时,防毒墙2报告病毒事件并同时报告带毒文件的FTP服务器路径。
如图10(c)所示,对于被动连接-文件上传的FTP协议文件传输情形,防毒墙2捕获227应答,防毒墙2通过防毒墙1和防毒墙2之间的同步链路将所捕获的227应答信息发送给防毒墙1。
防毒墙1捕获上传文件。此时,防毒墙1根据防毒墙2发送过来的227应答,跟踪到即将发起的数据连接的TCP四元组特征,还原传输文件,顺利地利用扣包查毒方法对所捕获的TCP连接单向数据流进行病毒查杀和阻断。
防毒墙1根据本侧捕获的CWD命令,跟踪当前的文件操作目录;根据本侧捕获的STOR命令,跟踪到传输文件的文件名,通过与跟踪到的操作目录组合,得到传输文件的完整网络位置信息,即FTP服务器上的文件路径。
当上传文件带有病毒时,防毒墙1报告病毒事件并同时报告带毒文件的FTP服务器路径。
如图10(d)所示,对于被动连接-文件下载的FTP协议文件传输情形,防毒墙1捕获RETR、CWD命令,防毒墙1通过防毒墙1和防毒墙2之间的同步链路将所捕获解析出的RETR、CWD命令发送给防毒墙2。
防毒墙2根据本侧捕获的227应答,跟踪到即将发起的数据连接的TCP四元组特征,还原出传输文件,顺利地利用扣包查毒方法对所捕获的单向数据流查杀病毒。
防毒墙2根据防毒墙1同步过来的CWD命令,跟踪当前的文件操作目录;根据防毒墙1同步过来的RETR命令,跟踪到传输文件的文件名,通过与跟踪到的操作目录组合,得到传输文件的完整网络位置信息,即FTP服务器上的文件路径。
当下载文件带有病毒时,防毒墙2报告病毒事件并同时报告带毒文件的FTP服务器路径。
需要说明的是,防毒墙1与防毒墙2之间需要发送的数据包很少,占用的带宽和资源相当有限。防毒墙1和防毒墙2之间的同步链路构成了两台防毒墙之间的松散耦合关系,对于常用网络协议当防毒墙1和防毒墙2中任一台防毒墙宕机或同步信息丢失时,只会造成使用部分协议传输的文件网络位置信息无法确定,不会对另一侧防毒墙的半连接查毒和连通性造成影响,因此不破坏双核心双出口星型网络拓扑本身的冗余性质;对于类似FTP协议这样带有子连接的协议,当防毒墙1和防毒墙2中任一台防毒墙宕机或同步信息丢失时,可能会导致漏毒的发生,但不会对网络连通性造成任何影响,不破坏网络拓扑本身的冗余性质。
对于未列举的更多协议,也可以如法炮制,在此不作一一详细说明。
基于同一发明构思,本发明实施例还提供了双核心双出口星型网络的防毒装置,由于此装置解决问题的原理与前述双核心双出口星型网络的防毒方法相似,因此该装置的实施可以参见前述方法的实施,重复之处不再赘述。
本发明实施例提供了一种双核心双出口星型网络的防毒装置,所述防毒装置用于对双核心双出口星型网络数据传输中的病毒进行查杀,以保证网络安全。
所述防毒装置包括两台分别部署在双核心双出口星型网路双侧链路上的防毒墙,两侧防毒墙之间通过同步链路连接。
双核心网络与外部网络的交互流量通过防毒墙进行传输;
所述同步链路物理连接两侧防毒墙,传输两侧防毒墙之间的同步信息;
较佳地,作为一种可实施方式,本实施例中的同步链路通过直连的双绞线实现。
所述防毒墙用于查杀双核心双出口星型网络传输的数据流中的病毒,采用扣包查毒的方法对传输数据流中的病毒进行查杀和阻断。
所述两侧防毒墙由相同的模块组成,如图11所示,包括:
配置模块10、数据流捕获模块20、半连接判断模块30、扣包查毒模块40、信息同步模块50、单向数据流处理模块60和病毒报告模块70。
所述配置模块10用于配置两台防毒墙之间互相连通,并通过同步链路接收、发送同步信息。
配置模块10中设有用于发送、接收同步信息的网卡,并进行物理连接,当信息同步模块判断需要发送同步信息到另一防毒墙时,配置模块通过所述网卡发送同步信息到同步链路,或接受另一防毒墙通过同步链路发送同步信息。
所述数据流捕获模块20用于捕获经过防毒墙的数据流。
所述半连接判断模块30用于判断防毒墙是否捕获单向的数据流,当防毒墙捕获双向数据流时,则利用扣包查毒模块40直接对数据流查杀病毒处理;当防毒墙捕获单向的数据流时,则利用信息同步模块50对数据流进行处理。
所述扣包查毒模块40用于对防毒墙所捕获的数据流中的病毒进行查杀,当半连接判断模块30对数据流捕获模块20所捕获的数据流进行判断后,防毒墙捕获双向数据流时,则扣包查毒模块40直接对数据流捕获模块20捕获的双向数据流中的病毒进行查杀;
此处需要说明的是,防毒墙对所捕获数据流都利用扣包查毒模块40查杀病毒处理,对于需要进行文件还原之后才能进行扣包查毒的传输文件,则经过单向数据流处理模块60还原文件之后利用扣包查毒方法查杀病毒。
所述信息同步模块50用于根据所接收的单向数据流判断是否需要发送同步信息到另一防毒墙,当需要发送同步信息到另一防毒墙时,则发送同步信息,并通过配置模块10将同步信息通过同步链路发送给另一防毒墙,否则直接利用单向数据流处理模块60对单向数据流进行处理。
需要说明的是,所述同步信息是用来确定传输文件网络位置的信息,要同步的数据包很小,占用的带宽和资源相当有限。如在使用HTTP协议进行文件传输时的客户端请求信息。
所述网络位置信息包括传输文件所在的web站点(URL),FTP服务器的路径、邮件主题、发件人及收件人等
对于邮件的发送和邮件的接收,分别使用SMTP和POP3协议传输的文件,可以直接由对传输内容的解析中直接得到发件人、邮件主题则不需要再发送同步信息到另一防毒墙。
所述单向数据流处理模块60用于选择利用同步信息配合扣包查毒模块40对防毒墙捕获的单向数据流进行病毒的查杀,并确定单向数据流的网络位置信息。
所述单向数据流处理模块60选择利用同步信息还原传输文件,确定传输文件的网络位置信息。
对于使用HTTP协议传输的数据流,HTTP应答具有固定的格式,由起始行,消息头和消息体3部分构成。
起始行包含协议版本号,应答状态码和应答状态描述3个域构成。
消息头由若干消息头域组成,描述HTTP应答的各种属性,如服务器信息、cookie值、传输文件类型、传输文件采用何种压缩格式、传输文件大小、是否采用分块传输以及是否采用MIME格式传输等。
对HTTP应答消息头进行解析,明确HTTP协议的应答,携带的文件的大小、类型、压缩格式及传输方式。
消息体就是传输文件,通常分成若干TCP数据包进行传送。根据对HTTP消息头的解析结果,单向数据流处理模块60从HTTP应答中还原出传输文件,并交给扣包查毒模块40查杀病毒。
所述单向数据流处理模块60通过TCP四元组将通过同步链路发送过来的GET请求与捕获到的HTTP应答置入同一个TCP连接数据结构中进行处理,在GET请求起始行的URL与传输文件之间建立对应关系,根据从GET请求起始行的URL域中获得的网络位置信息确定传输文件的网络位置信息。
对于使用SMTP协议发送邮件时,防毒墙捕获整个邮件,单向数据流处理模块60在“DATA\r\n”命令与“.\r\n”命令之间捕获整个邮件。邮件内容遵循MIME格式,单向数据流处理模60块具体还原出邮件的内嵌资源或附件,并交给扣包查毒模块40查杀病毒。
整个邮件在“DATA\r\n”命令之后的数据包中包含发件人及邮件主题,由此,单向数据处理模块60可确定邮件的发件人及主题,也即邮件的网络位置信息。
对于使用POP3协议接收邮件时,防毒墙捕获整个邮件,单向数据流处理模块60在“+OK\r\n”后的数据包里匹配“to”或“From”等关键字,以此判断邮件开始传输的数据包,直到发现“.\r\n”结束,从而捕获整封邮件。接收邮件内容遵循MIME格式,单向数据流处理模块60具体还原出邮件的内嵌资源或附件,并交给扣包查毒模块40查杀病毒。
整个邮件在“to”或“From”等关键字之后的数据包中包含发件人及邮件主题,由此,单向数据流处理模块60可确定邮件的发件人及主题,也即邮件的网络位置信息。
对于使用FTP协议传输的数据流,实施例4中已有非常详细的介绍,此处不再赘述。
所述病毒报告模块70用于在有病毒事件发生时,报告病毒事件,并同时报告带毒文件的网络位置。
防毒墙捕获双向数据流时,扣包查毒模块40对数据流查杀病毒后,如果发现带毒文件,则病毒报告模块60报告病毒事件,同时报告带毒文件的网络位置;防毒墙捕获单向数据流时,扣包查毒模块40对数据流查杀病毒后,如果发现带毒文件,则病毒报告模块60报告病毒事件,并根据单向数据流处理模块60确定的网络位置信息,同时报告带毒文件的网络位置。
本发明实施例还提供一种双核心双出口星型网络的防毒系统,其包括服务器和客户端,及所述双核心双出口星型网络的防毒装置。
所述服务器用于接收处理客户端发送的数据流,或发送数据流到客户端。
所述客户端用于发送数据流到服务器,或接收处理所述服务器发送的数据流;
所述双核心双出口星型网络的防毒装置对所述数据流进行病毒的查杀和阻断。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。