本申请所包含的主题与跟本申请同日提交的专利申请《用于实现网络防火墙的基于多层的方法》(代理人标签号:221039)、《在网络设备中实现的多层防火墙结构》(代理人标签号:221038)和《用于整合多项网络策略的方法和框架》(代理人标签号:221041)的主题有关,这些专利申请的揭示说明被特别包括于此,用作参考。
发明的详细说明
揭示了一种方法,用于在基于网络过滤器的各项策略之中维护并解决冲突。当新的过滤器被安装在网络设备中时,该方法能够识别并解决过滤器冲突。
这些基于网络过滤器的策略由防火墙框架中所安装的过滤器来进行定义。虽然该框架被设计成实施防火墙策略,但是,该框架同样适合推动诸如“网际协议安全性”(IPSec)、“服务质量”(QOS)和类似物等其他基于过滤器的策略。
该框架包括核心模式处理,该核心模式处理包括一个或多个核心层,这些核心层构成协议堆栈、核心防火墙引擎以及一个或多个呼出。该协议堆栈包括应用层、传输层、网络层和链路层。该核心防火墙引擎包括一层“应用编程接口”(API)、一组被安装的过滤器和呼出API。
该用户模式处理包括用户防火墙引擎、策略供应者以及一个或多个用户层。该用户防火墙引擎也包括该核心防火墙引擎的实例(被称作“过滤器模块”),该实例复制用户模式中的该核心防火墙引擎的各项服务,并且也包括一组被安装的过滤器。
该用户层和核心层每个都构成能够将分类请求发送到该核心防火墙引擎或用户防火墙引擎的请求层。该分类请求包括由该请求层接收的信息包、信息包上下文和与该请求层关联的一组层参数。该核心防火墙引擎或用户防火墙引擎处理该请求,并返回由这个被安装的过滤器集来定义的防火墙或其他网络策略。
这个被安装的过滤器集中的每个过滤器包括一组过滤器条件、一个动作、一组过滤器属性和可能定义网络策略的其他数据。这些过滤器条件识别受制于该过滤器中所定义的该网络策略的信息包或其他数据。该动作被用来定义该过滤器中的这项策略,并且通常识别:是应该允许与该过滤器相匹配的信息包穿过网络,还是相反地应该阻滞这些信息包穿过网络。这些过滤器属性被用于根据其他过滤器来识别该过滤器的相对优先级,并被用于识别较低优先级的、发生冲突的过滤器可能会采取的动作。
该核心防火墙引擎通过识别一个或多个匹配过滤器,来处理从该请求层那里被发送的该分类请求。这些匹配过滤器具有跟这些层参数和信息包上下文相匹配的过滤器条件。一旦识别这些匹配过滤器,就按过滤器优先级的顺序来应用它们。将要对这些信息包采取的动作被返回到该请求层。
该策略供应者从任何合适的来源(例如,易失或非易失存储器)获得策略。该策略是用于呈现新的过滤器的信息源,包括这个过滤器条件集、关联的动作和过滤器属性。该用户防火墙引擎经由管理API,将这个新的过滤器加入该核心防火墙引擎中的这个被安装的过滤器集。
该用户防火墙引擎将新的过滤器加入这些被安装的过滤器,从这些被安装的过滤器中移去过滤器,并且识别和解决过滤器冲突。通过将两个发生冲突的过滤器中的一个过滤器置于活动状态,而将两个发生冲突的过滤器中的另一个过滤器置于禁用状态,可以解决过滤器冲突。
参考这些附图(其中,相似的参考数字提及相似的元件),本发明被展示为在合适的计算环境中加以执行。虽然未作要求,但是,将在正由个人计算机执行的计算机可执行指令(例如,程序模块)的一般上下文中描述本发明。通常,程序模块包括执行特殊任务或实施特殊的抽象数据类型的例行程序、程序、对象、部件、数据结构等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于本地存储器存储设备和远程存储器存储设备中。
图1展示了可以在其上执行本发明的合适的计算系统环境100的例子。计算系统环境100只是合适的计算环境的一个例子,它并不意在对本发明的使用或功能性的范围提出任何限制。也不应该将计算环境100解释成具有涉及示范操作环境100中所展示的任何一个部件或部件组合的任何从属性或要求。
本发明可用于众多其他的通用或专用计算系统环境或配置。可能适用于本发明的众所周知的计算系统、环境和/或配置的例子包括(但不局限于)个人计算机、服务器计算机、手持设备或便携式设备、多处理器系统、基于微处理器的系统、机顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境,以及类似物。
可以在正由计算机执行的计算机可执行指令(例如,程序模块)的一般上下文中描述本发明。通常,程序模块包括执行特殊任务或实施特殊的抽象数据类型的例行程序、程序、对象、部件、数据结构等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储器存储设备的本地计算机存储介质和远程计算机存储介质中。
参照图1,用于执行本发明的示范系统包括采取计算机110的形式的通用计算设备。计算机110的部件可以包括(但不局限于)处理单元120、系统存储器130和系统总线121,系统总线121将包括该系统存储器的各种系统部件耦合到处理单元120。系统总线121可以是几种类型的总线结构(包括存储总线或存储控制器、外围总线和使用各种总线构造中的任何总线构造的局域总线)中的任何总线结构。举例来讲(不作限制),这类构造包括“工业标准结构”(ISA)总线、“微通道结构”(MCA)总线、“增强型ISA(EISA)”总线、“视频电子标准协会”(VESA)局域总线和也被称作“夹层(Mezzanine)总线”的“外围部件互连”(PCI)总线。
计算机110通常包括各种计算机可读介质。计算机可读介质可以是可由计算机110存取的任何可用介质,它包括易失和非易失介质、可移动和不可移动的介质。举例来讲(不作限制),计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括易失和非易失的可移动和不可移动介质,该介质利用关于信息(例如,计算机可读指令、数据结构、程序模块或其他数据)存储的任何方法或技术来加以执行。计算机存储介质包括(但不局限于)RAM、ROM、EEPROM、快闪存储器或其他存储技术、CD-ROM、数字通用光盘(DVD)或其他光盘存储器、盒式磁带、磁带、磁盘存储器或其他磁性存储设备、或可以被用来存储所需信息并可以由计算机110来存取的任何其他的介质。通信介质通常具体表现计算机可读指令、数据结构、程序模块或调制数据信号(例如,载波或其他传送机制)中的其他数据,它包括任何信息传递介质。术语“调制数据信号”意味着一种信号,该信号的一个或多个特征按这样一种方式来加以设置或更改,以便为该信号中的信息编码。举例来讲(不作限制),通信介质包括有线介质(例如,有线网络或直接连线)和无线介质(例如,声音、RF、红外线和其他无线介质)。以上任何内容的组合也应该被包括在计算机可读介质的范围以内。
系统存储器130包括采取易失和/或非易失存储器(例如,只读存储器(ROM)131和随机存取存储器(RAM)132)形式的计算机存储介质。基本输入/输出系统133(BIOS)通常被存储在ROM 131中,该基本输入/输出系统包含有助于在计算机110内的各个元件之间传送信息(例如,在启动期间)的这些基本例行程序。RAM 132通常包含可立即由处理单元120进行存取并且/或者目前正由处理单元120进行操作的数据和/或程序模块。举例来讲(不作限制),图1展示了操作系统134、应用程序135、其他程序模块136和程序数据137。
计算机110也可以包括其他可移动/不可移动的易失/非易失计算机存储介质。仅仅举例来讲,图1展示了从不可移动的非易失磁性介质读取或对其写入的硬盘驱动器141、从可移动的非易失磁盘152读取或对其写入的磁盘驱动器151,以及从可移动的非易失光盘156(例如,CD ROM或其他光学介质)读取或对其写入的光盘驱动器155。该示范操作环境中可以使用的其他可移动/不可移动的易失/非易失计算机存储介质包括(但不局限于)卡型盒式磁带机、快闪存储卡、数字通用光盘、数字录像带、固态RAM、固态ROM和类似的存储介质。硬盘驱动器141通常通过不可移动的存储接口(例如,接口140)而被连接到系统总线121,磁盘驱动器151和光盘驱动器155通常由可移动的存储接口(例如,接口150)连接到系统总线121。
以上所讨论的和图1中所展示的这些驱动器及其关联的计算机存储介质为计算机110提供计算机可读指令、数据结构、程序模块和其他数据的存储。在图1中,例如,硬盘驱动器141被展示为存储操作系统144、应用程序145、其他程序模块146和程序数据147。注意,这些部分可以等同于或不同于操作系统134、应用程序135、其他程序模块136和程序数据137。操作系统144、应用程序145、其他程序模块146和程序数据147在这里被提供不同的号码,以展示:它们至少是不同的副本。用户可以通过输入设备(例如,键盘162)和指点设备161(通常被称作“鼠标”、“跟踪球”或“触摸垫”)来将命令和信息输入计算机110。其他输入设备(未示出)可以包括话筒、操纵杆、游戏垫、圆盘式卫星电视天线、扫描仪或类似的输入设备。这些和其他的输入设备经常通过被耦合到该系统总线的用户输入接口160而被连接到处理单元120,但也可以由其他接口和总线结构(例如,并行端口、游戏端口或通用串行总线(USB))来加以连接。监视器191或其他类型的显示设备也经由接口(例如,视频接口190)而被连接到系统总线121。除该监视器以外,计算机还可以包括其他外围输出设备(例如,扬声器197和打印机196),这些外围输出设备可以通过输出外围接口195来加以连接。
计算机110可以在使用与一台或多台远程计算机(例如,远程计算机180)的逻辑连接的联网环境中进行操作。远程计算机180可能是另一台个人计算机、服务器、路由器、网络PC、对等设备或其他共同的网络节点,它通常包括以上相对于个人计算机110而描述的许多或全部的这些元件,尽管图1中只展示了存储器存储设备181。图1中所描绘的这些逻辑连接包括局域网(LAN)171和广域网(WAN)173,但也可以包括其他网络。这类联网环境在办公室、企业范围的计算机网络、内联网和因特网中很普遍。
当被用于LAN联网环境中时,个人计算机110通过网络接口或适配器170而被连接到LAN 171。当被用于WAN联网环境中时,计算机110通常包括调制解调器172或用于在WAN 173(例如,因特网)上建立通信的其他装置。调制解调器172(可能是内置的,也可能是外置的)可以经由用户输入接口160或其他合适的机制而被连接到系统总线121。在联网环境中,相对于个人计算机110而描绘的程序模块或其各个部分可以被存储在该远程存储器存储设备中。举例来讲(不作限制),图1将远程应用程序185展示为驻留在存储器设备181上。将会理解:所示的这些网络连接起示范的作用,可以使用在这些计算机之间建立通信链路的其他装置。
在下文中,除非另有指示,将参照由一台或多台计算机执行的动作和操作的符号表示,来描述本发明。照此,将会理解:这类动作和操作(有时被称作“是计算机执行的”)包括用结构化形式来表示数据的电信号的该计算机的该处理单元所执行的操作。这项操作变换该数据,或将其保存在该计算机的该存储系统中的各个位置,这样,按精通该技术领域的人所熟悉的方式来重新配置或改变该计算机的这个操作。保存数据的这些数据结构是具有该数据的格式所定义的特定属性的、该存储器的物理位置。但是,在前述上下文中描述了本发明,而这并不意味着起限制的作用,因为精通该技术领域的人将会理解:也可以在硬件中执行下文中所描述的各种动作和操作。
图2表现了被用来执行本发明的该方法和系统的一种框架的实施例。将会理解:该框架起示范的作用,只是用于举例说明,而不作限制。通过允许增加和移去过滤器,并通过考虑及将要被识别和解决的过滤器冲突,该框架允许本发明的该方法和系统对网络策略实行中央管理。虽然特别参照防火墙和防火墙过滤器来描述本发明,但是,也可使用本发明来推动并管理其他基于过滤器的网络策略,例如,“服务质量”(QOS)、“互联网协议安全性”(IPSec)套件,以及其他的加密协议、鉴定协议和密钥管理安全协议。
该防火墙结构包括用户模式处理250和核心模式处理252。用户模式处理250和核心模式处理252作为网络设备中的操作系统的一部分来加以执行。精通该技术领域的人将会理解:该操作系统的用户模式处理250和核心模式处理252包括附加的部件,为简单起见,没有示出这些附加的部件。作为选择,在单一操作系统处理以内,或在作为一个或多个程序模块或应用程序的该操作系统以外整体或部分地执行该防火墙结构。
核心模式处理252包括核心层,这些核心层构成网络堆栈254、核心防火墙引擎256和任选的呼出258。网络堆栈254包括多个层,这些层包括数据流层268、传输层270、网络层272和链路层274。网络堆栈254中的这些层处理入站网络信息包和出站网络信息包。出站网络信息包是从执行该防火墙结构的该网络设备那里被传送到网络上的信息包。入站信息包是在执行该防火墙结构的该网络设备处被接收的信息包。如图3中所示的各个箭头所指出的,入站信息包从下到上地穿过网络堆栈254,出站信息包从上到下地穿过网络堆栈254。
网络信息包序贯地穿过这些网络层,并由这些网络层序贯地加以处理。根据已知的技术,网络堆栈254中的每个层能够从前一个层或模块那里接收信息包,能够根据规范或协议来处理该信息包,并能够将这个处理过的信息包发送到下一个层或模块。根据本发明来执行的该框架进一步允许网络堆栈254中的每个层保持信息包上下文,将该信息包上下文传递到这下一个层,将分类请求发给核心防火墙引擎256,并根据防火墙或其他网络策略来对该信息包采取行动。
该信息包上下文是从一个层到另一个层地跟随该信息包的数据结构。每个层通过将该层被设计成要加以处理的一组参数(例如,该层被设计成从入站信息包中加以分析的、加入出站信息包的或从入站或出站信息包中导出的信息)加入该上下文数据结构,来保持该上下文。参照图4来描述被用于该信息包上下文的示范数据结构。
由网络堆栈254的各个层执行的这些操作中的一项操作是:通过发出该分类请求,来调用该核心防火墙引擎。该分类请求是网络堆栈254中的层所执行的调用,请求:识别与该信息包相匹配的任何过滤器,并将任何关联的动作(例如,允许或阻滞)返回到该层。发出该分类请求的这个层在这里被称作“请求层”。每个层也对由核心防火墙引擎256返回的该信息包采取该行动。
核心防火墙引擎256包括层API 280、一组被安装的过滤器282和呼出API284。核心防火墙引擎256执行各种功能,包括:(1)存储被安装的过滤器集282;(2)从网络堆栈254中的这些层接收分类请求;(3)根据该分类请求,来从被安装的过滤器集282中识别一个或多个匹配过滤器;以及(4)根据这些匹配过滤器,来向该请求层指示要对该信息包采取的任何动作。
被安装的过滤器集282中的每个过滤器包括一组过滤器条件、一个动作、过滤器属性和过滤器Id。这些过滤器条件识别经历该动作并可能受制于该过滤器中所识别的其他网络策略的这些网络信息包。该动作识别可应用的网络策略(例如,允许或阻滞)。这些过滤器属性包括优先级类别、取代允许和加权。这些过滤器属性被用来确定过滤器是活动过滤器还是禁用过滤器、活动过滤器被应用于匹配信息包的顺序,以及活动过滤器是否被应用于匹配信息包。参照图3来描述这些过滤器的示范形式。
禁用过滤器清单286和活动过滤器清单288跟被安装的过滤器集282有关联。活动过滤器清单288识别处于活动状态并被用来执行网络策略的过滤器。禁用过滤器清单286识别处于不活动或禁用状态并且目前没有被用来执行网络策略、但以后可能会被置于活动状态的过滤器。作为选择,本发明没有保持活动过滤器清单288和禁用过滤器清单286,并且,本发明使用(例如)每个过滤器内所保存的字段内的不同的方法或其他相等的方法,来跟踪每个过滤器的状态。
在本发明的实施例中,将过滤器分配给特殊用户层264或核心模式层254。每个层包括被安装的过滤器的单独集合282、单独的禁用过滤器清单286和单独的活动过滤器清单288。作为选择,只保持被安装的过滤器的单一集合以及活动过滤器清单和禁用过滤器清单。
层API 280在网络堆栈254中的各个层与核心防火墙引擎256之间提供接口。通过层API 280,该请求层将该分类请求发给核心防火墙引擎256。该分类请求包括如请求层所接收的该信息包、如该请求层所接收的该信息包上下文,以及层参数。这些层参数是由该请求层处理(例如,从该信息包中加入、分析或导出)的信息包参数。作为特殊的例子,源互联网际协议(IP)地址和目的互联网际协议(IP)地址是当执行该IP协议时由网络层272发送的层参数。层参数也可以包括被加入该信息包或从该信息包中被加以分析的这些信息包参数以外的信息。作为特殊的例子,这些层参数包括局部地址类型。该局部地址类型由该IP层来确定,并作为该分类请求的一部分来加以发送。局部地址类型包括单点播送、广播、多点播送、任意点播送(anycast)和类似的类型。参照图5来描述层API 280的特殊实施。
可任选地,可使用呼出258来执行该允许和阻滞过滤器动作以外的增加的功能性。当核心防火墙引擎256为该信息包(作为该关联的动作,它包括对这些呼出模块之一的呼出)识别匹配过滤器时,执行呼出。该核心防火墙引擎将如该请求层所发出的该分类请求(即完全信息包、层参数和信息包上下文)连同该匹配过滤器的标识一起经由呼出API 284发送到该呼出模块。在本发明的实施例中,该防火墙结构包括呼出基本集258。和层一样,按需要来增加附加的呼出,从而提供可扩展的框架。参照图6来描述呼出API 284的特殊实施。
用户模式处理250包括用户防火墙引擎260以及被识别为“PP1”、“PP2”和“PP3”的一个或多个策略提供器262。策略提供器262是将网络策略(即被安装的过滤器282)加入这里所描述的该框架的处理。可以使用任何处理来完成这项任务。用户防火墙引擎260将该策略转换成新的过滤器,即,按照这些过滤器条件、该动作和这些过滤器属性来定义该策略,并且,将这个新的过滤器加入这个被安装的过滤器集,并将该过滤器加入该活动过滤器清单或该禁用过滤器清单。
用户防火墙引擎260也执行过滤器仲裁和冲突解决功能。当策略提供器262为用户模式防火墙引擎260提供新策略时,该用户防火墙引擎确定:起因于这项新策略的这个新的过滤器是否与被安装的过滤器282中的任何过滤器有冲突。当两个或更多的过滤器(1)规定不同的动作时,(2)重叠时,(3)具有不同的优先级类别时,(4)当具有较低优先级类别的该过滤器具有较高的加权值时,并且(5)当具有较低优先级类别的该过滤器中所规定的该动作没有被规定为该较高优先级过滤器中的取代允许时,会发生冲突。如果过滤器包括过滤器条件的共同集合(即,相等的值或相交的值范围以内的过滤器条件),则这些过滤器重叠。该取代允许定义可能会取代该过滤器的较低优先级过滤器中的动作。如果存在冲突,则用户防火墙引擎260解决该冲突。
过滤器引擎API 266构成用户模式防火墙引擎260与核心防火墙引擎256之间的接口。过滤器引擎API 266提供关于用户防火墙引擎260的一种机制,用于将新的过滤器加入被安装的过滤器集282,用于从这个被安装的过滤器集中移去过滤器,并用于检查被安装的过滤器282,以便可以检测和解决过滤器冲突。管理API 290向策略提供器262暴露类似的功能性。
密钥模块API 288在用户策略引擎260与密钥模块296之间提供接口。密钥模块API 288被用来用信号通知该密钥模块:需要建立SA。
用户防火墙引擎260也包括过滤器模块294。过滤器模块294是用户模式250中的核心防火墙引擎256的实例。用户防火墙引擎260中的过滤器模块294的这个实例允许用户防火墙引擎260为一个或多个用户层264复制核心防火墙引擎256的各项服务。用与创建核心模式层相同的方法来增加用户模式层264。由于过滤器模块294是核心防火墙引擎256的该用户模式实例,因此,将会理解:这里为该核心模式防火墙引擎而描述的任何功能性也可应用于过滤器模块294。例如,增加附加的用户模式层,或从该系统结构中删除附加的用户模式层,并且,可以创建呼出,从而为这些用户模式层提供增加的功能性。可以增加过滤器,或从过滤器模块294中移去过滤器。用户防火墙引擎260也为过滤器模块294中的过滤器解决过滤器冲突。
参考图3,现在将描述被安装的过滤器集282。每个过滤器300具有多个字段,这些字段包括过滤器Id 302、过滤器属性304、动作306和过滤器条件集308。过滤器Id 302为该过滤器提供唯一标识。例如,过滤器Id 302被用作供核心防火墙引擎256将匹配过滤器信息返回到用户防火墙引擎260和呼出258的一种工具。过滤器Id 302被核心防火墙引擎256用来跟踪将哪个过滤器分配给哪个层。过滤器Id 302也被用作禁用过滤器清单286和活动过滤器清单288的一部分,以识别哪些过滤器分别是不活动的和活动的。
过滤器属性304包括优先级类别310、取代允许312和加权314。优先级类别310是一个值,该值规定曾经由策略提供器262之一来增加过滤器300的该用户的类别。优先级类别的例子包括用户、网络管理员、防火墙客户机和客人。该优先级类别越高,该过滤器的优先级也越高。
取代允许312识别被允许取代过滤器300的较低优先级过滤器中所规定的这些动作。取代允许312的例子包括:允许、阻滞、记录、呼出、所有动作或无。该默认取代允许是“无”。
加权314是任何无符号的值。该加权的默认大小是64比特。该加权值与优先级类别310协力确定该总体过滤器优先级。该加权字段中的这个值越高,该过滤器优先级也越高。用户防火墙引擎260根据这些过滤器条件和可能的其他准则的专指性,来自动计算加权314。作为选择,该加权是用户输入的值。如果用户防火墙引擎260自动计算该加权字段,则用户也可以修改该加权字段。
过滤器条件集308确定信息包是否与过滤器300相匹配。每个过滤器条件308包括类型318、数据320和层Id:字段Id 322。
类型318定义对应的数据字段320中所包括的变量的长度和数目。该框架规定预定义的已知变量类型,例如,“字节”、“短”、“长”、“8个字节”、“字符串”、“互联网协议版本4(IPv4)地址”、“互联网协议版本6(IPv6)地址”、“IPv4地址加上掩码”、“IPv6地址加上掩码”和“地址范围”。
数据字段320包括与类型316相匹配的数据。例如,如果该类型是“IPv4地址”,则关于数据字段320的可接受的值是如加点的十进制记数法中所表达的00.00.00.00~255.255.255.255的范围内的32位数字。在一些实例中,类型318规定数据字段320中的多个值。“地址范围”、“IPv4地址加上掩码”和“IPv6地址加上掩码”这些类型允许采用两个IP地址值,从而定义IP地址的始、末范围。为了最大的灵活性,该结构也允许采用用户定义的类型。作为选择,将附加的类型手动加入该框架。
使用层Id:字段Id 322来分别识别起源层和来自该起源层的参数。该起源层和来自该起源层的这个参数定义信息包参数,即当识别匹配过滤器时与数据320进行比较的层参数和信息包上下文。该起源层识别核心层或用户层。这个参数识别特殊起源层参数。过滤器条件316展示了特殊的例子。该类型是IPv4,从而指出:数据320是32位IP地址。该层Id是“IP”,表示:该32位数字是网络层参数。该字段Id是“Src IP Addr”,它将该IP层参数识别为源IP地址。该数据字段中所提供的该IP地址是“123.4.0.1”,它识别那个特殊的IP源地址。具有123.4.0.1的源IP地址的信息包与这个例子中所描述的这些过滤器条件相匹配。
过滤器300可以包括多个过滤器条件308,在这种情况下,当满足所有的过滤器条件时,信息包与过滤器300相匹配。
过滤器300中所指定的动作306识别如何处置与过滤器条件308相匹配的信息包。动作的例子包括允许和阻滞。“允许”和“阻滞”识别防火墙策略,该防火墙策略指出:应该允许匹配信息包进一步穿过网络,或者相反地应该阻滞匹配信息包进一步穿过网络。其他动作可能被包括在内(例如,呼出,用于为增加的功能性执行任选的呼出,或用于执行策略(例如,IPSec))。也可以通过定义数据结构(被称作以下所描述的“策略上下文数据结构”)中的其他网络策略,来执行这些其他的网络策略。
使用策略上下文307来存储除防火墙策略以外的策略(例如,安全性策略或QOS策略)。该策略上下文是任何合适的数据结构。例如,该策略上下文是由加入过该策略上下文的处理来解释的64位数字。该策略上下文和/或动作可能是空值。
在本发明的实施例中,动作被指定为终止或非终止。如果该动作是终止,那么,一旦为信息包识别那个动作,该动作就被返回到该请求层,并且没有附加的过滤器被应用于该信息包。如果该动作是非终止,则附加的过滤器查找继续进行,直到识别关于该信息包的终止动作为止。默认的情况是,“允许”和“阻滞”被指定为终止动作。
图4展示了被用于信息包上下文的数据结构330的例子,该信息包上下文由网络堆栈254和呼出模块258中的各个层来保持,并被传递到这些层。当这个入站或出站网络信息包穿过这些层并包括被标注为336-340的一个或多个项目时,信息包上下文330跟随该网络信息包。每个项目包括层Id:字段Id 332和对应的值334。
层Id:字段Id 332的含义等同于作为过滤器300中的过滤器条件308的一部分而加以提供的层Id:字段Id 324的含义(图4)。也就是说,层Id:字段Id 322为值字段334中的该数据识别该起源层和来自该起源层的这个层参数。值字段334包括特殊的层参数。
作为特殊的例子,项目336包括该层Id:字段Id 332“NDIS:Src.MACAddr.”。“NDIS”表示链路层274的NDIS实施(图1)。“Src MAC addr.”表示源MAC地址。这样,层:字段Id 332指出:值字段334中的该数据是曾由该NDIS(链路)层处理和加入的源MAC地址。值字段334包括这个实际的源MAC地址,在该例中,该源MAC地址是如十六进制记数法中所表达的“00.08.74.4F.22.E5”。
作为第二个例子,项目338具有一层Id:“NDIS:IF No”的字段Id 332。这再次将该层识别为NDIS,但在此情况下,将该参数识别为把接口号表示为该特殊NDIS参数的“IF No”。值字段334包括这个实际的接口号,该接口号在此情况下是2。
作为第三个例子,项目340具有一层Id:“IP:Dst IP Addr”的字段Id 332。该“IP”使用该IP协议来表示该网络层,并且,该“Dst IP Addr”将目的IP地址表示为该IP层参数。值字段334包括“123.3.2.1”的这个实际的目的IP地址。
已描述了本发明的该防火墙基础结构,现在来注意使用这里所描述的该基础框架来加以执行的该系统和示范方法的这些功能接口。这些功能接口作为多个应用编程接口(APIs)来加以实现。这些APIs包括如图5和图6所示的层API280、呼出API 284、防火墙引擎API 266和密钥模块API 276。
层API 280方便了网络堆栈254内的各个层中的每个层与核心防火墙引擎256之间的数据交换。如所示,层API 280包括“分类”法350、“增加层”法352和“删除层”法354。
该请求层使用“分类”法350,将层参数、如该请求层所接收的该信息包以及该信息包上下文发送到核心防火墙引擎256。核心防火墙引擎256将(1)来自该请求层的这些层参数和(2)信息包上下文项目跟被分配给该请求层的每个过滤器300中的过滤器条件308进行比较,以识别匹配过滤器。以下是该“分类”法的示范实施。将会理解:以下这些方法被描述成接收或返回数据值。根据已知的编程技术,这些方法可以使用指向数据值的指针,而不是实际的数据值。
NTSTATUS
WFPClassify
(
IN ULONG LayerId,
IN WFP_INCOMING_VALUES* pInFixedValues,
IN WFP_INCOMING_CONTEXT_VALUE* pInContext,
PVOID pPacket,
OUT WFP_ACTION_TYPE* pActionType,
OUT UINT64* pOutContext
);
其中,由以下内容表述这些所列举的参数的特征。
LayerId识别发出该分类请求的该网络层,即该请求层。参考图3,该层Id将该层识别为数据流层268、传输层270、网络层272、链路层274或用户模式层264。如果其他层被加入该系统则也有效。
pInFixedValues包括由该请求层处理的这些层参数的子集。将该pInFixedValues连同这些信息包上下文项目与这些过滤器条件进行比较,以确定该信息包是否与该过滤器相匹配。以下的表格A中识别关于每个层的该pInFixedValues中所包括的示范层参数。将会理解:这些参数只是起范例的作用,而不作限制。
表格A
pInContext包括如该请求层所接收的上下文数据结构330(图4)。核心防火墙引擎256使用该信息包上下文并结合这些层参数来识别匹配信息包。
pPacket包括如该请求层所接收的这整个信息包。该pPacket没有被核心防火墙引擎256用来识别匹配过滤器。如前所述,核心防火墙引擎256使用该pInFixedValues和pInContext来识别匹配过滤器。该pPacket被包括在该“分类”法中,以便核心防火墙引擎256可以将它发送到被识别为匹配过滤器中的动作306的一个或多个呼出模块258。
pActionType包括被返回到该请求层的动作306。所返回的动作306是如在该匹配过滤器中所识别的允许或阻滞、或由该匹配过滤器执行的呼出模块。如果不存在匹配过滤器,则返回“允许”的默认动作306。
pOutContext是一种数据结构,除该动作以外,该数据结构还被设计成包括进一步定义网络策略(例如,QOS、IPSec和类似物)的数据。该pOutContext是任何合适的数据结构,例如是64位项目,该64位项目包括将由增加该pOutContext的层或处理来进行解释的数据流。
“增加层”352和“删除层”354方法被分别用来增加层和从该防火墙结构中移去层。以下是“增加层”352方法的示范形式。
NTSTATUS
AddExtensionLayer(OUT PULONG pLayerId);
其中,由以下内容表述这些所列举的参数的特征。
pLayerId是被返回到正被添加的那个层(即执行该“增加层”方法的那个层)的唯一层标识值。
以下是“删除层”354方法的示范形式。
NTSTATUS
RemoveExtensionLayer(ULONG LayerId);
其中,由以下内容表述这些所列举的参数的特征。
LayerId识别正在被移去的那个层,即执行该“删除层”方法的那个层。
呼出API 284促进核心防火墙引擎256与呼出258之间的数据交换。呼出API 284包括“分类”方法356、“登记呼出”方法360和“撤消登记呼出”方法362。
呼出API 284的“分类”方法356类似于层API 280的“分类”方法350,除了它也包括匹配过滤器数据这一点以外。以下是被用来执行呼出的“分类”方法410的示范形式。
typedefNTSTATUS(*WFP_CALLOUT_CLASSIFY_FN)
(
IN const WFP_INCOMING_VALUES* fixedValues,
IN WFP_INCOMING_CONTEXT_VALUE* wfpContext,
IN VOID* packet,
IN WFP_FILTER* matchedFilter,
OUT WFP_ACTION_TYPE* action,
OUT UINT64* outContext
);
其中,由以下内容表述这些所列举的参数的特征。
fixedValues包括从该请求层那里被发送的这些层参数。该fixedValues是pInFixedValues数据中的该请求层所提供的相同的数据,该pInFixedValues数据作为层API 280中的“分类”方法350的一部分来加以发送。
wfpContext包括上下文数据结构330(图4)。该数据等同于如该pInContext中的该请求层所发送的数据,该pInContext作为层API 280中的“分类”方法350的一部分来加以发送。
Packet包括如该请求层所接收的这整个信息包。该数据等同于如该pPacket中的该请求层所发送的数据,该pPacket作为层API 280中的“分类”方法350的一部分来加以发送。
matchedFilter识别请求该呼出的那个过滤器。通常,该匹配过滤器由启动呼出API 284的“分类”方法356的匹配过滤器300的过滤器Id 302来加以识别。
pActionType包括从呼出258被返回到核心防火墙引擎256的那个动作。如果该pActionType是允许或阻滞,则将它返回到该请求层,作为由“层”API280返回的该pActionType。该呼出也可以返回继续动作,该继续动作指示核心防火墙引擎256继续将匹配过滤器应用于该信息包。
pOutContext是一种数据结构,除该动作以外,该数据结构还被设计成包括进一步定义网络策略(例如,QOS、IPSec和类似物)的数据。该pOutContext是任何合适的数据结构,例如是64位项目,该64位项目包括将由增加该pOutContext的层或处理来进行解释的数据流。
当过滤器300被加入被安装的过滤器集282(将呼出模块258识别为其动作306之一)时,使用“通知”方法358来通知呼出。该通知为该呼出提供了一种机会——采取任何所要求的动作(例如,当核心防火墙引擎256执行该动作时,分配或解除分配将由呼出258使用的缓冲器)。以下是“通知”方法358的示范形式。
typedefNTSTATUS(*WFP_CALLOUT_NOTIFY_FN)
(
IN WFP_NOTIFY_ENUM notify,
IN WFP_FILTER* filter
);
其中,由以下内容表述这些所列举的参数的特征。
notify包括一个数值,该数值指出是正在增加还是正在删除该过滤器。例如,1的值指出正在增加该过滤器,2的值指出正在删除该过滤器。
filter识别正在被唯一值增加或删除的该过滤器。通过提供作为过滤器300的一部分而被包括在内的过滤器Id 302,可以实现这一点。
分别使用“登记”方法360和“解除登记”方法362来增加和移去呼出模块。“登记”方法360的示范形式如下所述:
NTSTATUS WfpRegisterCallout
(
IN const GUID* calloutId,
IN const WFP_CALLOUT* callout,
IN const SECURITY_DESCRIPTOR* sd
);
其中,由以下内容表述这些所列举的参数的特征。
callout Id提供关于该登记呼出模块的唯一标识。
callout提供任何呼出特定信息(例如,驱动器服务名称、设备名称,以及指向这些呼出分类和通知功能的指针)。
sd提供关于该呼出的安全描述符。该安全描述符识别哪些处理可以读取并删除该呼出。
“解除登记”方法362的示范形式如下所述:
NTSTATUS WfpDeregisterCallout
(
IN const GUID* calloutId
);
其中,由以下内容表述这些所列举的参数的特征。
callout Id是将要被移去的该呼出的唯一Id。
过滤器API 266促进用户防火墙引擎260与核心防火墙引擎256之间的数据交换。如所示,过滤器引擎API 266包括“增加过滤器”方法364、“删除过滤器”方法366和“列举层”方法368。也提供了过滤器引擎API 266的这些方法,作为管理API 290的一部分。
分别使用“增加过滤器”方法364和“删除过滤器”方法366,来将新的过滤器加入被安装的过滤器集282,并从被安装的过滤器集282中删除现存的过滤器。以下是“增加过滤器”方法418的示范形式。
NTSTATUS
AddFilterToLayer
(
ULONG Layerld,
WFP_FILTER* pFilter
);
LayerId识别为其分配该过滤器的那个层。
其中,由以下内容表述这些所列举的参数的特征。
pFilter是正在被加入被安装的过滤器集282的过滤器310。
以下是“删除过滤器”方法420的示范形式。
NTSTATUS
DeleteFilterFromLayer
(
ULONG Layerld,
ULONG FilterId
);
其中,由以下内容表述这些所列举的参数的特征。
LayerId识别为其分配该过滤器的那个层。
pFilter是正从这个被安装的过滤器集中被删除的该过滤器。
“列举层”方法368提供关于用户防火墙引擎260的一种机制,以识别与一套准则相匹配的所有过滤器。这样,可允许过滤器引擎API 266识别发生冲突的过滤器,用于过滤器仲裁和冲突解决。以下是“列举层”方法368的示范形式。
IndexStartEnum
(
PWFP_ENUM_TEMPLATE pEnumTemplate,
OUT PULONG pMatchCount,
OUT PWFP_ENUM_HANDLE pEnumHandle
)
其中,由以下内容表述这些所列举的参数的特征。
pEnumTemplate包括定义应该被返回的这些过滤器的一种数据结构。例如,它包括参数,这些过滤器条件必须为将要被返回的该过滤器而与这些参数相匹配。
pMatchCount包括基于这个规定的pEnumTemplate的过滤器匹配数目。
pEnnmHanlde包括对这些匹配的过滤器项目的参考。
密钥模块API 288在用户层264与密钥模块296之间提供接口。密钥模块API 288包括“IPSec SA获取”方法370、“期满通知”方法372、“IPSec SA获取完成”方法374、“密钥模块登记”方法376、“密钥模块解除登记”方法378、“IPSec入站获得SPI”方法380、“增加入站SA”方法382、“增加出站SA”方法384、“入站SA期满”方法386和“密钥模块启动”方法388。密钥模块API 288也可以包括先前为该层API而描述的各种方法(例如,“分类”方法350、“增加层”方法352和“删除层”方法354)。
使用该密钥模块API来促进已知安全协议(例如,由IPSec定义,由启动计算机和响应计算机使用)的运用。IPSec包括诸如AH或ESP等协议。该ESP协议是鉴定和加密协议,该协议使用密码机制来提供完整性、来源鉴定和数据机密性。该AH协议是鉴定协议,该协议使用该信息包头部中的散列签名来证实该信息包数据的完整性和该发送者的真实性。
IKE协议提供一种关于启动计算机和响应计算机的方法,以商议用于该AH协议和ESP协议的安全设置。所商议的这些安全设置构成被称作“安全关联”(SA)的数据结构。该SA定义了被ESP或AH用来保护IP信息包的这些内容的参数(例如,鉴定算方法、加密算方法、密钥和密钥的使用期限)。由于ESP和AH需要被建立的SA,因此,在该启动和响应计算机使用该ESP或AH协议之前,执行IKE商议。由被称作“安全参数索引”(SPI)的值来识别给定的SA。
该启动计算机和响应计算机中的每种计算机包括IPSec驱动器,该IPSec驱动器根据IPSec策略来确定在该启动计算机与该响应计算机之间被发送的数据是要求加密还是要求鉴定。该IPSec策略是一组过滤器,它定义该网络设备如何使用IPSec,并包括过滤器清单、鉴定方法和其他信息。在本发明的实施例中,由该核心策略引擎或过滤器模块294内的这个被安装的过滤器集中所包括的过滤器来定义该IPSec策略。通过调用使用该“分类”方法来识别匹配过滤器的该密钥模块层,来识别应用于信息包的这项策略。
用户策略引擎260(经由客户代理人)调用“IPSec SA获取”方法370,来将驱动器获取或外部启动请求传递到该密钥模块层。该密钥模块层返回这个调用,并异步地执行该商议。一旦这个密钥模块层已完成该商议,该密钥模块层就调用“IPSec SA获取完成”方法374,以通知用户防火墙引擎260:该商议完成。以下是该“IPSec SA获取”方法的示范形式。
typedefWIN32_ERR
(*PROCESS_IPSEC_SA_ACQUIRE0)
(
IN FWP_IPSEC_ACQUIRE_CONTEXT0 ipsecContext,
IN const FWP_IPSEC_SA_ACQUIRE0* acquire,
IN FWP_IPSEC_SPI inboundSAspi
);
其中,由以下内容表述这些所列举的参数的特征。
ipsecContext是将该获取与正在被加入的该SA链接起来的句柄。
acquire包括用于根据已知协议(例如,IKE)来商议该SA的必要信息。
inboundSAspi包括被用于入站SA的SPI。
调用“期满通知”方法372,以便将期满通知传递到增加过该入站SA的那个密钥模块层。以下是该“期满通知”方法的示范形式。
typedef VOID
(*PROCESS_IPSEC_SA_EXPIRE0)
(
IN const FWP_IPSEC_SA_EXPIRE_NOTIFY0*expireNotify
);
其中,由以下内容表述这些所列举的参数的特征。
expireNotify包含识别该期满SA的信息。例如,在出站SA的情况下,提供该SPI。
密钥模块调用“IPSec SA获取完成”374方法,以便在它已结束商议并增加所有这些SA之后,或在它已碰到错误之后,关闭该用户策略引擎的上下文。在执行该方法之后,该密钥模块没有对于其他任何API方法再使用该
ipsecContext。以下是该“IPSec SA获取完成”方法的示范形式。
WIN32_ERR
FwpIPSecSAAcquireComplete0
(
IN FWPM_ENGINE_HANDLE engineHandle,
IN FWP_IPSEC_ACQUIRE_CONTEXT0 ipsecContext,
IN const FWP_IPSEC_NEGOTIATION_STATUS0* status
);
其中,由以下内容表述这些所列举的参数的特征。
engineHandle为用户策略引擎260提供句柄。
ipsecContext是由用户策略引擎利用该“IPSec获取”方法传递的该上下文。
status提供该SA商议的状态和其他细节。如果经由FwpKeyingModuleInitiate0在外部启动过该获取,则用户策略引擎260返回该状态。
由密钥模块来调用“密钥模块登记”方法376,以便向用户策略引擎260登记,并传递其功能指针。以下是该“密钥模块登记”方法的示范形式。
WIN32_ERR
FwpKeyingModuleRegister0
(
IN FWPM_ENGINE_HANDLE engineHandle,
IN const GUID* keyingModulelD,
IN const FWP_KEYING_MODULE_INFO0* keymodInfo
);
其中,由以下内容表述这些所列举的参数的特征。
engineHandle为用户防火墙引擎260提供该句柄。
keyingModuleID是关于该密钥模块的唯一ID。
keymodInfo包括关于该密钥模块层的登记信息(例如,指向处理“IPSec SA获取”和“IPSec SA期满”函数的指针)。
由该密钥模块来调用“密钥模块解除登记”方法378,以便从用户策略引擎260中解除登记该密钥模块。以下是该“密钥模块解除登记”方法的示范形式。
WIN32_ERR
FwpKeyingModuleDeregister0
(
IN FWPM_ENGINE_HANDLE engineHandle,
IN const GUID* keyingModuleID
);
其中,由以下内容表述这些所列举的参数的特征。
engineHandle是给用户策略引擎260的该句柄。
keyingModuleID是该密钥模块的唯一ID。
由该密钥模块来调用“IPSec入站获得SPI”方法380,以获得关于新的入站SA的该SPI。当该密钥模块在响应的网络设备中执行时,通常使用“IPSec入站获得SPI”方法380。以下是该“IPSec入站获得SPI”方法的示范形式。
WIN32_ERR
FwpIPSecSAInboundGetSpi0
(
IN FWPM_ENGINE_HANDLE engineHandle,
IN const FWP_IPSEC_TRAFFIC0* ipsecTrafficDescription,
IN const FWP_IPSEC_UDP_ENCAP0* udpEncapInfo,
OUT FWP_IPSEC_SPI* inboundSpi
);
其中,由以下内容表述这些所列举的参数的特征。
engineHandle是给用户防火墙引擎260的该句柄。
ipsecTrafficDescription是用于创建入站幼小状态的SA的5元组说明。该5元组包括源IP地址与目的IP地址、源端口与目的端口,以及传输层协议类型。
udpEncapInfo是用于创建该幼小状态的SA的UDP封装数据。UDP封装是将根据安全协议而加以格式化的信息包嵌入未加密的UDP信息包的一种已知的方法。
inboudSpi是关于该入站SA的该SPI。
由该密钥模块层来调用“增加入站SA”方法382,以增加入站SA(即,更新该幼小状态的SA)。用户策略引擎260使用该SA中的该SPI来将此调用映射到其内部状态,并将该SA ioctl down到该IPSec驱动器。以下是该“增加入站SA”方法的示范形式。
WIN32_ERR
FwpIPSecSAInboundAdd0
(
IN FWPM_ENGINE_HANDLE engineHandle,
IN const FWP_1PSEC_SA_STRUCT0* inboundSA
);
其中,由以下内容表述这些所列举的参数的特征。
engineHandle是到该用户策略引擎的句柄。
inboundSA包括该入站SA。
由密钥模块层来调用“增加出站SA”384方法,以增加一出站SA。该用户策略引擎使用入站SPI参数来将此调用映射到其内部状态,并将该SA下载(ioctl down)到该IPSec驱动器。以下是该“增加出站SA”方法的示范形式。
WIN32_ERR
FwpIPSecSAOutboundAdd0
(
IN FWPM_ENGINE_HANDLE engineHandle,
IN FWP_IPSEC_SPI inboundSpi,
IN const FWP_IPSEC_SA_STRUCT0* outboundSA
);
其中,由以下内容表述这些所列举的参数的特征。
engineHandle是到用户防火墙引擎260的句柄。
onboundSpi是关于该入站SA的该SPI,该入站SA与出站SA配对。
outboundSA包括该出站SA。
由该密钥模块来调用“入站SA期满”方法386,以期满先前增加的该入站SA。以下是“入站SA期满”方法386的示范形式。
WIN32_ERR
FwpIPSecSAInboundExpire0
(
IN FWPM_ENGINE_HANDLE engineHandle,
IN const FWP_IPSEC_SA_EXPIRE0 *expire
);
其中,由以下内容表述这些所列举的参数的特征。
engineHandle是到用户防火墙引擎260的句柄。
expire包括关于将要期满的该SA的数据。
由已知的外部应用程序(比如RAS、Winsock API和类似物)来调用“密钥模块启动”方法388,以便在应用程序开始发送其网络信息流通量之前,启动该密钥模块层并设置SA。用户策略引擎260异步地使该RPC调用待决,从IPSec驱动器那里获得该SPI,并将该获取传递到这个合适的密钥模块。一旦该密钥模块层调用FwpIPSecSAAcquireComplete0,该用户防火墙引擎就完成具有该商议状态的该异步RPC。以下是该“密钥模块启动”方法的示范形式。
WIN32_ERR
FwpKeyingModulelnitiate0
(
IN FWPM_ENGINE_HANDLE engineHandle,
IN const FWP_IPSEC_SA_ACQUIRE0* acquire,
IN HANDLE waitEvent,
OUT FWP_IPSEC_NEGOTIATION_STATUS0* negotiationStatus
);
其中,由以下内容表述这些所列举的参数的特征。
engineHandle是到用户策略引擎260的句柄。
acquire包括商议SA所必要的数据。
waitEvent是当存在商议状态时到被触发的事件的句柄。如果客户(即,调用外部应用程序)没有兴趣等待该商议完成,则它可以将这个参数设置为NULL。在内部,该客户代理人可任选地将这个事件传递到RPC,并且,一旦该异步RPC调用完成,就请求它设置这个事件。
negotiationStatus包括该商议的结果。如果waitEvent是NULL,则该negotiationStatus是NULL。否则,negotiationStatus保持有效,直到该waitEvent被触发为止。
图7展示了根据本发明的方法400,由此,可将新的过滤器加入被安装的过滤器集282。方法400允许加入这个新的过滤器,同时可解决与该框架中所安装的其他过滤器的任何冲突。
在步骤402中,用户防火墙引擎260从策略提供器262之一那里接收新的策略。如前所述,策略提供器262是任何合适的来源(例如,被存储在易失或非易失存储器中的数据,或通过经由GUI的用户输入的数据)。
然后,通过按照如步骤404中所示的过滤器属性304、动作306和过滤器条件308来定义这项新策略,该用户防火墙引擎将这项新策略作为新的过滤器来提出。也可以提供过滤器Id 302和策略上下文。
过滤器属性304包括优先级类别310、取代允许312和加权314。优先级类别310是对这项新策略负责的该用户或处理(例如,用户、网络管理员、防火墙客户机或客人,其中的每个都具有被分配的值)的身份的功能。该优先级类别的这个值越高,该过滤器的优先级就越高。
取代允许312规定可以取代这个新的过滤器的较低优先级过滤器中的动作(即,即使该过滤器具有较低优先级类别,也将会采取的动作)。该取代允许由策略提供器262来规定,并且具有默认值“无”。
加权314识别这个新的过滤器相对于其他被安装的过滤器的优先顺序。加权314由用户防火墙引擎260来自动计算,或者作为选择,由策略提供器262来确定。参照图10来描述用于自动计算该加权的方法。
在步骤406中,用户防火墙引擎260确定这个新的过滤器是否与活动过滤器清单288上所包括的被安装的过滤器282中的任何过滤器发生冲突。被安装的过滤器282被存储在该核心防火墙引擎中,或者作为选择,被存储在过滤器模块294中。可以将过滤器分配给特定的用户层或核心层,在这种情况下,只在这个新的过滤器与被分配给同一个层的被安装的过滤器282之间存在冲突。作为选择,用户防火墙引擎260确定这个新的过滤器是否与任何被安装的过滤器282发生冲突,而不管是否为特定的用户层或核心层分配过滤器。参照图9来描述一种用于识别是否存在冲突的方法。如果没有识别冲突,则使用(例如)“增加过滤器”方法364来将这个新的过滤器加入被安装的过滤器集282,并且,如步骤408中所示的那样将这个新的过滤器加入活动过滤器清单288。
如果这个新的过滤器与至少一个被安装的过滤器发生冲突,则用户防火墙引擎260确定:这个新的过滤器是否具有比如步骤410中所示的那个发生冲突的、被安装的过滤器更低的优先级类别310。如果这个新的过滤器具有较低优先级类别310,则如步骤412中所示,这个新的过滤器被加入被安装的过滤器集282,并被加入禁用清单286。当响应于请求层所发出的分类请求时,禁用清单286上的被安装的过滤器没有被该用户或核心防火墙引擎识别为匹配过滤器。
如果这个新的过滤器具有比该发生冲突的、被安装的过滤器更高的优先级类别310,则如步骤414中所示,这个新的过滤器被加入被安装的过滤器集282,并被加入活动清单288。然后,如步骤416中所示,从活动清单288中移去这个发生冲突的、被安装的过滤器,并将其加入该禁用清单。
在将这个发生冲突的、被安装的过滤器移入禁用过滤器清单286的情况下,用户防火墙引擎260也确定:现在是否可以将禁用过滤器清单286中所识别的任何过滤器移入活动过滤器清单288。当禁止使用过滤器时,会发生这种情况,因为它与正从活动过滤器清单288移入禁用过滤器清单286的那个过滤器发生了冲突。如果可能的话,可从禁用过滤器清单286中移去任何这类的过滤器,并将其移入活动过滤器清单288。这个处理可能是递归的。明确地说,当每个过滤器被加入活动过滤器清单288时,有必要禁止使用任何较低优先级的、发生冲突的过滤器。当任何过滤器被加入该禁用过滤器清单时,需要激活任何以前被取而代之的禁用过滤器。
如前述方法所展示的,这个新的过滤器总是被加入被安装的过滤器集282,并且,要么被包括在活动过滤器清单288中,要么被包括在禁用过滤器清单286中。这个新的过滤器的结果是:发生冲突的、被安装的过滤器可能会从活动清单286变到该禁用过滤器清单。
参考图8,现在将描述用于从被安装的过滤器集282中移去过滤器的方法420。在步骤422中,调用用户防火墙引擎260来移去特定的过滤器。
在步骤422中,方法420从被安装的过滤器集282中移去该过滤器。参照“删除过滤器”方法366描述过一种用于移去过滤器的方法。
在步骤426中,方法420确定这个被移去的过滤器是否曾在禁用过滤器清单288中。如果该过滤器曾在禁用清单288中,则该方法如通常所示的那样结束。如果该过滤器曾经不在禁用过滤器清单288中(即,曾在活动过滤器清单286中),则方法420可任选地识别被取代过的(即,与这个被移去的过滤器发生冲突的)、禁用过滤器清单288中的任何过滤器。然后,如步骤428中所示,从禁用过滤器清单288中移去这些被取代的过滤器,并将它们加入活动过滤器清单286。利用这种方式,当从被安装的过滤器集282中移去较高优先级的、发生冲突的过滤器时,激活以前被禁止使用的过滤器。作为选择,该方法不执行步骤426和428,并且,在该禁用过滤器清单中保存被取代的过滤器。
图9展示了方法450,用户防火墙引擎260使用该方法来识别第一个过滤器是否与第二个过滤器发生冲突。例如,如果这第一个过滤器是将要被安装在被安装的过滤器集282中的新的过滤器,并且这第二个过滤器是被安装的过滤器集282中的现存的过滤器,则使用这种方法。
在步骤452中,用户防火墙引擎260识别一组潜在的有争执的过滤器。潜在的有争执的过滤器是具有过滤器条件的共同(即,重叠的集合)、不同动作(例如,允许和阻滞)和无共同的取代允许的过滤器。如果较低优先级过滤器指定不同的动作,但那个动作被识别为该较高优先级过滤器中的取代允许,则存在共同的取代允许。参照“列举层”方法368来描述过一种用于识别与一套准则(例如,过滤器条件和动作)相匹配的过滤器的方法。在本发明的实施例中,该用户防火墙引擎只为被安装的过滤器282(被分配给相同的层,作为这个新的过滤器)识别潜在的有争执的过滤器。
在步骤454中,用户防火墙引擎260确定是否存在实际的有争执的过滤器。实际的有争执的过滤器是潜在的有争执的过滤器——其中,这第一个过滤器具有比这第二个过滤器更高的加权值314、但比其更低的优先级类别值310;或者,反之亦然。如果不存在实际的有争执的过滤器,那么,方法250确定:如步骤456中所示,不存在冲突;并且,如一般所示,该过程结束。如果存在实际的有争执的过滤器,则处理450确定:如步骤458中所示,存在冲突。
参考图10,现在将描述用于为新的过滤器自动计算加权值314的方法468。该加权取决于该过滤器的专指性。该过滤器的专指性是过滤器条件308的函数。通常的规则是,如过滤器条件308所确定的,潜在地与过滤器相匹配的信息包越少,为该过滤器提供的该加权值就越高。
如步骤470中所示,用户防火墙引擎260为这个新的过滤器识别按层加权定义。该按层加权定义包括来自关于被分配给该过滤器的这个层的过滤器条件308的加权值字段314的比特分配。在本发明的实施例中,该加权值字段是32比特数字。相应地,该按层加权定义从这32个比特将一些特殊的比特分配到对于该层的这些过滤器条件。表格B展示了关于该传输层的示范的按层加权定义——比特32是最高有效位,位0是最低有效位。
表格B
将要注意,一些过滤器条件比该按层加权定义中的其他过滤器条件更重要。例如,在表格B中所示的该按层加权定义中,源IP地址过滤器条件308占据最高8个比特,因此,它在该总加权值中比其他任何过滤器条件308更重要。目的IP地址过滤器条件308占据次高8比特,它比除该源IP地址过滤器条件以外的其他任何过滤器条件更重要。每个层具有其自己的按层加权定义,表格B中的该按层加权定义起举例说明的作用,而不作限制。
在步骤472中,为该按层加权定义中的每个过滤器条件确定比例因数,以便可以将该过滤器条件换算成适合被分配的比特的数目。出于这个目的,可以使用任何方法。以下是用于确定该比例因数的示范方法。
LogN(最大过滤器条件范围大小)=(最大加权)
其中,由以下内容表述这些所列举的参数的特征。
N是该比例因数。
最大过滤器条件范围大小是该过滤器条件的最大范围。例如,在IPv4地址的情况下,该“最大过滤器条件范围大小”是32比特,它转化为232或近似43亿。在源端口和目的端口的情况下,该“最大过滤器条件范围大小”是216或65,536。
最大加权是可以被放置在被分配给加权值字段314中的该过滤器条件的比特数中的最大值。例如,在以上的例子中,该源IP地址和目的IP地址每个被分配8个比特,这呈现28-1或255的最大加权值。该协议被分配2个比特,这呈现22-1或3的最大加权值。该源端口和目的端口每个被分配4个比特,这呈现24-1或15的最大加权值。
通过使用以上的换算方法,用户防火墙引擎260为比例因数N进行求解。作为特殊的例子,如果该过滤器条件是该源IP地址,并且它被分配加权值字段314中的8个比特,则通过为方程式LogN(232)=(255)中的N进行求解,可以得出N~=1.09051。
在步骤474中,使用该比例因数,将这些过滤器条件中的每个过滤器条件换算成适合加权值字段314中的被分配的比特的数目。以上展示了如何使用以前所描述的换算方法来换算该过滤器条件。
被换算的加权值=(最大加权)-LogN(总数过滤器条件值)
其中,由以下内容表述这些所列举的参数的特征。
被换算的加权值是将要被放置在该加权值中所分配的这些比特中的该加权值。
最大加权是可以被放置在被分配给加权值字段314中的该过滤器条件的比特数中的最大值。
N是如前所述的该比例因数。
总数过滤器条件值是该过滤器条件中所规定的值的数目。例如,如果单一IP地址被规定为该过滤器条件,则该“总数过滤器条件值”是1。如果规定10个IP地址的范围,则该“总数过滤器条件”是10等。
作为特殊的情况,假设:该过滤器条件规定1.2.3.0~1.2.3.255的源IP范围。1.2.3.0~1.2.3.255的范围内的源IP地址的数目是256个地址。该“被换算的加权值”等于255-Log1.09051(255)=193。
在步骤478中,将该“被换算的加权值”放置在被分配给该过滤器条件的这些位中的该加权值字段中。在这个例子中,193的值作为二进制数被放入比特字段25~32。
该每一加权层加权定义可以将几个比特分配给僵持消除符条件——通常是这些是最低有效位。使用该僵持消除符值来确保:每个过滤器具有唯一加权值314。可以使用合适的方法来确定该僵持消除符值。例如,它可能是一个值,该值为每个新的被安装的过滤器递增值1。作为选择,假如没有为一个以上的过滤器使用相同的随机数,则它可能是随机数。
为该按层加权定义中所规定的每个过滤器条件完成方法468,从而呈现32比特加权值字段314。作为选择,将两个或更多的过滤器条件组合到单一权空间中。例如,单一权空间包括2*(被换算的源IP地址)+(被换算的目的IP地址)。
鉴于可以应用本发明的这些原理的这许多可能的实施例,应该认识到:这里根据这些附图而描述的该实施例意在只起说明的作用,而不应该被视作限制本发明的范围。例如,精通该技术领域的人将会认识到:可以以硬件实现以软件所示的该说明性实施例的这些元件,反之亦然;或者,在不脱离本发明的精神的前提下,可以在布置和细节方面修改该说明性实施例。所以,如这里所描述的本发明计划可以将所有这类实施例纳入以下的如权利要求书及其相等物的范围以内。