一种改进的UDP封装法在网络安全协议与地址冲突中的应用

时间:2022-04-09 06:45:22

一种改进的UDP封装法在网络安全协议与地址冲突中的应用

摘要:该方案是将主机自身的IP地址一同进行封装,从NAT网关内部发往NAT网关外部的数据包,在经过UDP解封装后,其源地址更改为原始IP地址,因此目标主机的IP层以上各层会认为通讯对方的IP地址为内部主机原始IP地址,它发送的数据包也将以该原始IP地址为目的地址。利用改进后的UDP封装方案,实现了IPSec报文对NAT设备的透明穿越。

关键词:网络地址;封装;透明穿越

中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)35-2403-01

An Improved UDP Encapsulation Method Used in the Conflict between IPSecurity and Network Address Translation

SUN Guang-hui1, WANG Li-juan2

(Hunan University of Arts and Science, Changde 415000, China)

Abstract: If the improved encapsulation method is used, the packet's source address will be changed from a illegal address to an legal address when it is sent out from the host behind the NAT device, and changed back from a legal address to an illegal original address after be striped of the UDP head at the host outside. So the upper protocol layers above the network layer of the host outside will think that they are communicating with a host with that illegal address and the packet it send out will have the destination to that illegal address. By the amelioration, the data can t raverse the NAT Gateway transpar-ently.

Key words: network address; encapsulation; traverse transparently

1 引言

网络安全协议IPSec是目前适用于所有Internet通信的新一代安全技术标准,它可以“无缝”地为IP引入安全特性,并为数据提供身份认证,完整性检验,抗重播攻击以及加密等机制。网络地址转换NAT和IPSec一直都有矛盾,NAT进行地址映射的时候,要对IP包进行修改,然而对于IPSec报文,这些信息无法修改,所以普通的IPSec报文无法穿越NAT设备,这是一个急需解决的问题,也是目前研究的一个难点。

目前几种解决IPSec与NAT不兼容问题的思路中,UDP封装法是比较好的一种方案,我们需要一个不用对NAT设备位置进行控制的“主动”的解决方法,用UDP协议封装IPSec数据包可以满足这个要求。

2 因特网工程任务组的UDP封装法草案

UDP封装方法是一种比较新的建议,由F-Secure、Microsoft、Cisco、Nortel和SSH Communications联合推出。

2.1 因特网工程任务组UDP封装格式

UDP封装的核心思想是把IPSec信包装入一个UDP/IP分组,然后让NAT去修改附加的UDP/IP分组。在IETF的一个草案中,提出了一种封装的方法,并给出了数据包的封装格式,如图1所示。其中前8个字节为标准的UDP包头,源端口与目的端口采用与IKE相同的值,校验和为0。非IKE标志为全0的8个字节,以与发起者的IKE的cookie保持对齐。

2.2 因特网工程任务组UDP封装法中存在的问题

经过分析,IETF UDP封装法方案在解决兼容性方面仍然存在着几个问题:

1) 在IPSec中,进入的安全关联SA由三个参数确定,即地址、协议、安全参数索引SPI。若采用NAPT,在外部主机上面会有多个地址相同,SPI不同的SA。在处理进入数据包的时候,可以用SPI值的不同来定位SA,而在处理外出数据包的时候,就不可能从多个有相同地址的外出SA中选择出正确的SA了。

2) 若NAT网关为NAPT,发往内部各主机数据包的UDP封装的目的端口号都为500,这样一来,NAPT就无法分解各个数据包究竟应该发送到内部的哪一台主机。

3) 从外部主机向NAT网关内的主机发送数据时,需要用该主机的私网IP地址为目的地址来定位SA,因此对于进入外部主机的数据包必须将其源地址恢复成私网的IP地址后传递给上层协议。如果不对进入数据包的源地址进行处理,会导致在发送相应数据包时无法正确定位相应的SA。

对于以上缺陷,现在已经有一些解决方案,比如设计NAT-T模块以及NAT模块,利用NAT-T模块进行UDP封装和解封装,利用NAT模块进行私网公网地址的转换。

3 改进的UDP封装方法

改进的UDP封装方法是针对原有UDP封装方法的缺陷而设计的,它能够克服原有方案的缺点,更好的解决IPSec与NAT的冲突问题。

3.1 改进UDP封装方法的封装格式

为了正确定位安全关联,改进的UDP封装方案将主机自身的IP地址一同进行封装。从NAT网关内部发往NAT网关外部的数据包,在经过UDP解封装后,其源地址更改为原始IP地址,因此目标主机的IP层以上的各层会认为通讯对方的IP地址为内部主机的原始IP地址,它发送的数据包也将以该原始IP地址为目的地址。然而此原始IP地址为一个非法的IP地址,要想正确发送这个数据包,必须在IPSec处理完成后进行UDP封装,将其目的地址更改为与此原始IP对应的合法IP地址,并将UDP包头中的目的端口号设置为与此原始IP地址相对应的端口号。因此需要将这些合法地址以及端口信息添加到安全策略库中,这个任务可由改进后的IKE来完成。

改进的UDP封装的格式如图2所示。

3.2 改进方案中的几个关键问题

1) 用UDP包封装AH/ESP有助于解决NAPT阻碍AH/ESP的问题,在静态或者动态NAT存在的情况下,这种封装有时没有必要。某些情况下是否用UDP封装IPSec通信由是否存在NAPT而非NAT来决定,如果AH/ESP可以通过NAT则没有必要再加一层UDP包头来浪费带宽。NAT检测不仅要确定NAT存在的位置,也要确定NAT的类型,尤其应该能够区分NAPT。

2) 对于动态NAT和NAPT,地址变换是动态的,这使对方的通信实体识别发生困难。在动态NAT或者NAPT存在时,Keep-alive消息是维持NAT映射表以解决密钥更新问题所必要的。

3) 经过NAT变换之后,IKE发起放的源地址经过NAT变换会发生变化,而IKE的响应方在IKE第二阶段协商之前必须知道IKE发起方经过NAT变换之前的源地址。IPSec交互双方需要知道双方的原始地址以重新计算TCP校验和或者AH ICV。

4) IKE实现必须接受端口号500以外的UDP端口。

4 改进的UDP封装方法的实现过程

假定所用封装为ESP传送模式,NAT网关为NAPT类型,网络连接状况如图3所示。图3中IP1表示内部主机的IP地址,IP2表示外部主机的IP地址,IPG表示NAT网关的IP地址。

4.1 探测NAT的存在

两个要进行通信的主机,首先要知道中间是否有NAT的存在。探测由NAT设备后的主机发起,发送IKE探测报文,即NAT-D(NAT Discovery)数据包,确认IPSec通信实体之间是否有NAT隔开,NAT发现载荷包括通信双方的地址/端口对的哈希值。另一方收到探测载荷后,计算这些哈希值,如果得到相同的结果,则中间没有NAT设备。如果哈希值不匹配,说明中间有实体进行了地址或端口的转换,则需要进行NAT穿透,以使IPSec包通过。

4.2 改进的UDP封装及解封装

改进方案中数据包穿越NAT在内部主机和外部主机之间进行传送的实现过程如下。

1) 数据包由内部主机发往外部主机,经过IPSec层,进行封装,源地址为本机地址,目的地址为外部主机地址。

2) 对数据包进行改进的UDP封装,并将本机地址、ESP协议值、非IKE标志附加到UDP数据中,源端口和目的端口均为500,IP头中的协议字段改为UDP。

3) 数据包经过NAT网关到达外部主机,此时数据包源IP地址为NAT网关地址,目的地址为外部主机地址。UDP报头中的源端口被修改,目的端口为500。

4) 外部主机进行UDP解封装,去除UDP报头,并用附带的IP地址替换掉IP报头中的源地址,用UDP报头中的ESP协议值替换IP报头中的协议值。至此已经成功完成IPSec数据包穿越NAT从内部主机到达外部主机的任务。

5) 数据包送往外部主机的IPSec层进行处理,查进入SA,进行解密以及验证,去除IPSec报头,重构IP数据包。

6) 将重构的IP数据包送往外部主机的IP层进行处理。此时和未实现IPSec协议时的处理相同。

7) 数据包经上层协议处理完毕后返回IPSec层,查策略,查SA,进行加密和HASH计算,构成IPSec报文。

8) 对IPSec报文进行UDP封装,因为此时目的IP地址为对方内部主机地址,所以需检索策略库,查找保存在策略库中与之对应的合法IP地址以及目的端口。UDP封装以后,源IP地址为外部主机IP地址,目的地址为NAT网关地址,UDP报头中源端口为500,目的端口地址为原500端口经NAT转换而得的端口。

9) 数据包从外部主机经NAT网关到达(返回)内部主机,此时经过NAT网关的转换,目的地址变为内部主机地址,目的端口变为500,据此内部主机得知此数据包为UDP封装的IPSec数据包。

10) 内部主机对到达的数据包进行解UDP封装,去除UDP报文,并用ESP协议值替换IP头中的协议字段值,重构IPSec报文。

11) 将重构的IPSec报文送往IPSec层进行处理,查SA,进行验证、解密,去除IPSec报头,重构IP数据包,送往IP层进行处理。至此,一次完整的实施了IPSec安全协议的数据报交换得以完成。

上述通信的完整过程如图4所示。

4.3 NAT的映射保持

使用存活时间保持包,存活保持包用于IPSec的两端支持一个活动的UDP路径,在没有正常IKE或IPSec流量时提供流量,以使NAT和状态过滤映射保持存活。存活保持包由NAT后的通信方发送以最小地保持存活流量,此包被IPSec包处理器丢掉。

5 结束语

根据新的UDP封装方案设计的系统EasySwan不再停留在草案阶段,而是将冲突方案真正付诸实施,通过修改Linux系统的网络协议栈,实现了IPSec报文对NAT设备的透明穿越。EasySwan有效地支持了IPSec 数据流传输路径中的NAT 转换,并且具有实现简单、扩展性好等优点,具有很好的应用前景。

参考文献

[1] 洪帆,陈卓, 等.IPSec安全体制的体系结构及应用研究.小型微型计算机系统,2002,23(8):946-949.

[2] 祝芝梅, 李之棠. IPSec与NAT兼容性问题及解决方案[J].计算机应用,2004,24(3):27-30.

[3] 徐大为, 龚玲, 杨宇航. IPSec穿越NAT的设计与实现[J].计算机工程,2002,28(7):153-155.

[4] 陆建德. 基于IPSec协议的Linux VPN安全网管的研究与设计.小型微型计算机系统,2001,22(7):878-880.

[5] 王浩,杨媛媛,陆际光.基于TCP/IP协议的网络安全分析[J].中南民族大学学报(自然科学版),2002,21(1):63-66.

上一篇:Logistic混沌映射 下一篇:面向服务在企业信息系统中的应用