在 《IPSec 中的 AH 机制详解》 和 《IPSec 中的 ESP 机制详解》 里分别介绍了 IPSec 中的 AH 和 ESP 这两种协议,并给出了 wireshark 的抓包截图,但没有给出如何配置这两种情况的实验环境。
如果要让 IPSec 可以正常工作,那么需要适当的管理工具来管理 AH 和 ESP 运行所需要的参数,这些管理工具在开源领域从不缺乏,但要看你自己习惯用什么样的软件,比如常见的有 OpenSwan 和 ipsec-tools ,这里介绍的是 ipsec-tools 这一款,它的官方网站是 http://ipsec-tools.sourceforge.net ,但在官网只提供源代码,要编译才能安装,这不是很方便。在 Fedora 17 里,可以直接使用 yum 来安装:# yum install ipsec-tools 此外,在 http://rpm.pbone.net 这个网站上可以找到许多不同 Linux 发行版可用的 RPM 安装包,将对应的版本下载后,可以使用下面的命令进行安装:# yum localinstall ipsec-tools-0.8.0-4.fc17.i686.rpm
下面以一个简单的只启用了 AH 协议的 IPSec VPN 的配置文件为例说明。
首先,我们在 192.168.1.109 这台 /root 目录下编辑一个文件 192-168-1-109.conf ,其文件内容为:
[Plain Text] 纯文本查看 复制代码 flush;
spdflush;
#===============<SAD>=================
add 192.168.1.109 192.168.1.107 ah 0x201 -m transport
-A hmac-sha1 0xab4812053387b8b9d9ccfd5125f7c9ca96a90d53;
add 192.168.1.107 192.168.1.109 ah 0x301 -m transport
-A hmac-sha1 0x39a294ea5fcc323c8b62f7eff7e37f1b04a8350e;
#===============<SPD>=================
spdadd 192.168.1.109 192.168.1.107 any -P out ipsec
ah/transport//require;
spdadd 192.168.1.107 192.168.1.109 any -P in ipsec
ah/transport//require;
这个 192-168-1-109.conf 文件所在的主机 192.168.1.109 我们称之为数据库服务器,它包含了两个数据库,SAD (Security Association Database)和 SPD (Security Policy Database)。简单的说,SPD 是用来存放 IPSec 通信规则的;SAD 是用来存放 IPSec 规则所使用的参数的,如这些参数有:SPI 值,目的端 IP,AH 或 ESP 协议,AH 验证算法,AH 验证的加密密钥,ESP 验证算法,ESP 验证算法的加密密钥,ESP 加密算法,ESP 加密算法的加密密钥,使用隧道模式还是传输模式 等等。
我们可以将上面的 192-168-1-109.conf 稍作修改后,然后传给 192.168.1.107 这台客户机,这样两者以后的任何通信,一律会采用 IPSec 机制处理,修改的内容如下:
[Plain Text] 纯文本查看 复制代码 flush;
spdflush;
#===============<SAD>=================
add 192.168.1.109 192.168.1.107 ah 0x201 -m transport
-A hmac-sha1 0xab4812053387b8b9d9ccfd5125f7c9ca96a90d53;
add 192.168.1.107 192.168.1.109 ah 0x301 -m transport
-A hmac-sha1 0x39a294ea5fcc323c8b62f7eff7e37f1b04a8350e;
#===============<SPD>=================
spdadd 192.168.1.107 192.168.1.109 any -P out ipsec
ah/transport//require;
spdadd 192.168.1.109 192.168.1.107 any -P in ipsec
ah/transport//require;
实际上,修改的内容不多:SAD 部分无需做任何改动。SPD 部分只要调换一下传输方向即可(in 和 out) 。保存后,可以将该文件保存为 192-168-1-109.conf ,然后我们使用 scp 命令将其上传到 192.168.1.09 这台客户机上,使用 scp 命令是保证传输过程中的加密安全性,上传命令如下:# scp /root/192-168-1-109.conf 192.168.1.109:/root/192-168-1-109.conf
传输完毕后,我们可以使用 setkey 命令来启动 IPSec 了,setkey 命令在安装 ipsec-tools 软件包时会被同时安装。当然,数据库服务器和客户机两边都需要使用该命令来启动 IPSec,用法是:# setkey -f /root/192-168-1-107.conf
# setkey -f /root/192-168-1-107.conf 如果想取消 IPSec 的运行,可以使用下面的命令:# setkey -D -F
setkey -P -F
下面以 192-168-1-107.conf 这个文件为例,说明一下各行配置的含义:
第 1 行和第 2 行:在加载文件内所定义的 IPSec 参数之前,需要先清除一下 IPSec 原有的参数内容,这些参数内容分别保存在 SAD 和 SPD 两个数据库中。其中,flush 是清除 SAD 数据库内容,spdflush 是清除 SPD 数据库内容。
第 4 行:以 # 符号开头的行是注释行。另外,一个配置行的是以分号作为结束的,如果没遇到分号,那么就不认为该配置行结束。
第 6 行和第 7 行:add 是将其后的参数加入到 SAD 数据库的命令。192.168.1.109 192.168.1.107 | 表示从 192.168.1.109 传送数据到 192.168.1.107 。ah 指采用 AH 协议。0x200 是个安全索引值,该值不能在其它的配置行里重复。 表示使用传输模式,默认时就是个该模式,如果要用隧道模式那么就用 -m tunnel 参数。 表示采用的验证算法是 hmac-sha1 。0xab4812053387b8b9d9ccfd5125f7c9ca96a90d53 | 表示加密密钥;hmac-sha1 算法使用的加密密钥长度为 20 个字节,只要长度符合,内容随便,但是我们可以使用xxd 命令轻松生成该密钥。
第 9 行和第 10 行:这两行和第6,第7行的含义相同,只是“方向”不同。这里,仍然选择 hmac-sha1 算法,但也可以选择其他的算法,比如 hmac-md5 ,但是前者比后者还要安全一点。此外,加密密钥也不一样,这对整个加密应用会更安全些。
第 14 行:下面内容是 SPD 数据库的内容。这些参数用于控制进出 VPN 主机的数据包中哪些是需要使用 IPSec 协议的,以及使用 IPSec 协议中的哪些协议。
第15 行:spdadd 是将其后参数加入到 SPD 数据库的命令。spdadd 192.168.1.109 192.168.1.107 any -P out | 表示任何从 192.168.1.109 出到 192.168.1.108 的数据包都使用 IPSec 处理,比如如果写成:spdadd 192.168.1.109 [any] 192.168.1.107[110] tcp -P out ipsec ,那么该句的意思是:192.168.1.109 任何端口发送到 192.168.1.107 的 110 端口的数据包,且通信协议是 TCP 的话,那么都必须使用 IPSec 协议处理。如果端口部分没有定义,默认就是 any ,也就是任何一个端口的意思。
第 16 行:是指如果数据包流量符合第 15 行中的定义,那么这些数据包必须采用”传输模式“的 AH 协议来处理。
第 18 和第 19 行:这两行的内容和第15,16行除了方向定义相反外,其它的都相同。
至于启用数据库服务器和客户端之间采用 ESP 协议的配置和 AH 协议基本一样,这里就不赘述,只列出配置文件内容:
[Plain Text] 纯文本查看 复制代码 flush;
spdflush;
#===============<SAD>=================
add 192.168.1.109 192.168.1.107 esp 0x201 -m transport
-E 3des-cbc 0xbfd606cc5200183f9af30060b0518df880850b7c5cbc832c
-A hmac-sha1 0xab4812053387b8b9d9ccfd5125f7c9ca96a90d53;
add 192.168.1.107 192.168.1.109 esp 0x301 -m transport
-E 3des-cbc 0x25a95bffa6c1d38ed7661a187e226aba1fb2548a4c24333c
-A hmac-sha1 0x39a294ea5fcc323c8b62f7eff7e37f1b04a8350e;
#===============<SPD>=================
spdadd 192.168.1.109 192.168.1.107 any -P out ipsec
esp/transport//require;
spdadd 192.168.1.107 192.168.1.109 any -P in ipsec
esp/transport//require;
上面需要注意的是 ESP 协议中所使用的加密算法以及加密密钥的长度,密钥的生成方法仍然可以采用 xxd 命令,只需要注意密钥长度即可。 |