基于指令的报文过滤方法及系统与流程

文档序号:12376987阅读:267来源:国知局
本发明涉及报文过滤方法及系统,尤其涉及一种基于指令的报文过滤方法及系统。
背景技术
::企业级的网络设备,诸如防火墙、路由器、流控设备,都需要对报文作匹配然后根据匹配结果执行不同的动作。这些动作均在内核层完成,而内核层的修改会对设备的稳定性、性能有非常大的影响。企业级的网络设备在报文匹配上有非常大的需求而且报文匹配动作需求会一直持续,比如识别用户、用户组、应用层协议等,同时对报文作丢弃、重定向、镜像、日志等不同的动作。目前报文过滤有“iptables方法”、“Nftables方法”、“内核模块实现”:1、iptables方法基本原理:使用iptables实现匹配和动作,如果通用iptables模块不满足则需要自己开发iptables的匹配和动作模块。应用层程序负责维护iptables命令。不足之处:iptables命令下发效率非常低,每一条规则都需要与内核交互一次;iptables是基于报文的过滤系统,但企业级的网络设备一般对同一条流作相同的处理,如此导致报文处理过程中性能较低;开发iptables匹配和动作模块需要很强的内核编程能力,这对于普通程序员来说难度较大。2、Nftables方法基本原理:基于指令的包过滤系统,提供完整的内核实现和应用层命令。本文也正是借鉴了Nftables中的指令思想。不足之处:Nftables为包过滤系统,一条流中的所有报都会处理。Nftables应用层命令较复杂,且目前帮助资料较少,大部分程序员使用时学习成本较高。3、内核模块实现基本原理:直接编写内核模块,可以根据自身业务需要调整输入输出,与iptables相比可以极大的提高应用层命令下发的速度。同时在报文处理过程中也可以根据业务需要调整,确保报文处理性能优化。不足之处:内核模块对于稳定性、性能有着相当高的要求。本方法对程序员的个人能力要求很高,但事实上程序员能力参差不齐,无法要求所有人员都具备这样的能力。技术实现要素:本发明的目的就是为了解决现有技术中存在的上述问题,提出了一种使用简单、扩展性强、性能优异的基于指令的报文过滤方法及系统。本发明的目的将通过以下技术方案得以实现:基于指令的报文过滤方法,包括如下步骤:接收报文后,按照指定顺序依次遍历规则链;在遍历一条规则链时,按照设定顺序遍历每个规则链所包含的规则;在遍历一条规则时,依次遍历当前规则的所有指令;按照指令对应的报文动作对报文进行处理。优选的,所述的基于指令的报文过滤方法,其中:在指令处理过程中,使用全局寄存器存储和传递报文动作以及中间结果。优选的,所述的基于指令的报文过滤方法,其中:所述全局寄存器包括至少20个4字节的分寄存器,每条指令对应至少一个分寄存器;一条规则中的指令使用分寄存器传递中间结果,同时将报文动作存储到全局寄存器的前4个字节中。优选的,所述的基于指令的报文过滤方法,其中:所述全局寄存器包括80个字节,其划分为20个4字节的分寄存器。优选的,所述的基于指令的报文过滤方法,其中:所述指令对应的报文动作至少包括丢弃动作、退出当前规则动作、退出当前规则链动作以及继续下一条指令动作。基于指令的报文过滤系统,包括:指令引擎,用于接收报文后,按照指定顺序依次遍历规则链;在遍历一条规则链时,按照设定顺序遍历每个规则链所包含的规则;在遍历一条规则时,依次遍历当前规则的所有指令,按照指令对应的报文动作对报文进行处理;以及全局寄存器,用于用于上述指令处理时使用。优选的,所述的基于指令的报文过滤系统,其中:每个所述规则链对应一个功能模块,所述规则链可以包括防火墙规则链、QOS规则链以及组ID识别规则链。优选的,所述的基于指令的报文过滤系统,其中:还包括应用层接口,为每个指令提供一个应用层接口函数,用于进行规则链、规则的添加和删除以及指令的添加。本发明技术方案的优点主要体现在:简化大部分程序员的工作,这些程序员只需要编写应用层代码就可以完成报文的匹配和动作,不需要写任何的内核层代码。如果原有指令不满足则需要扩展指令,由熟悉内核的技术人员完成,从而将工作内容区分开来,确保最核心的开发工作由资深专家实现,如此可以极大的提高系统稳定性和性能,而且降低了普通程序员的开发难度。附图说明图1是本发明中“丢弃所有源IP为1.2.3.4的报文”的报文过滤策略指令结构示意图;图2是本发明中“如果是QQ协议报文则丢弃否则修改报文优先级为3”的报文过滤策略指令结构示意图;图3是本发明的指令引擎的结构示意图。具体实施方式本发明的目的、优点和特点,将通过下面优选实施例的非限制性说明进行图示和解释。这些实施例仅是应用本发明技术方案的典型范例,凡采取等同替换或者等效变换而形成的技术方案,均落在本发明要求保护的范围之内。基于指令的报文过滤系统,包括:指令引擎,用于在接收报文后,按照指定顺序依次遍历规则链;在遍历一条规则链时,按照设定顺序遍历每个规则链所包含的规则;在遍历一条规则时,依次遍历当前规则的所有指令,并按照指令对应的报文动作对报文进行处理。所述指令引擎包括若干规则链,每个所述规则链对应一个功能模块,所述规则链至少包括如附图3所示的防火墙规则链、QOS规则链以及组ID识别规则链。每个规则链又包括至少一个规则,如规则1、2、3……N,从规则1开始往后顺序执行,例如附图3所示,“filter规则链(chain)”包含多条规则,rule1、rule2……ruleN。每个规则又包含至少一条指令,它是完成报文处理的一种处理逻辑,可以读取报文的内容(比如IP五元组)到全局寄存器,也可以将全局寄存器内容写入报文数据结构(比如报文的QoS队列等);而每一条指令用于完成一件事情,在处理规则时也会顺序处理此规则下的指令,按照指令动作作报文处理,如附图3所示,“rule2”是由5条指令组成,整个指令的含义是“禁止用户ID为12的用户使用QQ”,其中,第一条指令将用户ID放入寄存器R1,第二条指令比较寄存器R1与12,不相等则直接退出这条规则否则继续下一条指令,第三条指令将应用协议ID放置寄存器R2,第四条指令比较R2和QQ的应用协议ID,不相等则直接退出这条规则否则继续下一条指令,第五条指令丢弃此报文。某些指令除了操作下述的全局寄存器外,还有附作用(sideeffect),详细指令描述如下:1.general通用的读写指令,其中读指令,用于将数据读取到寄存器,比如将报文的源IP读取到寄存器R1,用于后续处理;写指令,用于将寄存器内容写入报文,比如寄存器R1中已经存储了QoS队列值,则将此报文的QoS队列修改为R1的值,用于后续QoS调度处理。2.cmp通用的比较指令,至少包括整数比较(支持大小比较)、内存比较(仅支持等于不等于)、寄存器内容比较。这条指令有一个附作用,报文匹配时,如果当前比较指令不为真,则直接退出当前规则匹配,此规则后续所有的指令均不需要再次执行,继续当前规则链的下一条规则执行。3.byteorder字节序转换指令,包括4字节和2字节转换。4.bitwise位操作指令,支持与、或、非、异或等所有的位操作指令。5.immediate动作指令,至少包括丢弃、退出规则链、退出规则等动作;每个动作指令有一个附作用,即:(1)“丢弃”动作会使得当前报文退出所有规则链处理逻辑,直接被丢弃并退出引擎;(2)“退出规则链”动作会导致此报文忽略规则链中的后续所有规则,继续下一条规则链处理,这个动作在处理“用户策略首条命中”时非常有效,即第一条用户策略满足时,后续的策略均不需要处理;举例来说,QoS队列策略只要报文满足一条策略,则会标记报文的QoS队列,而且后续的策略均不需要再匹配;(3)“退出当前规则”动作会导致此报文忽略规则中的后续所有指令,继续下一个规则的处理。所述基于指令的报文过滤系统还包括全局寄存器,用于上述指令处理时使用,所述全局寄存器包括至少20个4字节的分寄存器,本实施中优选全局寄存器为80个字节,并划分为20个分别为4字节的分存储器,例如设置为R0-R19,其中分寄存器R0(前4个字节)固定存储报文动作,执行完每条指令均会检查此分寄存器中的报文动作,安装动作进行不同的处理。每条指令对应至少一个分寄存器,每一条指令有自己的局部空间,可以定义立即数等内容,还可以实现更复杂的结构,根据不同指令的不同要求可以自由实现;一条规则中的指令使用分寄存器传递中间结果,同时将报文动作存储到全局寄存器的前4个字节中,比如前一条指令的输出可以作为后一条指令的输入,例如“禁止源IP为1.2.3.4的报文”,第一条指令会将报文的源IP读取的分寄存器R1中,此时R1就是一个中间结果;在执行第二条指令时会使用分寄存器R1与立即数1.2.3.4比较。所述的基于指令的报文过滤系统,进一步包括应用层接口,用于为每个指令提供一个应用层接口函数,以进行规则链、规则的添加和删除以及指令的添加;实际使用时,初始化时,添加规则链,规则链在系统运行期间一直有效,根据用户配置再添加规则到规则链中,用户的报文过滤策略需要程序员转换成指令,但在删除时,直接删除规则即可,不需要单独删除指令,删除规则即删除规则下的所有指令。在使用上述系统进行报文过滤前,需要先定义规则链(chain):根据用户需要定义若干个规则链,即定义多个功能模块,比如防火墙、QoS、组ID识别等;因为系统中包含若干个规则链,报文处理时按照规则链预定的顺序依次遍历各个规则链;由于规则链对应不同的功能模块,故规则链的顺序一般没有影响,在系统开发前预先定义规则链的顺序。翻译规则(rule):即将用户添加的报文过滤策略翻译为规则,举例来说,如附图1所示,对于将过滤策略“丢弃所有源IP为1.2.3.4的报文”翻译成三条指令,首条指令将报文源IP加载入寄存器R1,第二条指令是比较寄存器R1与1.2.3.4的IP地址,第三条指令丢弃报文;而1.2.3.4这个4字节IP地址存储在cmp指令的局部空间中。在实际使用时,可以将用户添加的报文过滤策略先使用伪码实现,然后再翻译成指令,注意,如果报文策略包含if/else,如附图2所示,报文过滤策略“如果是QQ协议报文则丢弃否则修改报文优先级为3”,则需要翻译成两条规则,一条规则处理QQ协议报文的丢弃,另一条处理非QQ协议报文的优先级修改。定义规则(rule):即定义一个规则中的若干个指令的顺序,并根据指令的顺序从前至后依次执行。程序员在编程时,首先要创建自己的规则链,然后按照用户配置要求创建各自的规则,所有过程都是应用层代码,不涉及内核代码编写,极大提高了此类代码的稳定性。本发明进一步揭示的基于指令的报文过滤方法,包括如下步骤:接收报文后,按照指定顺序依次遍历规则链;在遍历一条规则链时,按照设定顺序遍历每个规则链所包含的规则;在遍历一条规则时,依次遍历当前规则的所有指令;按照指令对应的报文动作对报文进行处理。本发明尚有多种实施方式,凡采用等同变换或者等效变换而形成的所有技术方案,均落在本发明的保护范围之内。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1