目前,互联网通信面临的风险主要包括两个方面:1.信息在传输时被偷看或非法修改;2.公网对内部网的非法访问和攻击。在这样的情况下,VPN技术脱颖而出,它可以很好地解决利用互联网传输的安全问题。
IPSec是被广泛接受用来实现VPN的技术,在企业中得到广泛应用。IPSec在IP层上对数据包进行保护,它可提供数据源验证、无连接数据完整性、数据机密性、抗重播和有限业务流机密性等安全服务,可以在相当程度上降低互联网通信的风险。
IKE(Internet Key Exchange)是IPSec中至关重要的一个协议,因为IPSec需要使用它协商某些与IPSec安全有关的安全参数,包括计算机信任、加密密钥和安全方法。IKE的主要功能就是安全联盟(SA)的建立和维护。
本文主要从IPSec及IKE简介、Linux VPN运行环境组建和IKE配置等三个方面进行描述,并给出利用IKE构建VPN应用的实例。
IPSec及IKE简介
1.IPSec简介
IPSec协议由一组协议组成,其中包括AH、ESP、IKE及加密和验证算法。ESP用于确保IP数据包的机密性(未被别人看过)、数据的完整性及对数据源的身份验证。此外,它还要负责对重播攻击的抵抗。AH也提供了数据完整性、数据源验证及抗重播攻击的能力,但不能用它来保证数据的机密性。
IPSec的安全服务是由通信双方建立的安全联盟(SA)来提供的。SA表示了策略实施的具体细节,包括源/目的地址、应用协议、SPI(安全策略索引)、所用算法/密钥/长度,它们决定了用来保护数据安全的IPSec协议、模式、算法/密钥、生存期、抗重播窗口及计数器等。
每一个IPSec节点都包含有一个安全策略库(SPD)。SPD决定了整个VPN的安全需求。在SPD这个数据库中,每个条目都定义了要保护的是什么通信、怎样保护它,以及和谁共享这种保护。IPSec系统在处理输入/输出IP流时必须参考该策略库,并根据从SPD中提取的策略对IP流进行不同的处理:拒绝、绕过或进行IPSec保护。
IPSec协议(包括AH和ESP)有传输模式和通道模式两种工作模式。传输模式用来保护上层协议;而通道模式用来保护整个IP数据报。在传输模式中,IP头与上层协议头之间需插入一个特殊的IPSec头;而在通道模式中,要保护的整个IP包都需封装到另一个IP数据报里,同时在外部与内部IP头之间插入一个IPSec头。
2.IKE简介
用IPSec保护一个IP包之前,必须先建立一个SA。IKE用于动态建立SA。IKE代表IPSec对SA进行协商,并对SADB和SPD数据库进行填充。
IKE利用PF_KEY接口与内核进行交互,以便更新内核的SPD和SADB。SADB是一个存在于内核中的逻辑实体,用来存储、更新、删除安全协议的安全联盟数据。安全协议(如IPSec)利用内核中的逻辑接口来请求和获取SA。
IKE规定了协商的两个独立阶段。第一阶段目的是通信各方彼此间建立一个通过身份验证和安全保护的通道IKE SA。对该阶段来说,IKE采用的是身份保护交换,以及根据基本ISAKMP文档制定的野蛮交换法,即“主模式”和“野蛮模式”。它们各自做的都是建立一个保密和验证无误的通信信道(IKE SA),并建立验证过的密钥,为双方的IKE通信提供机密性、消息完整性及消息源验证服务。
IKE SA提供了各种各样的参数,这些参数称为“保护套件”,包括加密算法、散列算法、验证方法及Diffie-Hellman组。还有一些可选属性,它们可作为保护套件的一部分进行协商。在这些可选属性之前,必须加上一个“存活时间”(有效期)。
对第二阶段来说,IKE定义了一种快速模式交换。在第一阶段建立IKE SA后,就可以利用它加密地进行IPSec SA的参数协商,如加密算法、验证算法、密钥和存活时间等。
Linux VPN运行环境组建
1.升级到内核2.6.0
目前发行的各种Linux版本基本都是采用2.4.x内核,Linux VPN实现大都采用Freeswan软件。现在2.6.0内核的协议栈嵌入了IPSec处理代码,将内核升级到2.6.0,可以利用其固有的IPSec功能。本文描述的Linux VPN实现基于Red Hat 9.0。
介绍如何将内核升级到2.6.0的文章较多,这里仅简单列出升级内核的基本步骤。
(1)首先从www.kernel.org网站下载2.6.0内核,将它放到/usr/src目录下。
(2)将内核源码释放到/usr/src/目录下。
#tar -zxvf linux-2.6.0.tar.gz
#cd linux-2.6.0
#make mrproper
#make menuconfig
注意,为了保证与内核2.4.x中文件系统兼容,必须将文件系统ext3改为必选项。并在网络选项中选择以下四项,使系统内核能够支持IPSec。
<* PF_KEY sockets
<* IP: AH transformation
<* IP: ESP transformation
<* IP: IPComp transformation
重新使用内核2.6.0启动系统。
#make; make bzImage
#make modules; make modules_install
#make install
(3)安装IPSec手工配置工具。
从http://ipsec-tools.sourceforge.net/下载源码ipsec-tools-0.2.2.tar.gz,按照帮助文件提示进行编译。
#./configure
#make; make install
这样有了应用程序sekey,就可用它手工配置SPD和SA。
ipsec-tools自带的IKE进程racoon运行时不能自动执行通道模式下的协商过程,必须由内核发起SA请求来触发,所以必须事前手工输入安全策略。这给VPN应用带来了很大不便,因此这里将采用后文描述的isakmpd进程。
2.安装IKE相关应用程序
本文介绍的IKE支持预共享密钥和X.509两种认证模式。为了支持X.509证书认证,必须首先安装keynotes。
安装keynotes的步骤如下:
(1)从 http://www1.cs.columbia.edu/~angelos/keynote.html获取源码keynote.tar。
(2)将其解压并编译。
#tar -xvf keynote.tar
#./configure
#make
注意,编译isakmpd时,需要keynotes的文件头和库libkeynotes.a。
现在可以安装isakmpd了。isakmpd最早运行在OpenBSD上,由Thomas Walpuski将其移植到Linux平台,所以在源码里会看到OpenBSD的痕迹。
安装isakmpd的步骤如下:
(1)从http://bender.thinknerd.de/~thomas/IPsec/isakmpd-linux.html获取源码isakmpd.tgz。
(2)解压缩并编译。
#tar -zxvf isakmpd.tzg
修改文件GNUmakefile,将OS改为Linux。
修改文件isakmpd/sysdep/linux/GNUmakefile.sysdep,将内核2.6.0和keynotes的头文件加入编译路径。
#make
(3)装备运行目录。
#mkdir /etc/isakmpd
存放配置文件和策略文件。
#mkdir /etc/isakmpd/ca
存放CA X.509证书。
#mkdir /etc/isakmpd/certs
存放本机和其它主机X.509证书。
#mkdir /etc/isakmpd/private
存放本机的私钥。
#cp isakmpd /usr/sbin/.
至此,支持IPSec和IKE的Linux运行环境组建完成。