一种报文处理方法和装置与流程

文档序号:12739957阅读:163来源:国知局
一种报文处理方法和装置与流程

本申请涉及通信技术领域,尤其涉及一种报文处理方法和装置。



背景技术:

因特网协议安全(IP Security,IPsec)是IETF制定的三层隧道加密协议,它为Internet上传输的数据提供了高质量的、可互操作的、基于密码学的安全保证,是一种传统的实现三层虚拟专用网络(Virtual Private Network,VPN)的安全技术。

传统的IPsec VPN一般支持基于窗口的抗重放技术,即IPsec接收方可检测并拒绝接收过时或重复的报文,这类过时或重复的报文常被称为重放报文。IPsec通过滑动窗口(抗重放窗口)机制检测重放报文。如果收到的报文的序列号与已经解封装过的报文序列号相同,或收到的报文的序列号出现得较早,即已经超过了抗重放窗口的范围,则认为该报文为重放报文,直接将重放报文放弃。

但研究发现,传统IPsec VPN的抗重放技术只适用于IPsec VPN,不适用于组域虚拟专用网络(Group Domain VPN,GD VPN)的各组成员(Group Member,GM)之间。



技术实现要素:

有鉴于此,本申请提供一种报文处理方法和装置,能够让GD VPN的GM之间支持抗重放技术。

具体地,本申请是通过如下技术方案实现的:

本申请第一方面,提供了一种报文处理方法,所述方法应用于GD VPN中的本端GM,所述方法包括:

接收GD VPN中的对端GM发送的第一报文,所述第一报文中包括序列号;

查询与所述第一报文匹配的第一快转表项,所述第一快转表项中增加了用于指示抗重放窗口的区间和已接收序列号的新字段;

根据所述第一快转表项中的新字段确定出抗重放窗口的区间和已接收序列号,并结合所述抗重放窗口的区间、已接收序列号以及所述第一报文包括的序列号,对所述第一报文进行抗重放检测;

如果所述第一报文通过抗重放检测,则解封装所述第一报文,并在解封装成功后更新所述第一快转表项;

如果所述第一报文没有通过抗重放检测,则丢弃所述第一报文。

本申请第二方面,提供了一种报文处理装置,所述装置应用于GD VPN中的本端GM,所述装置包括:

接收单元,用于接收GD VPN中的对端GM发送的第一报文,所述第一报文中包括序列号;

查询单元,用于查询与所述第一报文匹配的第一快转表项,所述第一快转表项中增加了用于指示抗重放窗口的区间和已接收序列号的新字段;

抗重放检测单元,用于根据所述第一快转表项中的新字段确定出抗重放窗口的区间和已接收序列号,并结合所述抗重放窗口的区间、已接收序列号以及所述第一报文包括的序列号,对所述第一报文进行抗重放检测;

报文处理单元,用于在所述第一报文通过抗重放检测时解封装所述第一报文;在所述第一报文没有通过抗重放检测时丢弃所述第一报文;

表项处理单元,用于在所述第一报文解封装成功后更新所述第一快转表项。

本申请提供的技术方案通过在用于解封装的快转表项中引入用于指示抗重放窗口区间和已接收报文序列号的新字段,这样接收端即使无法识别报文来自于哪个GM,也可以根据与该报文唯一对应的快转表项确定接收端已从该报文对应的发送端接收的报文序列号和当前抗重放窗口的区间,同时结合报文携带的序列号,即可实现GD VPN中的报文抗重放功能。

附图说明

图1是GD VPN的组网结构示意图;

图2是本申请实施例提供的一种本端GM在发送报文时的报文处理方法流程图;

图3是本申请实施例提供的一种发送报文时使用的快转表项的示意图;

图4A是本申请实施例提供的传输模式和隧道模式下的ESP协议加封装过程示意图;

图4B是本申请实施例提供的传输模式和隧道模式下的AH协议加封装过程示意图;

图4C是本申请实施例提供的传输模式和隧道模式下的AH-ESP协议加封装过程示意图;

图5是本申请实施例提供的一种本端GM在接收报文时的报文处理方法流程图;

图6A是本申请实施例提供的一种接收报文时使用的快转表项的示意图;

图6B是本申请实施例提供的一种接收报文时使用的快转表项的示意图;

图7是本申请实施例提供的一种抗重放检测的处理示意图;

图8是本申请实施例提供的一种GD VPN中的报文处理的组网示意图;

图9是本申请实施例提供的一种报文处理装置的功能模块框图;

图10是本申请实施例提供的一种报文处理装置的硬件架构图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。

在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

以下,首先对GD VPN进行简单介绍。

GD VPN提供了一种基于组的IPsec安全模型。组是一个安全策略及密钥的集合,属于同一个组的所有成员共享相同的安全策略及密钥,安全策略及密钥可统称为IPsec安全联盟(Security Association,SA),IPsec SA限定了保护的数据流信息、加密算法、认证算法、封装模式等。

GD VPN的组网结构参见图1所示,由密钥服务器(Key Server,KS)和组成员(Group Member,GM)组成,其中,KS通过划分不同的组来管理不同的IPsec SA,GM通过向KS注册加入相应的组,从KS获取IPsec SA,并使用获取到的IPsec SA对数据流加密和解密。

目前的GD VPN尚不能支持抗重放技术,而传统IPsec VPN虽然支持抗重放技术,但传统IPsec VPN中的抗重放技术却无法照搬到GD VPN中使用,主要原因如下:

传统IPsec VPN是一种点对点的VPN,因此报文只可能从一个固定的对端发过来,接收端可以直接通过比较报文的序列号是否在抗重放窗口的范围内,实现抗重放检测。而GD VPN是一种点到多点的VPN,在GD VPN中,报文经过一个GM加密之后,会保留原始报文的IP头,即加密后外层IP头和原始报文的IP头一样,报文到达另一个GM解封装时,另一个GM无法区分该报文是从哪个特定GM发送过来的。比如,GM1和GM2都向GM3发送报文,如果GM1先向GM3发送了一个序列号为n的报文后,GM2又向GM3发送了一个序列号为n的报文,则由于GM3无法识别报文来自于哪个GM,按照IPsec VPN中的抗重放方法GM3将认为GM2在后发送的序列号为n的报文为重放报文,从而将该报文丢弃。但实质上GM1和GM2发送的这两个报文都有可能是合法报文,GM3将序列号相同的后到报文认为是重放报文这显然是不恰当的。

所以目前解封装时GM都会忽略对报文做抗重放检测。这样,当攻击者抓到某个加封装之后的报文,并大量将其转发至特定GM,会导致该特定GM不停地对此报文进行解封装,这样就会消耗设备大量的资源,甚至导致设备拒绝服务。

为在GD VPN中的GM上实现抗重放功能,本申请提供了一种解决方案,通过在快转表项中引入用于指示抗重放窗口区间和已接收报文序列号的新字段,这样接收端即使无法识别报文来自于哪个GM,也可以根据与该报文唯一对应的快转表项查找到接收端已从该报文对应的发送端接收的报文序列号和当前抗重放窗口的区间,同时结合报文携带的序列号,即可实现GD VPN中的报文抗重放功能。

本申请具体实现时,可以在KS上新增抗重放配置,该抗重放配置可以包括抗重放开关和抗重放窗口大小,其中抗重放开关用于指示GM开启或关闭抗重放功能。该抗重放配置可以通过KS下发给同一个组里的所有GM,从而在该同一个组里的所有GM上统一开启或统一关闭抗重放功能,这样可以简化GD VPN组网的整体配置。

下面结合附图,依次说明在GM根据KS下发的抗重放开关开启本申请提供的抗重放功能时,如何实现报文的抗重放处理。

参见图2,图2为本端GM在发送报文时的报文处理方法流程图,可包括以下步骤:

步骤201:本端GM在加封装待发送给对端GM的报文之前,查询与该报文匹配的快转表项,该快转表项中增加了与本端GM已发送的报文条数有关的新字段,该新字段为最大已发送序列号。

步骤201中所说的本端GM待发送给对端GM的报文,可以是本端GM自身生成的报文,也可以是主机、其它GM等网元设备发送到本端GM进行中转的报文。

这里的快转表项是基于报文五元组及入接口等信息生成的表项,可以指导报文的转发,即在快转表项中可以找到报文的出接口、下一跳等信息。同时在快转表项中还可以找到与报文处理相关的业务信息,如用于加封装或用于解封装的IPsec SA等。GM可以基于一条数据流的首个报文创建快转表项,后续属于同一条数据流的报文可以直接查找相应的快转表项进行快速转发。其中,同一条数据流一般指特征比较相似的一组数据包,如可以将五元组(包括源地址、目的地址、源端口号、目的端口号、协议号)完全相同的一组数据包称为一条流。快转表项通过将流特征和这条流需要做的处理关联起来,提高了转发的处理效率。

步骤202:如果没有查询到匹配的快转表项,则本端GM新建与该报文对应的快转表项,新建的快转表项中增加最大已发送序列号,最大已发送序列号的初始值为0;本端GM将新建的快转表项中记录的最大已发送序列号按预设步长增量累加,并将累加后的最大已发送序列号作为该报文的序列号添加到该报文的报文头中,之后加封装该报文。

当本端GM未查询到与待发送的报文匹配的快转表项时,表明该报文可能是一条流的首个报文,或者可能是本端GM在旧IPsec SA老化后使用新IPsec SA保护的一条流的后续报文中的首个报文,因此本端GM通过慢转流程加封装该报文,具体过程为:将待发送的报文与KS(密钥服务器)提前下发的访问控制列表(Access Control List,ACL)进行匹配,如果匹配结果为许可(permit),表明这个报文所属的流需要被加密保护;继而使用该报文的报文信息(如五元组)查找对应的IPsec SA,根据查找到的IPsec SA对报文加封装。

本端GM在慢转流程中找到IPsec SA之后,可以新建与该报文对应的快转表项。本申请实施例提供的快转表项除了包含现有快转表项所包含的五元组、转发信息和业务信息等字段之外,还新增了“最大已发送序列号”这一字段,本申请实施例提供的快转表项的具体形式可参见图3所示。其中“最大已发送序列号”这一字段与本端GM已向目的GM发送的报文条数有关,GM可以按照预设步长对最大已发送序列号进行增量累加,一种较为简单的累加方式是以每次递增1的方式更新最大已发送序列号的值。

属于同一条流、用同一个IPsec SA加封装的报文应该携带互不相同的序列号,报文接收端正是基于报文携带的序列号对报文进行抗重放检测,至于报文接收端如何对报文进行抗重放检测将在下文描述,暂不赘述。

步骤203:如果查询到匹配的快转表项,则本端GM将查询到的快转表项中记录的最大已发送序列号按预设步长累加,并将累加后的最大已发送序列号作为该报文的序列号添加到该报文的报文头中,之后加封装该报文。

当本端GM能够查询到与待发送的报文匹配的快转表项时,表明该报文可能是同一个IPsec SA保护的一条流的后续报文,因此本端GM可以通过快转流程加封装该报文,即直接根据查询到的快转表项中记录的IPsec SA对报文加封装。

步骤202和步骤203中本端GM在加封装报文时,可以使用标准的封装安全载荷(Encapsulating Security Payload,ESP)协议,或是标准的认证头(Authentication Header,AH)协议,或是结合以上两种协议。具体使用何种协议由KS下发的IPsec SA规定。

参见图4A,为传输模式和隧道模式下的ESP协议加封装过程示意图,其中,当报文进行安全传输的起点和终点为报文的实际起点和终点时一般使用传输模式,当报文进行安全传输的起点或终点不为数据的实际起点和终点时一般使用隧道模式。图4A中,GM可以将基于快转表项获得的序列号添加到报文的ESP头的序列号(Sequence Number)字段中。

参见图4B,为传输模式和隧道模式下的AH协议加封装过程示意图,GM可以将基于快转表项获得的序列号添加到报文的AH头的Sequence Number字段中。

参见图4C,为传输模式和隧道模式下结合AH协议和ESP协议的加封装过程示意图,GM可以将基于快转表项获得的序列号添加到报文的AH头的Sequence Number字段中。

需要注意的是,ESP头和AH头包含的安全索引参数(Security Parameter Index,SPI)和Sequance Number两个字段均为明文。

基于IPsec SA中规定的封装协议,本端GM先在原始报文的基础上扩展出一个ESP头或AH头,再在ESP头或AH头中填入基于快转表项获得的序列号,然后对报文加封装。对端GM在解封装报文时需要带上报文包括的序列号进行数据完整性校验,如果攻击方截获了报文并改写了报文的序列号,该报文将解封装失败。

步骤202和步骤203后,本端GM根据加封装后的报文重新查找匹配的快转表项,并根据重新找到的快转表项将加封装后的报文发送给对端GM。

至此,完成对图2所示流程的描述。

通过图2所示流程可以看出,本端GM在发送报文时基于本申请实施例提供的快转表项,可以在找到转发信息和转发过程中的业务信息的同时,根据快转表项中记录的最大已发送序列号在报文的报文头添加对应的序列号,报文不需要通过额外的字段来区分该报文的来源。

下面介绍本端GM在接收报文时的报文处理方法,参见图5所示,该方法可包括以下步骤:

步骤501:本端GM接收GD VPN中的对端GM发送的报文,该报文中包括序列号。

对端GM可以按照图2所示的流程处理报文并将加封装后的报文发送给本端GM。

本端GM接收到的报文可以是标准ESP协议报文,也可以是标准AH协议报文。该报文的序列号承载在该报文的ESP报文头或AH报文头的Sequence Number字段中。

步骤502:本端GM查询与接收的报文匹配的快转表项,该快转表项中增加了用于指示抗重放窗口的区间和已接收序列号的新字段。

步骤503:如果没有查询到匹配的快转表项,则本端GM新建与接收的报文对应的快转表项,新建的快转表项中增加用于指示抗重放窗口的区间和已接收序列号的新字段;之后,本端GM解封装该报文,并在解封装成功后根据该报文包括的序列号更新新建的快转表项。

当本端GM未查询到与接收到的报文匹配的快转表项时,表明该报文可能是一条流的首个报文,或者可能是本端GM在旧IPsec SA老化后使用新IPsec SA保护的一条流的后续报文中的首个报文,因此本端GM默认该报文不是重放报文,并通过慢转流程解封装该报文,具体过程为:将接收到的报文与KS提前下发的ACL进行匹配,如果匹配结果为permit表明该报文需要通过IPsec SA解封装,继而根据该报文的报文头中携带的SPI查找对应的IPsec SA,根据查找到的IPsec SA对报文解封装。

本端GM在慢转流程中找到IPsec SA之后,可以新建与接收到的报文对应的快转表项。本申请实施例提供的快转表项除了包含现有快转表项所包含的五元组、转发信息和业务信息等字段之外,还增加了用于抗重放检测的新的字段,其中,该新的字段可以有多种形式,本申请实施例主要列举以下两种:

第一种:该新的字段可以是“抗重放窗口的左端点和右端点”、以及“已接收序列号”,快转表项的具体形式参见图6A所示;其中,“抗重放窗口的左端点和右端点”这一字段用于指示抗重放窗口的区间,“已接收序列号”这一字段用于表示本端GM已从源GM接收的报文序列号。在新建的快转表项中,抗重放窗口的左端点的初始值为0,右端点的初始值为抗重放窗口的大小N,已接收序列号的初始值为空。

第二种:该新的字段可以是“最大已接收序列号”、以及“已接收序列号”,快转表项的具体形式参见图6B所示;其中,“已接收序列号”字段如前文所述,用于表示本端GM已从源GM接收的报文序列号,“最大已接收序列号”这一字段用于表示本端GM已从源GM接收的各报文序列号中的最大值,可用于计算抗重放窗口的区间。在新建的快转表项中,最大已接收序列号的初始值为抗重放窗口的大小N,已接收序列号的初始值为空。

步骤504:如果查询到匹配的快转表项,则本端GM根据查询到的快转表项中的新字段确定出抗重放窗口的区间和已接收序列号;并结合确定出的抗重放窗口的区间、已接收序列号以及接收的报文包括的序列号,对该报文进行抗重放检测;如果该报文通过抗重放检测,则解封装该报文,并在解封装成功后更新查询到的快转表项;如果该报文没有通过抗重放检测,则丢弃该报文。

当本端GM能够查询到匹配的快转表项时,表明接收到的报文可能是同一个IPsec SA保护的一条流的后续报文,因此本端GM首先对该报文进行抗重放检测,如果该报文通过抗重放检测,再通过快转流程,即直接根据查询到的快转表项中记录的IPsec SA对报文解封装。如果该报文未通过抗重放检测,则可以将该报文视为重放报文丢弃。

可选的,抗重放检测的具体过程可以是:

1)根据查询到的快转表项确定当前抗重放窗口的区间和本端GM已接收的报文序列号。

具体地,根据图6A和图6B示出的两种形式的快转表项,在确定抗重放窗口的区间时可以有以下两种方式:

方式一:对应图6A所示的快转表项,本端GM可以根据快转表项中记录的抗重放窗口的左端点L和右端点R,直接确定出抗重放窗口的区间为[L,R]。

方式二:对应图6B所示的快转表项,本端GM可以根据快转表项中记录的最大已接收序列号M计算抗重放窗口的区间,如果快转表项中记录的最大已接收序列号M小于等于抗重放窗口的大小N,则确定抗重放窗口的区间为[1,N];如果快转表项中记录的最大已接收序列号M大于抗重放窗口的大小N,则确定抗重放窗口的区间为[M-N+1,M]。

至于本端GM已接收的报文序列号,则可以根据快转表项中记录的“已接收序列号”字段的内容直接确定。

2)判断接收的报文的序列号相对于抗重放窗口的区间的位置,根据判断出的位置确定该报文是否通过抗重放检测。

具体地,如果接收的报文的序列号在抗重放窗口的区间的左侧,则可以直接确定该报文没有通过抗重放检测。

如果该报文的序列号在抗重放窗口的区间的右侧,则可以直接确定该报文通过抗重放检测。

如果接收的报文的序列号在抗重放窗口的区间内,则还需要进一步判断该报文的序列号是否与本端GM已接收的报文序列号重复;如果不重复,则确定该报文通过抗重放检测;如果重复,则确定该报文没有通过抗重放检测。

较佳地,“已接收序列号”字段可以采用数组的方式保存本端GM在当前抗重放窗口内接收的报文序列号的情况,比如抗重放窗口的大小为128时,“已接收序列号”字段可以是大小为128元素的数组,数组下标为0到127,下标为0的数组元素对应当前抗重放窗口的左端点,下标为127的数组元素对应当前抗重放窗口的右端点。一种判断报文的序列号是否重复的方式是:计算报文的序列号和数组中第一个元素(即当前抗重放窗口的左端点)的差值绝对值,以该差值绝对值作为数组下标,根据该数组下标查找到数组中的对应位置,里面记录了是否收到过此序列号的报文。

本端GM在确定接收到的报文通过抗重放检测后,对报文解封装。如果解封装失败,则丢弃该报文,并且无需更新快转表项中记录的抗重放窗口的区间和已接收序列号。其中,解封装失败可能是因旧IPsec SA老化导致报文接收端找不到对应的IPsec SA来解封装报文;也可能是因为报文在传输过程中被改写导致数据完整性校验失败。对于后一种情况,由于本申请中在报文发送端采用了先在报文中添加用于抗重放检测的序列号,后对报文加封装的方式;所以报文接收端在解封装报文时还要带上报文的序列号进行数据完整性校验。这样,即使攻击方改写了报文的序列号使得该报文通过了抗重放检测,但由于报文的序列号被篡改无法成功解封装,从而报文接收端无需根据该报文的序列号更新本地的抗重放窗口的区间和已接收序列号,避免了对设备的抗重放功能的影响。

如果本端GM对接收的报文成功解封装,则还需要更新快转表项。根据图6A和图6B示出的两种形式的快转表项,可以有以下两种更新方式:

方式一:对应图6A所示的快转表项,如果接收的报文的序列号X在抗重放窗口的区间内,则本端GM在更新快转表项时只需在快转表项记录的已接收序列号中标记收到过序列号X,不需要更新快转表项中记录的抗重放窗口的左端点和右端点。如果接收的报文的序列号X在抗重放窗口的区间的右侧,则本端GM可以将快转表项中记录的抗重放窗口右移,使抗重放窗口的左端点L更新为报文的序列号X-N+1,右端点更新为X,以及将在快转表项记录的已接收序列号中标记收到过序列号X;这里的N表示抗重放窗口的大小。如果接收的报文的序列号X在抗重放窗口的左侧,则该报文不会通过抗重放检测,本端GM自然不需要更新快转表项。

方式二:对应图6B所示的快转表项,如果接收的报文的序列号X在抗重放窗口的区间内,则本端GM在更新转发表项时只需在快转表项记录的已接收序列号中标记收到过序列号X,不需要更新快转表项中记录的最大已接收序列号。如果接收的报文的序列号X在抗重放窗口的区间的右侧,则本端GM可以将快转表项中记录的最大已接收序列号M更新为该报文的序列号X,以及在快转表项记录的已接收序列号中标记收到过序列号X。同样,对于接收的报文的序列号X在抗重放窗口的左侧的情况,由于报文不会通过抗重放检测,因此本端GM无需更新更新快转表项。

一种基于抗重放窗口的区间和已接收序列号进行抗重放检测的处理示意图参见图7,如图7中的(1)所示,抗重放窗口的大小为64,一开始还未有任何序列号被标记。当GM一开始收到一个序列号为1的报文时,如果解封装成功,GM会标记已经收到过序列号为1的报文,即如图7中的(2)所示,阴影表示GM已处理过此报文。之后,当GM又收到一个序列号为60的报文时,该报文的序列号在抗重放窗口内且未被标记过,GM会解封装该报文,并在解封装成功后标记已经收到过序列号为60的报文,如图7中的(3)所示。如果此时GM又收到序列号为60的报文,由于60已被标记过,则GM在解封装前会认为该报文是重放报文,直接丢弃该报文,如图7中的(4)所示。之后,当GM收到序列号为100的报文时,由于该报文在窗口右侧,则GM解封装该报文,并在解封装成功后将抗重放窗口整体右移,使抗重放窗口的右端点为该报文的序列号100,如图7中的(5)所示。之后,如果GM收到序列号小于37(如36)的报文,则该报文会被认为是重放报文而被丢弃,如图7中的(6)所示。

步骤503和步骤504后,本端GM可以根据解封装后的报文重新查找匹配的快转表项,并根据重新找到的快转表项转发解封装后的报文。

至此,完成对图5所示流程的描述。

通过图5所示流程可以看出,本申请实施例通过在用于解封装的快转表项中引入用于指示抗重放窗口区间和已接收报文序列号的新字段,这样接收端即使无法识别报文来自于哪个GM,也可以根据与该报文唯一对应的快转表项确定接收端已从该报文对应的发送端接收的报文序列号和当前抗重放窗口的区间,同时结合报文携带的序列号,即可实现GD VPN中的报文抗重放功能。并且本申请中报文采用标准ESP协议或标准AH协议封装,不需要携带额外信息,如不需要在报文中引入GM标识来指示发送该报文的GM,兼容性较好。

随着本端GM处理的数据流的增多,本端GM中保存的快转表项会越来越多,为了节省设备的存储资源,可以对本申请提供的快转表项进行老化,具体的老化策略可以有以下几种,本端GM可以采用其中一种或结合多种方式来老化快转表项:

第一种:依据在发送报文时使用的用于加封装报文的快转表项。当如图3所示的快转表项中记录的最大已发送序列号达到设定阈值(比如序列号的理论最大值的90%)时,本端GM可以通知GD VPN中的KS下发新的IPsec SA,KS收到通知后将给该GM以及与该GM属于同一组的其它GM下发新的IPsec SA。当本端GM以及其它GM接收到KS下发的新的IPsec SA时,启动老化定时器,在老化定时器超期后删除旧的IPsec SA,以及删除与该旧的IPsec SA相关的快转表项,包括发送报文时使用的用于加封装报文的快转表项以及接收报文时使用的用于解封装报文的快转表项。

第二种:依据在接收报文时使用的用于解封装报文的快转表项。当如图6A所示的快转表项中记录的抗重放窗口的右端点达到设定阈值时,或是当如图6B所示的快转表项中记录的最大已接收序列号达到设定阈值时,本端GM可以通知GD VPN中的KS下发新的IPsec SA,KS收到通知后将给该GM以及与该GM属于同一组的其它GM下发新的IPsec SA。当本端GM以及其它GM接收到KS下发的新的IPsec SA时,启动老化定时器,在老化定时器超期后删除旧的IPsec SA,以及删除与该旧的IPsec SA相关的快转表项,包括发送报文时使用的用于加封装报文的快转表项以及接收报文时使用的用于解封装报文的快转表项。

第三种:依据IPsec SA的生命周期。IPsec SA具有一个软生命周期(比如20分钟),一个硬生命周期(比如30分钟),其中,硬生命周期是IPSec SA的真正生命周期,即只有硬生命周期结束后,IPSec SA才会被删除。而软生命周期短于硬生命周期,软生命周期结束后,IPsec SA不会被删除,本端GM将通知GD VPN中的KS下发新的IPsec SA给所有GM。本端GM收到KS下发的新的IPsec SA后,等待旧的IPsec SA的硬生命周期到期后,删除旧的IPsec SA,以及删除与该旧的IPsec SA相关的快转表项。在旧的IPsec SA删除之后,本端GM才使用新的IPsec SA加封装报文和创建新的快转表项。

实际应用中,如果组网使用32位的序列号,则序列号的理论最大值为2^32=4294967296,报文携带的序列号一旦超过这个理论最大值,将影响GM的抗重放功能的准确性。为了避免序列号溢出,在组网使用32位序列号的场景下,实现本申请提供的报文处理方法时优先使用前两种老化策略,即在序列号达到理论最大值之前,提前对序列号进行翻转。而在支持扩展序列号(Extended Sequence Number,ESN)的组网中,序列号为64位,其理论最大值为2^64=1.844674407371*1019,这个数量的序列号一般是足够用的,所以在实现时可以不必考虑序号溢出的问题,可以优先使用第三种老化策略。

由上述三种老化策略可以看到,本申请提供的用于加封装报文和用于解封装报文的快转表项随着IPsec SA的老化而老化,如果IPsec SA没有老化,说明后续可能还会有流继续使用此IPsec SA,从而还会使用到与该IPsec SA相关的快转表项,因此本申请可以设置不允许手工删除用于加封装报文和用于解封装报文的快转表项。例如,当GM在运行过程中检测到通过命令行输入的指示删除某个快转表项的命令时,该GM可以为该命令指定的快转表项设置一个隐藏标记,使该快转表项对外不可见,如果后续有报文匹配上该快转表项时,再激活该快转表项使其对外可见,这样就可以沿用原有快转表项中记录的序列号继续处理报文了。

下面通过一个具体示例,说明本申请如何实现GD VPN中的报文处理。

参见图8,某企业的三个分支机构分别连着GM1、GM2和GM3。所有GM都向KS进行注册,KS下发了相同的IPsec SA给所有GM。三台GM使用相同的IPsec SA对GM之间的流进行加、解封装。KS给所有GM均下发了开启抗重放功能的开关及大小为64的抗重放窗口。假设加封装前的报文是UDP(User Datagram Protocol,用户数据报协议)报文,加封装后的报文是ESP报文,源端口号为1234,目的端口号为5678,IPsec SA对应的SPI为65535。

由于GD VPN采用IP头保留技术,所以加封装后报文的源IP和目的IP没变,但由于加封装后报文为ESP报文,协议号发生了变化,所以GM在加封装前和加封装后都会建立快转表项。

图8中,GM1到GM2有两条流:100.1.1.1—>100.1.3.1和100.1.1.2—>100.1.3.1;其加封装前后,GM1上建立的快转表项可以如下表1所示。其中,对于GD VPN而言,这里的源端口和目的端口是抽象出来的概念,源端口和目的端口可以是SPI中的高、低2个字节。

表1

以100.1.1.1—>100.1.3.1这条流为例,当属于这条流的某个报文进入GM1后,会匹配上表1中的第一个表项,GM1基于该第一个表项中记录的IPsec SA(未在表1中示出)加封装该报文,并根据第一个表项中记录的最大已发送序列号的值100,将该报文的序列号设置为101,以及将第一个表项中记录的最大已发送序列号的值由100更新为101。加封装后的报文会匹配上表1中的第二个表项,GM1根据第二个表项记录的转发信息将加封装后的报文从出接口Eth1/1发出。

GM3到GM2有一条流:100.1.2.1—>100.1.3.1;其加封装前后,GM3上可以建立如表2所示的快转表项。

表2

相应的,GM2上对GM1和GM3发送的流进行解封装前后,可以建立如表3所示的快转表项。

表3

以100.1.1.1—>100.1.3.1这条流为例,当属于这条流的报文进入GM2后,会匹配上表3中的第一个表项。GM2根据第一个表项中记录的最大已接收序列号的值100,结合KS下发的抗重放窗口64,可以计算出当前抗重放窗口的区间为[37,100],同时结合快转表项中记录的已接收序列号,可以判断出是否解封装过该报文。假设报文中携带的序列号为101,则GM2根据上述信息可以确定该报文通过抗重放检测,从而解封装该报文,同时在第一个表项的已接收序列号字段中标记收到过序列号101。解封装后的报文会匹配上表3中的第二个表项,GM2根据第二个表项记录的转发信息将解封装后的报文从出接口Eth1/0发出。

需要注意的是,由于GM2需要在解封装前判断出报文是否为重放报文,因此“最大已接收序列号”和“已接收序列号”这两个字段只能记录在解封装前建立的快转表项中。另外,为灵活起见,GM2也可以将KS下发的抗重放窗口的大小也记录在快转表项中。

当GM1、GM2和GM3接收到KS下发的新的IPsec SA时,各GM将会老化本设备上包含了本申请提出的新字段的快转表项,即GM1会老化表1中的第一个和第三个表项,GM2会删除表2中的第一个表项,GM3会删除表3中的第一个、第三个和第五个表项。

以上对本申请提供的方法进行了描述。下面对本申请提供的装置进行描述。

参见图9,为本申请实施例提供的一种报文处理装置的功能模块框图,该装置可以应用于GD VPN中的本端GM,所述装置包括:

接收单元901,用于接收GD VPN中的对端GM发送的第一报文,所述第一报文中包括序列号。

查询单元902,用于查询与所述第一报文匹配的第一快转表项,所述第一快转表项中增加了用于指示抗重放窗口的区间和已接收序列号的新字段。

抗重放检测单元903,用于根据所述第一快转表项中的新字段确定出抗重放窗口的区间和已接收序列号,并结合所述抗重放窗口的区间、已接收序列号以及所述第一报文包括的序列号,对所述第一报文进行抗重放检测。

报文处理单元904,用于在所述第一报文通过抗重放检测时解封装所述第一报文;在所述第一报文没有通过抗重放检测时丢弃所述第一报文。

表项处理单元905,用于在所述第一报文解封装成功后更新所述第一快转表项。

可选的,所述新字段可以为抗重放窗口的左端点L和右端点R,以及已接收序列号;从而在根据所述第一快转表项确定抗重放窗口的区间时,所述抗重放检测单元903具体用于:根据所述第一快转表项中记录的抗重放窗口的左端点L和右端点R,确定抗重放窗口的区间为[L,R]。

可选的,所述新字段可以为最大已接收序列号M,以及已接收序列号;从而在根据所述第一快转表项确定抗重放窗口的区间时,所述抗重放检测单元903具体用于:如果所述第一快转表项中记录的最大已接收序列号M小于等于抗重放窗口的大小N,则确定抗重放窗口的区间为[1,N];如果所述第一快转表项中记录的最大已接收序列号M大于抗重放窗口的大小N,则确定抗重放窗口的区间为[M-N+1,M]。

可选的,在对所述第一报文进行抗重放检测时,所述抗重放检测单元903具体用于:判断所述第一报文的序列号相对于所述抗重放窗口的区间的位置;如果所述第一报文的序列号在所述抗重放窗口的区间内,则进一步判断所述第一报文的序列号是否与所述已接收序列号重复;如果不重复,则确定所述第一报文通过抗重放检测;如果重复,则确定所述第一报文没有通过抗重放检测;如果所述第一报文的序列号在所述抗重放窗口的区间的左侧,则确定所述第一报文没有通过抗重放检测;如果所述第一报文的序列号在所述抗重放窗口的区间的右侧,则确定所述第一报文通过抗重放检测。

可选的,当所述新字段为抗重放窗口的左端点L和右端点R,以及已接收序列号时;在更新所述第一快转表项时,所述表项处理单元905具体用于:如果所述第一报文的序列号X在所述抗重放窗口的区间内,则在所述第一快转表项中标记收到过序列号X;如果所述第一报文的序列号X在所述抗重放窗口的区间的右侧,则将所述第一快转表项中记录的抗重放窗口右移,使抗重放窗口的左端点L更新为X-N+1、右端点更新为X,以及在所述第一快转表项中标记收到过序列号X;其中,N表示抗重放窗口的大小。

可选的,当所述新字段为最大已接收序列号M,以及已接收序列号时;在更新所述第一快转表项时,所述表项处理单元905具体用于:如果所述第一报文的序列号X在所述抗重放窗口的区间内,则在所述第一快转表项记录的已接收序列号中标记收到过序列号X;如果所述第一报文的序列号X在所述抗重放窗口的区间的右侧,则将所述第一快转表项中记录的最大已接收序列号M更新为所述第一报文的序列号X,以及在所述第一快转表项记录的已接收序列号中标记收到过序列号X。

可选的,所述表项处理单元905,还可以用于在所述查询单元902没有查询到所述第一快转表项时,新建与所述第一报文对应的快转表项;新建的快转表项中增加抗重放窗口的左端点和右端点、已接收序列号;或,新建的快转表项中增加最大已接收序列号、已接收序列号;其中,抗重放窗口的左端点的初始值为0,右端点的初始值为抗重放窗口的大小N;最大已接收序列号的初始值为抗重放窗口的大小N;已接收序列号的初始值为空。

相应的,所述报文处理单元904,还用于在所述表项处理单元905新建与所述第一报文对应的快转表项之后,解封装所述第一报文。

相应的,所述表项处理单元905,还用于在所述第一报文解封装成功后根据所述第一报文包括的序列号更新所述新建的快转表项。

可选的,所述查询单元902,还可以用于在本端GM加封装待发送给对端GM的第二报文之前,查询与所述第二报文匹配的第二快转表项,所述第二快转表项中增加了与本端GM已发送的报文条数有关的新字段,该新字段为最大已发送序列号。

相应的,所述表项处理单元905,还可以用于在所述查询单元902查询到所述第二快转表项时,将所述第二快转表项中记录的最大已发送序列号按预设步长增量累加;在所述查询单元902没有查询到所述第二快转表项时,新建与所述第二报文对应的快转表项,新建的快转表项中增加最大已发送序列号,最大已发送序列号的初始值为0,将新建的快转表项中记录的最大已发送序列号按预设步长增量累加。

相应的,所述报文处理单元904,还可以用于将累加后的最大已发送序列号作为所述第二报文的序列号添加到所述第二报文的报文头中,之后加封装所述第二报文。

可选的,当解封装前的所述第一报文为标准ESP协议报文时,所述第一报文的序列号可以承载在所述第一报文的ESP头的Sequence Number字段中;当解封装前的所述第一报文为标准AH协议报文时,所述第一报文的序列号可以承载在所述第一报文的AH头的Sequence Number字段中。

可选的,所述接收单元901,还可以用于在接收对端GM发送的第一报文之前,接收KS下发的抗重放开关和抗重放窗口的大小。

相应的,所述抗重放检测单元903,还可以用于根据所述抗重放开关的指示开启抗重放功能。

可选的,所述装置还包括:

发送单元,用于当所述第二快转表项中记录的最大已发送序列号达到设定阈值,或者,当所述第一快转表项中记录的最大已接收序列号或抗重放窗口的右端点达到设定阈值时,通知GD VPN中的KS下发新的IP安全IPsec安全联盟SA。

老化单元,用于当所述接收单元901接收到KS下发的新的IPsec SA时,老化所述第一快转表项和所述第二快转表项。

需要说明的是,本发明实施例中对单元的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。在本申请的实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

如图10所示,本申请实施例还提供一种报文处理装置,所述装置包括通信接口1001、处理器1002、存储器1003和总线1004;其中,通信接口1001、处理器1002、存储器1003通过总线1004完成相互间的通信。

其中,通信接口1001,用于与GD VPN中的其它GM和KS通信。处理器1002可以是一个CPU,存储器1003可以是非易失性存储器(non-volatile memory),并且存储器1003中存储有报文处理逻辑指令,处理器1002可以执行存储器1003中存储的报文处理逻辑指令,以实现图2和图5所示的报文处理方法,具体可参见图2和图5所示的流程。

以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。

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