流过滤防火墙的制作方法

文档序号:7558985阅读:197来源:国知局

专利名称::流过滤防火墙的制作方法
技术领域
:本发明是涉及一种用于计算机网络的流过滤防火墙,它属于计算机网络安全领域防火墙(Firewal)
技术领域

背景技术
:目前市场上存在着各种各样的网络安全工具,而技术最成熟、最早产品化的就是防火墙,由于防火墙技术地针对性很强,它已成为实现Internet网络安全的最重要的保障之一,流过滤防火墙在状态包过滤的基础上,采用了专门设计的TCP协议栈实现对应用协议信息流的过滤,能够实现在透明方式下对应用层协议的控制,系统的整体结构严格按照国家应用级防火墙的最新标准设计,具备完善的身份鉴别、访问控制和审计能力,经国家有关部门检测,流过滤防火墙符合GB/18019-1999(包过波防火墙安全技术要求)和GB/18020-1999(应用级防火墙安全技术要求)两个标准的技术要求;按照防火墙的实现技术,一般分为包过滤防火墙(PacketFilterFirewall)、应用级网关(Application-LayerGateway)、状态包过滤防火墙(StatefulInspectionFirewall)。其中包过滤防火墙包过滤技术,历史上最早在路由器上实现,称之为包过滤路由器,根据用户定义的内容,例如IP地址、端口号,来对包进行过滤,包过滤防火墙在网络层对数据包进行检查,并且与应用服务无关(Applicationindependent),这使得包过滤防火墙具有良好的性能和易升级性,。但是,包过滤防火墙是安全性最差的一类防火墙,因为包过滤不能根据应用层的信息对包进行过滤,这意味着,包过滤对应用层的的攻击行为是无能为力的,这使得包过滤比较容易被攻击攻破;应用级网关打破了原有的客户/服务器模式,它把客户机和服务器隔离开来,使用特定的代理服务软件来转发和过滤特定的应用服务,这使得每一个客户机和服务器之间的通信需要两个连接一个连接从客户机到防火墙,一个连接从防火墙到服务器。而且代理服务能够提供严格的用户认证,这是包过滤防火墙做不到的,因此应用级网关在安全性方面比包过滤防火墙要强,但是,每一个代理服务都需要一个特定的应用进程或守护进程,这使得升级原有应用代理服务和支持新的应用代理服务成为一个麻烦的问题,而且应用级网关在性能上要逊色于包过滤,透明性也较差。状态包过滤防火墙状态包过滤防火墙基于包过滤实现了状态包过滤而且不打破原有客户/服务器模式,克服了前两种防火墙的限制。在状态包过滤防火墙中,数据包被截获后,状态包过滤防火墙从数据包中提取连接状态信息(TCP的连接状态信息,如TCP_SYN、TCP_ACK,以及UDP和ICMP的模拟连接状态信息),并把这些信息放到动态连接表中动态维护,当后续数据包来时,将后续数据包及其状态信息和其前一时刻的数据包及其状态信息进行比较,防火墙就能做出决策后续的数据包是否允许通过,从而达到保护网络安全的目的。由于状态包过滤是基于包过滤的,它保留了包过滤的高性能、速度快,与应用级网关相比,状态包过滤防火墙使用用户定义的过滤规则,而不依赖预先定义的应用信息,执行效率比应用级网关高,而且它不识别特定的应用层信息,因此不用像应用级网关那样,为不同的应用代理服务提供不同的应用进程,伸缩性好。
发明内容针对以上实现方法的不足,本发明在状态包过滤的基础上,采用了专门设计的TCP协议栈实现对应用协议信息流的过滤,能够实现在透明方式下的对应用层协议的控制能力,系统的整体结构严格按照国家应用级防火墙的标准设计,具备完善的身份鉴别、访问控制和审计能力,同时,系统提供了丰富的GUI方式的管理和监控工具,能够方便的对系统进行安全策略配置、用户管理、实时监控、审计查询、流量管理等操作,为保证系统的安全运行,系统能够有效的防范多种DOS的攻击手段,并对攻击事件进行报警。本发明的技术方案是这样实现的本发明是基于状态包过滤的流过滤体系结构,保证从数据链路层到应用层的完全高性能过滤,由系统的硬件模块和软件控制程序组成,系统的主要模块工作在操作系统的内核模式下,并对协议的处理进行了优化,其性能接近线速,其千兆版本能够利用多处理器的能力处理超过100万的并发连接,完全满足高速、对性能要求苛刻网络的应用,流过滤防火墙体系结构图(如图1所示)。本发明以状态检测包过滤为基础实现了一种称之为“流过滤”的结构,其基本的控制方法是以状态包过滤的形态实现对应用层的保护,通过内嵌的专门实现的TCP协议栈,在状态检测包过滤的基础上实现了透明的应用信息过滤机制,在这种机制下,从防火墙外部看,仍然是包过滤的形态,工作在链路层或IP层,在规则允许下,两端可以直接的访问,但是对于任何一个被规则允许的访问在防火墙内部都存在两个完全独立的TCP会话,数据是以“流”的方式从一个会话流向另一个会话,由于防火墙的应用层策略位于流的中间,因此可以在任何时候代替服务器或客户端参与应用层的会话,从而起到了与应用代理防火墙相同的控制能力。比如在流过滤防火墙对SMTP协议的处理中,系统可以在透明网桥的模式下实现完全的对邮件的存储转发,并实现丰富的SMTP协议的各种攻击的防范功能。流过滤的结构继承了包过滤防火墙和应用代理的特点,因而非常容易部署,并且由于应用层安全策略与网络层安全策略是紧密的,所以在任何一种部署方式下,都能够起到相同的保护作用,以下分析了“流过滤”与“数据包内容过滤”,与“应用代理(网关)”的比较。“流过滤”与“数据包内容过滤”的比较需要先明确一下,到目前为止,大量的包过滤防火墙仍完全不具备应用层保护能力,有些产品甚至连状态检测都不具备,这里所提到的“数据包内容过滤”是指那些能够提供对数据包内容进行检测的包过滤产品,通过对比可以看到所谓“内容过滤”其实并不能提供真正意义上的应用层保护。首先应用代理与数据包内容过滤的不同,应用代理之所以能够对应用层进行完整的保护,在于其借助操作系统的TCP协议栈对于出入网络的应用数据包进行完全重组,并从操作系统提供的接口(socket)中以数据流的方式提取应用层数据;而包过滤防火墙中的数据包内容过滤仅能对当前正在通过的单一数据包的内容进行分析的判断,这两者在保护能力上存在本质的不同。例如一个携带攻击特征的URL访问可能有256个字节,如果它们在一个数据包中传送,那么两种技术的防火墙都能够发现并拦截,但是如果这个URL被TCP协议栈分解成10个小的IP数据包,并且以乱序的方式发送给目标服务器,则包过滤防火墙根本无法识别这个攻击的企图。而应用代理则完全不会受到干扰,依然能够识别并进行拦截,因为数据包在网关的TCP协议栈中被按照正确的顺序有效的重新组合成数据流后才到达防火墙的过滤模块,它看到的仍然是完整的数据流。基于流过滤技术的流过滤防火墙之所以能够提供等同于代理防火墙的应用层保护能力,关键在于其“流过滤”架构中的专用TCP协议栈。这个协议栈是个标准的TCP协议的实现,依据TCP协议的定义对出入防火墙的数据包进行了完整的重组,重组后的数据流交给应用层过滤逻辑进行过滤,从而可以有效的识别并拦截应用层的攻击企图。“流过滤”技术与“应用代理(网关)技术的差别透明性差别应用代理建立在操作系统中提供的socket接口之上,提供这个接口的普通TCP协议栈是为主机对外提供服务和对外进行访问而实现的,为了使用这个协议栈进行进行数据包重组,防火墙本机必须存在TCP的访问点,即IP地址和端口,这导致应用代理对于应用协议来说不可能是透明的,应用协议需要“知道”并且“允许”这个中间环节的存在。而这个条件在很多时候是不能够满足的,用户如果要部署应用代理防火墙,通常要对其网络拓扑结构和应用系统的部署进行调整,如我们浏览器中庙宇代理网关的IP地址和端口才可能使浏览器按照存在一个中间代理的方式访问网站,换句话说,浏览器需要“知道”这个代理的存在,那么对于其他类型的应用协议呢?很多时候,应用协议的设计并不允许我们在其中增加一个过滤环节,这意味着代理防火墙提供应用保护的协议范围是十分有限的。流过滤防火墙的流过滤结构则不同,它完全不需要用户调整网络结构和应用系统,它可以在防火墙的任何部署方式下提供完全一致的应用的保护能力,流过滤防火墙运动路由模式和交换模式,前者在网络中等同于一个路由器,后者则相当于一个链路层的交换机,本身可以完全没有IP地址,这意味着用户不需要为了获得应用层保护能力而改变网络结构和应用系统,甚至当用户改变防火墙的运行模式时,也完全不需要调整应用层的保护策略(过滤规则),它会与原来完全等同的效果去执行。通常在一个已有的提供Web访问的服务器群中又增加了一个Web服务器,并且使用IIS,那么用户仅需要在防火墙上增加一条针对IIS漏洞的应用过滤规则即可以达到对该服务器的保护目的,而服务器本身则完全不需要考虑防火墙的存在。另外,某个企业网络通过一个包过滤防火墙对外进行Internet访问,某天管理员想要过滤Web访问中的危险的包含Nimda病毒的页面,只需要在原有的访问出口上串接一个工作在交换模式下的流过防火墙,并配置一条针对Nimda病毒的过滤规则即可,不需要调整任何一个IP地址,也不需要在内网的数丰个PC的浏览器上配置代理服务器设置。同样对于任何流过滤防火墙提供的应用保护协议,都对网络结构和应用系统完全透明,比如可以在交换栻下对通过防火墙的邮件标题进行关键字过滤,并对携带某些关键字的邮件采取“丢弃”的策略,则那些携带了某些关键字的“不好”的邮件在到达内部的邮件服务器前就完全“消失”了,无论是服务器还是该邮件的发送者都不会觉察,这样的功能可以非常有效的防止垃圾邮个进入企业内部,并且非常容易实施(不需要修改邮件服务器和DNS的配置)。性能差别流过滤防火墙中的TCP协议栈是专为防火墙的进行数据流转发而设计的,其在数据分析过程中的拷贝次数、内存资源的开销方面都优于普通操作系统的TCP协议栈。应用代理系统使用操作系统的socket接口,对于任何一个通过防火墙的连接都必须消耗两个socket资源,而这个资源在普通操作系统中是非常紧缺的,通常只能允许同时处理一、两千个并发的连接,即使对于一个流量较小的网络来说这也不是一个很大的数量。同时,典型的代理系统需要为每一个连接创建一个进程,当几千个连接存在时,大量的进程会消耗掉非常多的内在,并使CPU在上下文切换中浪费掉大量的处理资源,系统的吞吐能力会急剧下降。流过滤防火墙不使用socket接口,而是采用了一种事件驱动的内核接口,一个内核进程可以使用很小的开销同时处理几万甚至几十万的并发连接,正是这种先进的架构使得流过滤防火墙可以在非常繁忙的站点提供有效的应用层保护。流过滤防火墙的性能与其它防火墙比较,如下列图表给出。流过滤体系结构的防火墙具有非常好的可扩展性在流过滤的平台基础上,我们可以进行应用级的插件的开发和升级、各种攻击方式的及时的响应和升级,动态保护网络网络安全。流过滤防火墙提供的HTTP过滤功能特性有URL和小程序(JavaApplet和ActiveX)两种类型的请求过滤、页面内容过滤,并且提供了HTTP命令级控制,比较常用的命令有CET(用于请求页面)、PUT(用于把本地页面上载到HTTP服务器)、POST(用来提交在页面中输入的信息)。流过滤防火墙提供的FIP过滤功能特性有命令级控制,其中比较常用的命令有GET(用于下载文件)、PUT(用于把本地文件上载到FIP服务器),以及基于命令级控制实现的对目录和文件的访问控制。流过滤防火墙提供的SMTP过滤功能特性有主题过滤、正文过滤、附带文件过滤、地址过滤、防止邮件炸弹、限制邮件大小、限制邮件Relay等功能。对于上述所有的应用协议,都可以通过隐藏或替换服务器的标识信息达到防止服务器信息泄漏的目的,这个功能可以有效的阻止对服务器的扫描。网络安全本身是一个动态的,其变化非常声带,每天都有可能有新的攻击方式产生。安全策略必须能够随着攻击方式的产生而进行动态的调整,这样才能够动态的保护网络的安全,基于状态包过滤的流过滤体系结构,具有动态保护网络安全的特性,例如,由于新的Nimda病毒的出现、SQLSERVER蠕虫病毒的泛滥,使很多企业网络甚至于整个Internet的骨干陷入瘫痪,但是用了流过滤防火墙的企业,受益于流过滤体系结构的保护,及时加了相关的内容过滤规则,及时的获得了防御升级包,有效的保护了网络免受病毒的困扰,流过滤防火墙的安全响应小组对于新的攻击方式时刻进行跟踪,并第一时间发布解决方案,使流过滤防火墙能够有效的抵御各种新的攻击,动态保障网络安全。流过滤防火墙实现的方法由三部分组成流过滤层次图(如图2所示)1)状态包过滤在链路层或者是IP层实现状态包过滤,防火墙从数据包中提取连接状态信息(TCP的连接状态信息,有TCP_SYN、TCP_ACK,以及UDP和ICMP的模拟连接状态信息),并把这些信息放到动态连接表中动态维护,当后续数据包来时,将后续数据包及其状态信息和其前一时刻的数据包及其状态信息进行比较,防火墙就能做出决策后续的数据包是否允许通过。2)专用的TCP/UDP协议栈这个协议栈是个标准的TCP/UDP协议的实现,依据TCP/UDP协议的定义对出入防火墙的数据包进行了完整的重组,重组后的数据流交给应用层过滤逻辑进行过滤。3)应用层安全策略根据不同的应用层协议,按照用户制定的应用层安全策略对应用层数据进行过滤,由于防火墙的应用层策略位于数据流的中间,因此可以在任何时候代替服务器或客户端参与应用层的会话,从而起到了与应用代理防火墙相同的控制能力。当用户需要作用不同的应用层安全策略的时候,可以忘却对应的应用层安全策略模块,或者添加新的应用层安全策略插件。应用规则和要求流过滤部门目前主要包括对HTTP、FTP、SMTP等应用提供过滤功能,规则的要求主要依据TIS(TrustedInformationSystems)。1、HTTP对于HTTP提供以下过滤功能特性描述1)限制URLS;2)ActiveX,JAVAAPPLET和CGI的过滤;3)发送禁止页面;4)提供命令级控制;5)对页面内容进行关键字过滤该部分维护一个指定的URL规则列表,格式为允许/拒绝[命令][URL、]ActiveX,JAVAAPPLET][关键字]该规则表示允许/拒绝主机对某个页面的访问。表示允许/拒绝使用的HTTP命令。表示允许/拒绝访问的URL。表示允许/拒绝使用ActiveX,或JAVAAPPLET。表示允许/拒绝在页面中出现的文字内容。2、FTP对于FTP提供以下过滤功能特性描述对于FTP主要提供命令级的过滤功能NATport命令以及pasv命令中对包的内容做修改,还要上载NAT临时性规则和包过滤临时性规则。规则格式为允许/拒绝命令参数该规则表示允许/拒绝某个主机的FTP访问。命令表示允许/拒绝进行的命令操作。参数表示允许/拒绝命令中可使用的参数。3、对于SMTP提供以下过滤功能特性描述1)对SMTP提供命令级的过滤功能;2)对SMTP提供内容级的过滤主题过滤、正文过滤、附带文件过滤;3)提供防止邮件炸弹的功能;4)对邮件的合法性进行检查地址过滤、限制邮件大小、限制邮件Relay等;5)防止缓存器溢出;6)对CGI漏洞攻击的防范。规则格式为允许/拒绝主题关键字允许/拒绝正文关键字允许/拒绝附件名称关键字允许/拒绝邮件地址允许/拒绝邮件域允许/邮件长度其它规则该规则表示允许/拒绝对某个主机的SMTP访问。主题关键字表示允许/拒绝在邮件主题中出现的关键字。正文关键字表示允许/拒绝在邮件正文中出现的关键字。附件名称关键字表示允许/拒绝在邮件附件名称中出现的关键字。邮件地址表示允许/拒绝发送)接收)邮件的地址。邮件域表示允许/拒绝发送(接收)邮件的域。邮件长度表示每次可以发送邮件的最大长度。其它规则确定邮件炸弹及其它相关的规则。流过滤防火墙实现方法由下列步骤组成流过滤防火墙实现方法流程图(如图3所示)1、各应用守护进程在内核创建一个访问服务点TCP_LISTEN,从内核取来数据包TCP_RECV,若需要认证的,则提交认证部分处理;2、需要流内容过滤的,则按应用分为HTTP、FTP、SMTP等按照各自的允许或拒绝规则分别进行相应的处理;3、若允许,则把该包提交给内核继续发送TCP_SEND;4、若拒绝,则构造拒绝句,并说明拒绝的原因,并把有关该包的相应信息通知给事件服务器。实现本方法由下列硬件模块组成,每个模块控制方法包括以下步骤HTTP过滤模块该模块首先进行系统数据的初始化,在内核创建访问服务点TCP_LISTEN,获取规则,获取数据包TCP_RECV,创建连接表,获取连接的请求URL,然后进行规则匹配,根据匹配的结果决定该连接是允许还是拒绝,当接收到HTTP响应的时候,则对响应的内容进行关键字匹配,根据匹配结果决定改连接是允许还是拒绝,然后改变控制TCP_SESSION_CTL,提交内核处理该连接的数据包。数据包的处理有三种数据包允许通过,则直接发送;数据包丢弃数据包构造。实现难点URL的匹配。FTP过滤模块该模块首先进行系统数据的初始化,在内核创建访问服务点TCP_LISTEN,获取规则,获取数据包TCP_RECV,创建连接表,然后进行规则匹配,若拒绝该连接,则构造应答包,说明拒绝原因,清除该连接,否则,分析控制数据包,若收到PASV命令或PORT命令,昌需要根据NAT规则来修改数据包,以保证数据连接。实现难点根据NAT修改数据包。SMTP过滤模块该模块首先进行系统数据的初始化,在内核创建访问服务点TCP_LISTEN,获取规则,获取数据包TCP_RECV,创建连接表,然后进行规则匹配,若拒绝该连接,则构造应答包,说明拒绝原因,清除该连接。内部实现对MALL首部信息和MALL命令的检查,特别是邮件地址的合法性。实现难点数据包的存放和邮件的发送。各个模块的内部结构包括以下几个部分数据初始化,获取规则,流过滤检查,发送数据包本发明的优点具有完善的身份鉴别、访问控制和审计能力;同时,系统提供了丰富的GUI方式的管理和监控工具,能够方便的对系统进行安全策略配置、用户管理、实时监控、审计查询、流量管理等操作;为保证系统的安全运行,系统能够有效的防范多种DOS的攻击手段,并对攻击事件进行报警。图1为流过滤防火墙体系结构图2为流过滤层次图3为流过滤防火墙实现方法流程具体实施例方式本发明详细结构及工作原理结合附图加以详细说明。流过滤防火墙实现的原理应用规则流过滤部分目前主要包括对HTTP、FTP、SMTP等应用提供过滤功能。规则的制订主要参考TIS(TrustedInformationSystems)。1、HTTP对于HTTP提供以下过滤功能特性描述1)限制URLS;2)ActiveX,JAVAAPPLET和CGI的过滤;3)发送禁止页面;4)提供命令级控制;5)对页面内容进行关键字过滤该部分维护一个指定的URL规则列表,格式为允许/拒绝[命令][URL][ActiveX,JAVAAPPLET][关键字]该规则表示允许/拒绝主机对某个页面的访问。表示允许/拒绝使用的HTTP命令。表示允许/拒绝访问的URL。表示允许/拒绝使用ActiveX或JAVAAPPLET。表示允许/拒绝在页面中出现的文字内容。2、FTP对于FTP提供以下过滤功能特性描述1)对于FTP主要提供命令级的过滤功能2)NATport命令以及pasv命令中对包的内容做修改,还要上载NAT临时性规则和包过滤临时性规则。规则格式为允许/拒绝命令参数该规则表示允许/拒绝对某个主机的FTP访问。命令表示允许/拒绝进行的命令操作。参数表示允许/拒绝命令中可使用的参数。3、对于SMTP提供以下过滤功能特性描述1)对SMTP提供命令级的过滤功能2)对SMTP提供内容级的过滤主题过滤、正文过滤、附带文件过滤3)提供防止邮件炸弹的功能4)对邮件的合法性进行检查地址过滤、限制邮件大小、限制邮件Relay等5)防止缓存器溢出6)对CGI漏洞攻击的防范规则格式为允许/拒绝主题关键字允许/拒绝正文关键字允许/拒绝附件名称关键字允许/拒绝邮件地址允许/拒绝邮件域允许邮件长度其它规则该规则表示允许/拒绝对某个主机的SMTP访问。主题关键字表示允许/拒绝在邮件主题中出现的关键字。正文关键字表示允许/拒绝在邮件正文中出现的关键字。·附件名称关键字表示允许/拒绝在邮件附件名称中出现的关键字。邮件地址表示允许/拒绝发送(接收)邮件的地址。邮件域表示允许/拒绝发送(接收)邮件的域。邮件长度表示每次可以发送邮件的最大长度。其它规则确定邮件炸弹及其它相关的规则。各模块的流程图具体流程为各应用守护进程在内核创建一个访问服务点TCP-LISTEN,从内核取来数据包TCP-RECV,若需要认证的,则提交认证部分处理;若需要流内容过滤的,则按应用分为HTTP、FTP、SMTP等按照各自的允许或拒绝规则分别进行相应的处理,若允许,则把该包提交给内核继续发送TCP-SEND;若拒绝,则构造拒绝包,并说明拒绝的原因,并把有关该包的相应信息通知给事件服务器。HTTP过滤模块该模块首先进行系统数据的初始化,在内核创建访问服务点TCP_LISTEN,获取规则,获取数据包TCP_RECV,创建连接表,获取该连接的请求URL,然后进行规则匹配,根据匹配结果决定该连接是允许还是拒绝。当接收到HTTP响应的时候,则对响应的内容进行关键字匹配,根据匹配结果决定改连接是允许还是拒绝。然后改变控制TCP_SESSION_CTL,提交内核处理该连接的数据包。数据包的处理有三种数据包允许通过,则直接发送;数据包丢弃;数据包构造。实现难点URL的匹配。FTP过滤模块该模块首先进行系统数据的初始化,在内核创建访问服务点TCP_LISTEN,获取规则,获取数据包TCP_RECV,创建连接表,然后进行规则匹配,若拒绝该连接,则构造应答包,说明拒绝原因,清除该连接。否则,分析控制数据包,若收到PASV命令或PORT命令,则需要根据NAT规则来修改数据包,以保证数据连接。实现难点根据NAT修改数据包。SMTP过滤模块该模块首先进行系统数据的初始化,在内核创建访问服务点TCP_LISTEN,获取规则,获取数据包TCP_RECV,创建连接表,然后进行规则匹配,若拒绝该连接,则构造应答包,说明拒绝原因,清除该连接。内部实现对MAIL首部信息和MAIL命令的检查,特别是邮件地址的合法性。实现难点数据包的存放和邮件的发送。各个模块的结构主要包括以下几个部分数据初始化,获取规则,流过滤检查,发送数据包主要实现函数  HTTP部分  http_init()数据初始化模块;<!--SIPO<DPn="10">--><dpn="d10"/>  load_http_rule()获取URL规则模块;  http_filter()内容过滤模块;对于某个连接,需要完整的URL故定义结构  #defineURL_LEN1024/*definemaximumurllength*/#defineBUF_LEN2048/*definemaximumbufferlength*/structhttp_blk{  unsignedintsip;/*sourceIPaddress*/  unsignedintdip;/*destinationIPaddress*/  unsignedshortspt;/*sourceport*/  unsignedshortdpt;/*destinationport*/struct{  unsignedcharmethod[16];/*requestmethod*/  unsignedcharurl[URL_LEN];/*requesturl*/  unsignedinturl_len;/*thelengthofurl*/  unsignedcharversion[10];/*HTTPversion*/  }request_line;  unsignedcharrcv_buf[BUF_LEN];/*buffertoreceivedata*/  unsignedintrcv_buf_len;/*thelengthofreceiveddata*/};FTP部分  ftp_init()系统初始化模块;  load_ftp_rule()获取FTP规则模块;  ftp_filter()FTP命令过滤模块;SMTP部分  smtp_init()系统初始化模块;  load_smtp_rule()获取SMTP规则模块;  smtp_filter()STMP过滤模块;对于某个连接,需要保存MAIL的首部信息,故定义结构#defineBUF_SIZ2048/*definebuffersize*/structsmtp_blk{  unsignedintsip;/*sourceIPaddress*/  unsignedintdip;/*destinationIPaddress*/  unsignedshortspt;/*sourceport*/  unsignedshortdpt;/*destinationport*/  unsignedintlen;/*bufferlength*/<!--SIPO<DPn="11">--><dpn="d11"/>  unsignedcharbuf[BUF_SIZ];/*nowstoredcontent*/  ......  };配置文件  /fwsys/var/rules/user/filterdef/HTTP/目录下为HTTP规则配置文件;  /fwsys/var/rules/user/filterdef/FTP/目录下为FTP规则配置文件;  /fwsys/var/rules/user/filterdef/SMTP/目录下为SMTP规则配置文件。滑动窗口和数据包的重组滑动窗口的原理主要为一个传输分组序列,在分组序列中放置一个固定长度的小窗口,该窗口内的分组可以同时发送出去而不必等待确认的到来,当该窗口内的第一个分组确认来了后,该窗口可以向后移动,从而可以发送下一个分组。随着确认的到来,窗口不断的移动,提高了网络的利用率。在透明代理的实现中,对应每个连接的数据包需要两个滑动窗口来处理。一个处理客户端,一个处理服务端。客户端窗口负责处理从客户端发送到服务端的数据包,服务端窗口负责处理从服务端发送到客户端的数据包。对应客户端的窗口来说,只有对该连接窗口中的第一个数据包到来后,才允许窗口的滑动;同样,对应服务端的窗口来说,只有对该连接窗口中的第一个数据包到来后,才允许窗口的滑动。当该连接终止时,清除滑动窗口。例外的处理当一个连接的请求/应答包经过一定时间没有到来时,需要终止该连接,同时清除该连接的相应信息。实现难点滑动窗口的控制。数据包的流程如下通过内核API的调用TCP_RECV取得数据包之后,分析该数据包的合法性,若非法,则丢弃;否则找到该数据包所在的连接,放到相应连接的窗口中,经过滑动窗口处理后,若数据包为客户端发出的包,则需要构造应答包,以保证后续包的到来;若数据包为服务端发来的包,则直接提交内核TCP_SEND把数据包发送出去。对于HTTP来说,当某个连接的请求URL完全收到后,经过URL过滤规则的检查,若为非法URL,则拒绝该连接,同时构造拒绝包,说明拒绝原因,断掉该连接。若为合法URL,则提交该连接的请求,同时把该连接的控制完全交给内核直接处理。若需要进行内容过滤检查,则需要保存相邻的几个数据包,以便进行内容合法性检查。对于FTP来说,直接分析控制连接即可。当收到新连接的数据包时,首先进行过滤规则的检查,若为非法地址来的连接,则拒绝,同时构造拒绝包,说明拒绝原因,断掉该连接。对于SMTP来说,直接分析MAIL的头信息和MAIL地址的合法性检查。当某个连接经过一段时间没有数据包到来,内核应通知用户态。这样,用户态便可以清除相应的信息,而不用再单独设置定时器了。API层的实现为了使系统具有更好的模块性,特把各应用的共同部分抽取出来组成应用API层。该层负责和内核部分进行数据包的交互和数据包的重组实现。API层是应用进程的一部分。API层主要是抽取各应用的公用部分而实现。主要包括TCP初始化(init_tcp()),接收数据包(recv_tcp_pkt()),发送数据包(send_tcp_pkt()),控制连接(ctl_tcp_session()),关闭TCP(close_tcp()),取数据包(get_packet())。说明前面声明为static的变量或函数为内部使用,即对外透明。  主要数据结构和API函数structtcp_pkt{  intstate;/*packetstate*/  unsignedintsip;/*sourceIPaddress*/  unsignedintdip;/*destinationIPaddress*/  unsignedshortspt;/*sourceport*/  unsignedshortdpt;/*destinationport*/  unsignedintlen;/*thelengthofdatapacket*/  unsignedchar*pkt;/*datapointer*/};·structtcp_key{  unsignedintsip;/*sourceIPaddress*/  unsignedintdip;/*destinationIPaddress*/  unsignedshortspt;/*sourceport*/  unsignedshortdpt;/*destinationport*/};structcp_win{  intflg;/*thewindowstate*/  /*0free;1sendOK;-1readysend*/  unsignedintseq;/*sequenceNo.ofthepacket*/  unsignedintack;/*acknowledgementNo.ofthepacket*/  unsignedintlen;/*thelengthofdatapacket*/  unsignedchar*pkt;/*packetdatapointer*/};structtcp_blk{  intflg;/*thestateofthetcpblock*/  /*0free;1used*/  unsignedintsip;/*sourceIPaddress*/  unsignedintdip;/*destinationIPaddress*/  unsignedshortspt;/*sourceport*/  unsignedshortdpt;/*destinationport*/  unsignedintcseq;/*maxreceivedsequenceNo.(client->server)*/  unsignedintcack;/*maxreceivedacknowledgementNo.(cli->ser)*/  structtcp_win*cli_win;/*client->serverpacketqueue*/<!--SIPO<DPn="13">--><dpn="d13"/>  unsignedintsseq;/*maxreceivedsequenceNo.(server->client)*/  unsignedintsack;/*maxreceivedacknowledgementNo.(ser->cli)*/  structtcp_win*ser_win;/*server->clientpacketqueue*/};structtimer_link{  structfw_avl_node*top;  structfw_avl_node*tail;  intnum;  inttimeout;};staticunsignedintMEM_SIZ=0;/*totalcanusememorysize*/staticunsignedintCONN_NR=0;/*supportmaximumconnectionnumber*/staticunsignedintWIN_SIZ=0;/*flowwindowssize*/staticunsignedintPKT_SIZ=2056;/*maximumpacketsize*/staticunsignedshortPORT=0;/*applicationport*/staticunsignedintServiceID=0;/*serviceIDinkernel*/staticunsignedchar*buffer=NULL;/*bufferforreceivedata*/staticstructfw_avl_instancetcp_table;/*tcpdataconnectiontable*/structtimer_linktcp_link;/*tcpdatareadynodelist*/pthread_cond_tcond_tcp_link;pthread_mutex_tlock_tcp_link=PTHREAD_MUTEX_INITIALIZER;主要接口函数1.初始化一些全局变量intinit_tcp(intport,intmem_siz,intconn_num,intwin_siz);说明port为应用端口;mem_siz为可以使用的内存;conn_num为支持的连接数;win_siz为滑动窗口的大小。2.从核心接收数据包voidrecv_tcp_pkt()说明该函数负责不停地从核心取数据包。3.把数据包放到所属连接中staticvoidpacket_into_connection(structtcp_pkt*pkt,unsignedchar*data,unsignedintlen)说明pkt为TCP数据包结构;data为数据指针;len为数据长。4.把数据包放到滑动窗口中staticvoidpacket_into_window(structtcp_win*pwin,unsignedintseq,unsignedintack,structtcp_pkt*pkt,unsignedlen)说明pwin为窗口指针,指向要添加的窗口;seq为序列号;ack为应答号;pkt为TCP数据包指针;len为数据长。5.发送数据包intsend_tcp_pkt(unsignedchar*buf,intlen,intnum)说明buf为数据缓冲区;len数据长度;num数据包个数。6.关闭TCP连接voidclose_tcp(intport)说明port为应用端口。7.从窗口中获取某个连接的数据包structtcp_pkt*get_packet(structfw_avl_node*node)说明node为该连接在平衡二叉树连接表中的接点。8.加入连接点到数据连接表中staticvoidtcp_link_in(structfw_avl_node*node)说明node为数据连接表中的结点。9.从数据连接表中删除结点staticvoidtcp_link_out(structfw_avl_node*node)说明node为数据连接表中的结点10.控制TCP连接intctl_tcp_session(structfw_avl_node*node,intmode)node为该连接在平衡二叉树连接表中的结点;mode为控制模式0清除该连接;1清除客户端连接信息;2清除服务端连接信息;3该连接完全由用户态来控制。权利要求1、一种流过滤防火墙,其特征在于流过滤防火墙实现的方法由三部分组成1)状态包过滤在链路层或者是IP层实现状态包过滤,防火墙从数据包中提取连接状态信息(TCP的连接状态信息,有TCP_SYN、TCP_ACK,以及UDP和ICMP的模拟连接状态信息),并把这些信息放到动态连接表中动态维护,当后续数据包来时,将后续数据包及其状态信息和其前一时刻的数据包及其状态信息进行比较,防火墙就能做出决策后续的数据包是否允许通过。2)专用的TCP/UDP协议栈这个协议栈是个标准的TCP/UDP协议的实现,依据TCP/UDP协议的定义对出入防火墙的数据包进行了完整的重组,重组后的数据流交给应用层过滤逻辑进行过滤。3)应用层安全策略根据不同的应用层协议,按照用户制定的应用层安全策略对应用层数据进行过滤,由于防火墙的应用层策略位于数据流的中间,因此可以在任何时候代替服务器或客户端参与应用层的会话,从而起到了与应用代理防火墙相同的控制能力。2、权利要求1所述的流过滤防火墙,其特征在于流过滤防火墙实现方法包括下列步骤1)各应用守护进程在内核创建一个访问服务点TCP_LISTEN,从内核取来数据包TCP_RECV,若需要认证的,则提交认证部分处理;2)需要流内容过滤的,则按应用分为HTTP、FTP、SMTP等按照各自的允许或拒绝规则分别进行相应的处理;3)若允许,则把该包提交给内核继续发送TCP_SEND;若拒绝,则构造拒绝句,并说明拒绝的原因,并把有关该包的相应信息通知给事件服务器。3、根据权利要求2所述的流过滤防火墙,其特征在于该防火墙实现方法由下列硬件模块组成HTTP过滤模块;FTP过滤模块;SMTP过滤模块。4、根据权利要求2、3所述的流过滤防火墙,其特征在于HTTP过滤模块控制方法包括以下步骤该模块首先进行系统数据的初始化,在内核创建访问服务点TCP_LISTEN,获取规则,获取数据包TCP_RECV,创建连接表,获取连接的请求URL,然后进行规则匹配,根据匹配的结果决定该连接是允许还是拒绝。当接收到HTTP响应的时候,则对响应的内容进行关键字匹配,根据匹配结果决定改连接是允许还是拒绝。然后改变控制TCP_SESSION_CTL,提交内核处理该连接的数据包。5、根据权利要求2、3所述的流过滤防火墙,其特征在于FTP过滤模块控制方法包括以下步骤该模块首先进行系统数据的初始化,在内核创建访问服务点TCP_LISTEN,获取规则,获取数据包TCP_RECV,创建连接表,然后进行规则匹配,若拒绝该连接,则构造应答包,说明拒绝原因,清除该连接。否则,分析控制数据包,若收到PASV命令或PORT命令,昌需要根据NAT规则来修改数据包,以保证数据连接。6、根据权利要求2、3所述的流过滤防火墙,其特征在于SMTP过滤模块控制方法包括以下步骤该模块首先进行系统数据的初始化,在内核创建访问服务点TCP_LISTEN,获取规则,获取数据包TCP_RECV,创建连接表,然后进行规则匹配,若拒绝该连接,则构造应答包,说明拒绝原因,清除该连接。内部实现对MALL首部信息和MALL命令的检查,特别是邮件地址的合法性。7、根据权利要求3所述的流过滤防火墙,其特征在于HTTP过滤模块;FTP过滤模块和SMTP过滤模块三个模块内部结构包括下列部分数据初始化;获取规则;流过滤检查;发送数据包。8、根据权利要求2、7所述的流过滤防火墙,其特征在于数据包的流程由下部步骤组成通过内核API的调用TCP_RECV取得数据包之后,分析该数据的合法性,若非法,则丢弃;否则找到该数据包所在的连接,放到相应连接的窗口中,经过滑动窗口处理后,若数据包为客户端发出的包,则需要构造应答包,以保证后续包的到来;若数据包为服务端发来的包,则直接提交内核TCP_SEND把数据包发送出去;对于HTTP来说,当某个连接的请求URL完全收到后,经过URL过滤规则的检查,若为非法URL,则拒绝该连接,同时构造拒绝包,说明拒绝原因,断掉该连接。若为合法URL,则提交该连接的请求,同时把该连接的控制完全交给内核直接处理。若需要进行内容过滤检查,则需要保存相邻的几个数据包,以便进行内容合法性检查;对于FTP来说,直接分析控制连接即可。当收到新连接的数据包,首先进行过滤规则的检查,若为非法地址来的连接,则拒绝,同时构造拒绝包,说明拒绝原因,断掉该连接;对于SMTP来说,直接分析MAIL的头信息和MAIL地址的合法性检查;当某个连接经过一段时间没有数据包到来,内核应通知用户态。这样,用户态便可以清除相应的信息,而不用再单独设置定时器了。全文摘要本发明涉及一种计算机网络防火墙,其基本的控制方法是以状态包过滤的形态实现对应用层的保护,通过内嵌的专门实现的TCP协议栈,在状态检测包过滤的基础上实现了透明的应用信息过滤机制,从防火墙工作在链路层或IP层,在规则允许下,两端可以直接的访问,但是对于任何一个被规则允许的访问,数据是以“流”的方式从一个会话流向另一个会话,由于防火墙的应用层策略位于流的中间,防火墙的标准设计,具备完善的身份鉴别、访问控制和审计能力,同时,系统提供了丰富的GUI方式的管理和监控工具,能够方便的对系统进行安全策略配置、用户管理、实时监控、审计查询、流量管理等操作,为保证系统的安全运行,系统能够有效的防范多种DOS的攻击手段,并对攻击事件进行报警。文档编号H04L29/06GK1555170SQ20031011918公开日2004年12月15日申请日期2003年12月23日优先权日2003年12月23日发明者曹斌,曹斌申请人:沈阳东软软件股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1