摘要 IPv6与IPv4相比在安全方面具有很多特点,将IPSec集成到协议内部是IPv6的优势。介绍IPv6协议概念基础上,重点研究实现VPN的关键技术——IPSec协议及其体系结构、工作模式和相关协议。最后提出利用FreeS/WAN软件包并通过修改Linux内核的方式来实现了Linux系统上一种基于IPSec的VPN。
1、IPv6简介
IPv6是因特网协议第六版(Internet Protocol version six)的缩写,IPv6是IETF(Internet Engineering Task Force,因特网工程工作小组)设计的用来替代现行的IPv4协议的下一代网络标准,IPv6是为了解决IPv4所存在的一些问题和不足而提出的,同时它还在许多方面提出了改进。
1.1 简化的报头和灵活的扩展
IPv6数据报头由一个基本报头和多个扩展报头(Extension Header)构成,基本报头具有固定的长度40字节,有助于加快路由速度、减少处理器开销并节省网络带宽。对扩展报头和选项支持的改进,可以提高转发效率,使得对选项长度的限制更宽松,且提供了将来引入新的选项的更大的灵活性。
1.2 层次化的地址结构
IPv6将现有的IP地址长度扩大4倍,由当前IPv4的32位扩充到128位,以支持大规模量的网络节点。这样IPv6的地址总数就大约有3.4×10E38个。如此丰富的IP地址数目,不仅满足当前的因特网用户,而且还可以为将来IP地址拓展到其它各种电子设备做好准备。IPv6支持更多级别的地址层次,IPv6的设计者把IPv6的地址空间按照不同的地址前缀来划分,并采用了层次化的地址结构,以利于骨干网路由器对数据包的快速转发。
1.3 即插即用的连网方式
只要机器一连接上网络便可自动设定地址。它有两个优点。一是最终用户用不着花精力进行地址设定,二是可以大大减轻网络管理者的负担。
1.4 安全性方面
在IP协议设计之初并没有考虑安全性,原来的Internet安全机制只建立于应用程序级,如E-mail加密、SNMPv2网络管理安全、接入安全等,无法从IP层来保证Internet的安全。而IPv6在网络安全方面最为显著的就是将IPSec安全协议集成到内部,实现了IP级的安全,IPSec主要有3个方面的安全机制,即数据包确认、数据包的保密和数据包的完整,安全功能具体在其扩展数据包中实现。
1.5 服务质量的满足
基于IPv4的Internet在设计之初,只有一种简单的服务质量,即采用“尽最大努力”(Best effort)传输,从原理上讲服务质量QoS是无保证的。文本传输,静态图像等传输对QoS并无要求。随着IP网上多媒体业务增加,如IP电话、VoD、电视会议等实时应用,对传输延时和延时抖动均有严格的要求。为了更好地支持实时通信(例如视频会议),IPv6对QoS增加了一种新功能,即流标签机制。通过该机制,其目的是允许发送业务流的源节点和转发业务流的路由器在数据包上加上标记,并进行除默认处理之外的不同处理。一般来说,在所选择的链路上,可以根据开销、带宽、延时或其他特性对数据包进行特殊的处理。一个流是以某种方式相关的一系列信息包,IP层必须以相关的方式对待它们。决定信息包属于同一流的参数包括:源地址,目的地址,QoS,身份认证及安全性。IPv6中流的概念的引入仍然是在无连接协议的基础上的,一个流可以包含几个TCP连接,一个流的目的地址可以是单个节点也可以是一组节点。IPv6的中间节点接收到一个信息包时,通过验证他的流标签,就可以判断它属于哪个流,然后就可以知道信息包的QoS需求,进行快速的转发。
2、IPSec协议安全和安全机制
如图1所示,IPSec是一组由IETF设计的RFC文档组成,将作为网络安全标准在IPv6下强制实施。IPSec为IP及上层协议提供了数据完整性、数据源身份认证、抗重放攻击、数掘内容的机密性等安全服务,是目前网络层实现VPN(Virtul Private Network,虚拟专用网)的事实上的标准,它定义了一个系统来提供安全协议选择、安全算法、确定服务所使用的密钥等服务,从而在IP层提供安全保障。IPSec是由认证头AH(Authentication Header)协议、封装安全载荷ESP(Encapsulating Security Payload)协议、密钥管理协议IKE(Internet Key Exchange)三部分组成。AH能提供数据源的认证、完整性、及抗重放服务。ESP除能提供AH的功能外还提供数据保密性。
图1 IPSec实施
2.1 IPSec体系结构
IPSec协议包括:AH(验证头)、ESP(封装安全载荷)、IKE(因特网密钥交换)。其体系结构如图2所示。
图2 IPSec的结构
——AH协议(Authentication Header Protocol)即分组头认证协议,在AH协议中,推荐的密码算法是MD5算法和SHA_1密码算法。
——ESP协议(Encapsulating Secure PagLoad Protocol)即封装安全有效净荷协议。该协议主要是为IP层提供加密保证及数据源的省份认证。ESP协议主要用来处理对IP数据包的加密。该协议是一种与具体加密算法相独立的安全协议。该协议几乎支持所有的对称密钥加密算法,例DES、3DES、IDEA、RCS等加密算法。
——IKE协议(Internet Key Exchange Protocol)即Internet密钥交换协议。该协议主要是为通信用户提供身份认证方法、采用的密钥、数据加密方式等问题,经过协商后达成一致意见的协议。
——策略是一个非常重要的问题,因为它决定两个实体之间是否能够通信;如果能,又采用哪一种转码方式。如果策略定义不当,可能导致双方不能正常通信。策略这个组件尚未成为标准。
2.2 IPSec的工作模式
IPSec可为IP及上层协议TCP和UDP提供安全保证,分别通过IPSec的两种不同模式,传输模式和隧道模式实现。
2.2.1 传输模式
在传输模式中,AH和ESP只对上层协议数据和IP头中的固定字段提供认证或加密保护,在这种模式中,AH和ESP会拦截从传输层到网络层的数据包,并根据具体的策略提供安全保护,适用于在端点(主机)之间实现。在传输模式数据包经过AH或ESP处理之后的格式如表1所示。
表1 AH和ESP传输模式下的数据包格式
2.2.2 隧道模式
隧道模式封装和加密整个IP数据包,IPSec隧道模式的数据包有两个IP头——内部头和外部头。其中,内部头由主机创建,而外部头由提供安全服务的安全网关添加。安全网关对收到的数据包进行处理,去除掉明文IP报头后,对其内容进行解密,并获得最初的IP报头。这种模式适合在数据包的最终目的地不是安全终点的情况,通常应用于在外部网络和安全网关之间,内部网络的主机不负责加密工作。在隧道模式下数据包经过AH或ESP处理之后的格式如表2所示。
表2 AH和ESP隧道模式下的数据包格式
2.3 IPSec的密钥管理
IPSec的密钥管理包括密钥的确定和分发。典型的需求是两个应用需要四个密钥:发送和接收对的AH和ESP。IPSec体系结构文档要求支持两种密钥管理类型:
(1)手动的:系统管理员手动地为每个系统配置自己的密钥和其他通信系统密钥管理,一般应用于小规模、相对静止的环境。
(2)自动的:自动系统可以在大型分布系统中使用可变配置为SA动态按需创建密钥。
默认的IPSec自动密钥管理协议指的是ISAKMP/Oakley,它由以下元素组成:
(1)Oakley密钥确定协议:Oakley提供增值安全性,是基于Diffie-Hellman算法的密钥交换协议。Oakley是通用的,没有任何特别格式。
(2)ISAKMP(互联网安全关联和密钥管理协议):ISAKMP提供互联网密钥管理框架和特定协议支持,包括格式和安全属性协商。
ISAKMP自身不包含特定的交换密钥算法,而是由一系列使用各种交换密钥算法的报文类型集合组成。Oakley是ISAKMP的第一个版本规定使用的交换密钥算法。
3、基于IPSec的VPN实现
IPSec的典型应用是构建VPN,它能灵活地将加密、认证、密钥管理和访问控制等结合在一起,以达到专用网络的效果。这种方法是将IPSec代码结合进操作系统内核的IP代码中。这种方法将IP与IPSec紧凑结合,但是需要掌握操作系统内核源代码中关于IP包的处理流程,而有了Linux这样一种功能强大且开放源码的网络操作系统,只要对其内核源代码进行分析,加入IPSec协议处理功能,就可以实现VPN功能。实施这种方案的典型代表就是FreeS/WAN,
对于数据包的接收,FreeS/WAN使用注册“协议开关表”的方法在协议开关表中加入对IPSec包的判断和处理,Linux系统提供标准接口函数inet_add_protocol(struct inet_protocol*prot)实现协议开关表中协议类型的加入和删除。这里,ESP和AH作为两种协议类型都注册到协议开关表中,其中的参数为inet_protocol_ah_protocol或inet_protocol esp_protocol,结构定义如下:
ipsec_rcv()函数完成对接收到的IPSec数据包的处理,首先根据AH或ESP头中的信息(目的IP地址、安全参数索引SPI和协议类型等)确定相应的SA,再根据SA查找安全关联数据库,得到相应的安全关联,再根据安全关联对数据包实行具体的认证解密工作。具体接收流程如图3所示。
图3 接受数据包处理流程
对于数据包的发送,它通过注册“虚拟设备”的方案实现数据包的“重定向”。首先由函数ipsec_tunnel_in it_evices()向内核登记虚接口,再由ipsec_tunnelattach()将虚接口绑定到指定的物理接口上,此时虚接口和物理接口被视为一致的,当要发送的包需要经过IPSec处理时,就将包送到虚拟设备中处理。ipsec_tunnel_start_xmit()为IPSec的发送处理程序,放在虚拟设备的驱动程序中,完成数据包的加密和认证。数据包在IPSec处理完毕后被送往已与虚拟接口绑定的实际的网络接口中。具体的发送流程如图4所示。
图4 发送数据包处理流程
4、结束语
除了上述软件方法实现IPSec外,还用两种方法可实现IPSec。一种是做一个模块插到协议栈中,这种方式一般是在主机实施时采用。这种模块往往是驱动程序级的代码,编写这样的代码需要对内核中的网络接口非常熟悉,相对于一般的编程有一定的难度。优点是安装加载都非常方便,但可能有一定的效率损失;另外一种是通过硬件实现。将IPSec功能集成到网络设备上去。如网卡、或其它的一些网络设备的接口上去。在IPSec的应用中需要执行许多的加密解密运算,特别是在ESP模式下,DES或3DES一类的对称加密算法要消耗大量的CPU时间,即便是现在的上GHz的CPU也不能满足高速加解密的需要。使用硬件实现IPSec就有可能集成将一些专用的加解密芯片。但这样会增加一些硬件上的成本。
来源:中国联通网站