一种基于时间触发转发检测调度的方法与流程

文档序号:11959906阅读:213来源:国知局

本发明涉及一种基于时间触发转发检测调度的方法,属于信息安全技术领域。



背景技术:

在TCP/IP网络应用中,通信的两个进程间相互作用的主要模式是客户/服务器(Client/Server,C/S)模式,即客户向服务器发出服务请求,服务器接收到请求后,提供相应的服务。服务器端对客户端请求响应调度时一般是基于串行叠加的方式进行的,即按时间的先后顺序对客户端请求逐一作出响应,服务器程序对客户端请求数据进行逐一检测合法性,如客户端IP地址信息、请求数据包信息是否重放、是否被篡改、是否存在非法入侵等。这种典型的处理模式是网络抓包、检测、分析,对不符合通讯协议的网络数据包进行拦截报警,对异常连接、非法入侵。

客户/服务器模式的建立基于以下两点:(1)首先,建立网络的起因是网络中软硬件资源、运算能力和信息不均等,需要共享,从而造就拥有众多资源的主机提供服务,资源较少的客户请求服务这一非对等作用。(2)其次,网间进程通信完全是异步的,相互通信的进程间既不存在父子关系,又不共享内存缓冲区,因此需要一种机制为希望通信的进程间建立联系,为二者的数据交换提供同步,这就是基于客户/服务器模式的TCP/IP。即使是高端网卡在skb的buffer管理方面,也没有使用完全意义上的预分配内存池,因此会由于频繁的内存分配,释放造成内存颠簸,众所周知,内存操作是问题的根本,因为它涉及到CPU Cache,总线争抢,原子锁等,实际上,内存管理才是根本中的根本,这里面道道太多,它直接影响CPU cache,后者又会影响总线...从哪里分配内存,分配多少,何时释放,何时可以重用,这就牵扯到了内存区域着色等技术。通过分析Intel千兆网卡驱动,在我看来,Linux并没有做好这一点。

Linux转发效率受到以下几大因素影响:

(1)IO/输入输出的队列管理/内存修改拷贝:重新设计类似crossbar的队列管理实现DMAring交换,各种表查询操作,特别是最长前缀匹配,诸多本身唯一确定的查询操作之间的关联没有建立,SMP下处理器同步(锁开销)(使用大读锁以及RCU锁)以及cache利用率。

(2)中断以及软中断调度:在网络数据包检测上,尽管操作系统已支持用户态下对网络数据包进行深度检测,可其性能是非常低效,甚至无法使用。原因是:用户态下对网络协议包进行深度检测时,需要将数据从内核态拷贝到用户态,处理完毕后,再拷贝到内核态。2次内存拷贝和检测时延严重影响了系统性能。内核会将该数据报文传递到用户态。这样,用户态的程序对报文进行处理后,并通告内核如何处理该数据报文;如果用户态下变更了报文,还需要将修改后的报文提交到内核。内核依据用户态处理意见处理该报文(接收、丢弃、终止)。此过程涉及2次内存拷贝,用户态下数据检测,效率不高。

通过分析比较后,发现目前的用户态协议栈虽然可以解决调试难、组装难、定制化难的问题,但存在如下问题:

1)性能与效率问题。无论是共享库方式还是构件方式,协议栈中各协议间充斥了接口调用、数据拷贝。这类操作将带来性能瓶颈。

2)安全性问题。“网络协议栈的用户层实现机制研究”中强调了登录服务器对通信实体鉴权、I/O模块保存利用通信许可证中的发送头与接收头构成验证模板,只有与模板匹配到报文才会发送或接收。这样,只要中止或控制了登录服务器,即可使整个协议栈瘫痪。同时,基于构件的协议栈,其构件接口地址可能被篡改,从而导致协议栈失效。3)报文控制问题。目前的用户态协议栈,出发点是协议栈调试与裁剪定制化,较少未考虑报文控制。即使是防火墙,也只能简单的ACL规则控制,未在协议栈内实现报文的深度检测。实时阻隔总是滞后。



技术实现要素:

本发明的目的在于提供一种基于时间触发转发检测调度的方法,以便更好地改善使用效果,方便根据需要使用。

为了实现上述目的,本发明的技术方案如下。

一种基于时间触发转发检测调度的方法,利用抓包接收数据重组模块根据系统硬件配置高低、CPU个数和核心数量,自动确定抓包线程的数量,采用多线程方式进行网络抓包,这样可以保证数据包处理能力,提高抓包效率,防止在网络繁忙时出现丢包想象;重装TCP数据段,流重组主要基于数据包保序和并发处理的考虑,一方面,有些协议解析部分的模块需要对连续有序的数据包进行解析处理,另一方面,流重组可以使属于一个会话的数据包某时某刻只在一个核上进行处理,从而保护了会话以及高层的数据结构,也减少了并发系统的开发难度。

存储tcp分段的数据结构是一个二维链表,也叫作重组表,具有相同socket对(源ip地址、目的ip地址、源端口号、目的端口号)的tcp数据包放在一个横向的链表里,该链表的头节点只保存了源ip地址、目的ip地址、源端口号、目的端口号这些信息。

重装TCP数据段的方法是:

1.每到来一个tcp数据包,我先将该数据包的源ip地址、目的ip地址、源端口号、目的端口号取出来在重装表中纵向的链表中查找有没有与它相匹配的链表存在,如果有,就把数据包放入与它有相同socket对的链中,放入链表的时,先查找的顺序号在链表中的适当位置,然后放入;如果没有,则在链表中新创建一个该类型的链表头节点,然后再将其放入新创建的链表中。

2.每当在表中放入一个tcp数据段后,就检查链表中的数据段是否已经到齐了,若到齐,就将个链表中所有数据段的数据部分拼接到一起,得到应用层报文,然后释放该链表,然后重复1-2步骤;若没到齐,直接重复1-2步骤。

交换DMA映射,而不是在输入/输出缓冲区之间拷贝数据,不在DMA情况拷贝内存,正确的做法是DMA重映射,交换指针,每线程负责一块网卡,输入和输出由不同的线程负责会更好,保持一个预分配可循环利用的缓冲区,映射DMA利用多队列网卡支持中断CPU亲和力利用或者模拟软多队列提高并行性。

解码模块:解码模块采用多线程模式,对数据包进行解码,从数据队列中取得数据进行解码,主要是对数据包头部信息进行分析并保存在包结构中。数据包头部信息除通讯双方基本信息外还包含持有PKI证书信息的节点卡、用户卡信息、防重放信息、防篡改信息,业务数据采用BASE91编码解码算法,对不合法数据转发到异常数据队列中,由异常处理线程模块进行处理;解码正确的数据包存放到业务检测队列中,由检测模块负责检测处理。

检测模块:检测线程模块是转发调度系统的核心模块,检测模块数据包是否包含非法访问,入侵行为,检测基于时间触发,当业务数据包到达检测队列时,开始记录触发时间,保存时间戳,检测模块采用并行监测方式对业务白名单进行遍历检测,白名单存储的是所有业务数据的特征码摘要信息,白名单信息采用TRIE数(字典数)存储,

在该trie树中,字符串in,inn和int的公共前缀是“in”,因此可以只存储一份“in”以节省空间。当然,如果系统中存在大量字符串且这些字符串基本没有公共前缀,则相应的trie树将非常消耗内存,这也是trie树的一个缺点。

Trie树的基本性质可以归纳为:(1)根节点不包含字符,除根节点意外每个节点只包含一个字符。(2)从根节点到某一个节点,路径上经过的字符连接起来,为该节点对应的字符串。(3)每个节点的所有子节点包含的字符串不相同。

判断线程模块:对检测后的数据包进行判定,并将判定结果告诉内核,方便内核对数据包进行接收、丢弃等处理。

响应模块:通过libnet对那些要执行Reject操作的数据包进行相应的回应。

所述接收队列模块,采用内存映射方式,直接操作操作系统内核空间,为IP分片代理提供网络数据包;

所述发送队列模块,接收所述系统中其它模块的发送数据内存申请请求,并将直接映射到内核空间。

上述方法中,各协议彼此独立为协议代理,各协议代理间接口遵循标准协议接口规范;协议代理直接启用过滤规则处理协议包,过滤规则可以动态修改;协议栈运行在用户态下,上下层协议代理间强制身份认证。

该发明的有益效果在于:本发明采用内核态空间与用户态空间映射法,避免了用户态协议栈与内核间2次内存拷贝;协议栈内各协议代理间共享同一内存空间,避免了数据包在各协议代理间拷贝。减少了内存拷贝操作,增强了性能与效率。本发明进一步采用基于用户设定的规则在协议栈内对报文进行深度检测,解决了目前用户态防火墙的低效率问题;同时,用户可以自己设置报文过滤规则,增强了用户对报文的安全管控能力。本发明还提供了实体间安全认证方法,使协议栈内上下层实体无法冒称与伪造,同时,即使在运行时某实体被篡改,也能通过其在内存中的备份自动恢复,增强了协议栈的安全性。本发明所提供的系统,可以广泛用于主机防火墙、内容检测设备、信息交换设备等需要用户频繁更新过滤规则的场景,定制出更符合实际要求的安全管控产品。

具体实施方式

下面结合实施例对本发明的具体实施方式进行描述,以便更好的理解本发明。

实施例

本实施例中的基于时间触发转发检测调度的方法,利用抓包接收数据重组模块根据系统硬件配置高低、CPU个数和核心数量,自动确定抓包线程的数量,采用多线程方式进行网络抓包,这样可以保证数据包处理能力,提高抓包效率,防止在网络繁忙时出现丢包想象;重装TCP数据段,流重组主要基于数据包保序和并发处理的考虑,一方面,有些协议解析部分的模块需要对连续有序的数据包进行解析处理,另一方面,流重组可以使属于一个会话的数据包某时某刻只在一个核上进行处理,从而保护了会话以及高层的数据结构,也减少了并发系统的开发难度。

存储tcp分段的数据结构是一个二维链表,也叫作重组表,具有相同socket对(源ip地址、目的ip地址、源端口号、目的端口号)的tcp数据包放在一个横向的链表里,该链表的头节点只保存了源ip地址、目的ip地址、源端口号、目的端口号这些信息。

重装TCP数据段的方法是:

1.每到来一个tcp数据包,我先将该数据包的源ip地址、目的ip地址、源端口号、目的端口号取出来在重装表中纵向的链表中查找有没有与它相匹配的链表存在,如果有,就把数据包放入与它有相同socket对的链中,放入链表的时,先查找的顺序号在链表中的适当位置,然后放入;如果没有,则在链表中新创建一个该类型的链表头节点,然后再将其放入新创建的链表中。

2.每当在表中放入一个tcp数据段后,就检查链表中的数据段是否已经到齐了,若到齐,就将个链表中所有数据段的数据部分拼接到一起,得到应用层报文,然后释放该链表,然后重复1-2步骤;若没到齐,直接重复1-2步骤。

交换DMA映射,而不是在输入/输出缓冲区之间拷贝数据,不在DMA情况拷贝内存,正确的做法是DMA重映射,交换指针,每线程负责一块网卡,输入和输出由不同的线程负责会更好,保持一个预分配可循环利用的缓冲区,映射DMA利用多队列网卡支持中断CPU亲和力利用或者模拟软多队列提高并行性。

解码模块:解码模块采用多线程模式,对数据包进行解码,从数据队列中取得数据进行解码,主要是对数据包头部信息进行分析并保存在包结构中。数据包头部信息除通讯双方基本信息外还包含持有PKI证书信息的节点卡、用户卡信息、防重放信息、防篡改信息,业务数据采用BASE91编码解码算法,对不合法数据转发到异常数据队列中,由异常处理线程模块进行处理;解码正确的数据包存放到业务检测队列中,由检测模块负责检测处理。

检测模块:检测线程模块是转发调度系统的核心模块,检测模块数据包是否包含非法访问,入侵行为,检测基于时间触发,当业务数据包到达检测队列时,开始记录触发时间,保存时间戳,检测模块采用并行监测方式对业务白名单进行遍历检测,白名单存储的是所有业务数据的特征码摘要信息,白名单信息采用TRIE数(字典数)存储,

在该trie树中,字符串in,inn和int的公共前缀是“in”,因此可以只存储一份“in”以节省空间。当然,如果系统中存在大量字符串且这些字符串基本没有公共前缀,则相应的trie树将非常消耗内存,这也是trie树的一个缺点。

Trie树的基本性质可以归纳为:(1)根节点不包含字符,除根节点意外每个节点只包含一个字符。(2)从根节点到某一个节点,路径上经过的字符连接起来,为该节点对应的字符串。(3)每个节点的所有子节点包含的字符串不相同。

判断线程模块:对检测后的数据包进行判定,并将判定结果告诉内核,方便内核对数据包进行接收、丢弃等处理。

响应模块:通过libnet对那些要执行Reject操作的数据包进行相应的回应。

所述接收队列模块,采用内存映射方式,直接操作操作系统内核空间,为IP分片代理提供网络数据包;

所述发送队列模块,接收所述系统中其它模块的发送数据内存申请请求,并将直接映射到内核空间。

上述方法中,各协议彼此独立为协议代理,各协议代理间接口遵循标准协议接口规范;协议代理直接启用过滤规则处理协议包,过滤规则可以动态修改;协议栈运行在用户态下,上下层协议代理间强制身份认证。

以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1