isakmpd的配置文件和策略文件 实施IPSec前,必须解释一下isakmpd的配置文件和策略文件,因为对它们的理解关系到能否正确实施VPN。这两个文件是isakmpd.conf和isakmpd.policy,分别对应IPSec的SADB和SPD。isakmpd.conf主要描述了建立IKE SA和IPSec SA所需的必要参数;isakmpd.policy策略文件控制哪些安全主机或VPN网关可以与本机建立SA,以及建立什么样的SA。下面就常用的一些配置项加以解释,更详细的信息请查阅相关帮助手册。 配置文件isakmpd.conf采用.ini格式,每小节以[section]形式开始,在小节内可以将值赋予一个tag: [section]tag=value如果value很长,可以在行尾使用“\”续行。以“#”开头的行是注释行。通常右边的值是其它section的名字。对于一些特殊的小节,section都有预定义的默认值,如“General”、“Keynote”、“X509-certificates”和“Default-phase-1-configuration”。一些预定义的section名可以被isakmpd进程识别,这样可以避免完全详细描述主模式的转换码和快速模式的套件、协议及转换码。 对于主模式: {DES,BLF,3DES,CAST}-{MD5,SHA}[-GRP{1,2,5}][-{DSS,RSA_SIG}]对于快速模式:
QM-{proto}[-TRP]-{cipher}[-{hash}][-PFS[-{group}]]-SUITE其中{proto}可为ESP或AH;{cipher}可为DES、3DES、CAST、BLF或AES;{hash}可为MD5、SHA或RIPEMD;{group}可为GRP1、GRP2或GRP5。 例如,3DES-SHA表示3DES加密、SHA哈希和预共享密钥认证。这些自动生成的值可以在配置文件中使用相同的section名和tag名将其重新设置。 为了让大家对该配置文件有个感性认识,以一个采用预共享密钥认证的简单配置文件为例来说明(如图1示)。该文件的最右端以“//”开始部分是加注的解释,在实际的配置文件中并不存在。 图1 配置文件isakmpd.conf下面介绍策略文件isakmpd.policy。 一个最简单的策略文件只需一行就可以工作: authorizer: "POLICY"它表示对那些想建立连接的实体没有策略限制,因而不是安全的配置。这里的“authorizer”表示谁有权决定策略。特殊的授权者“POLICY”拥有最终的和无限制的权利。任何其它的授权者必须由“POLICY”授权。 也可以在策略文件内设置一些被允许的条件。下面的策略表示只有那些使用ESP协议,而且加密算法不为空的实体有权建立IPSec SA: authorizer:"POLICY"conditions:app_domain == "IPsec policy" &&esp_present == "yes" &&esp_enc_alg != "null" - "true";还可以利用“licensees”授权给其它的实体。简单的例子就是预共享密钥的情形: authorizer:"POLICY"licensees: "passphrase:something really secret"conditions:app_domain == "IPsec policy" &&esp_present == "yes" &&esp_enc_alg != "null" - "true";上面的配置表示任何知道预共享密钥,且通信参数符合条件的人都得到授权建立IPSec连接。记住要把isakmpd .conf中的Authentication设置成预共享密钥。 关于策略文件更安全和详细的描述请参考isakmpd.policy帮助手册和网站http://hem2.passagen.se/hojg/isakmpd/。 企业VPN实现案例 假设某企业总部在北京,分公司在南京,两地想通过互联网传输企业的私有信息。为了降低成本,可以利用Internet实现企业虚拟专用网,具体拓扑见图2。 图2 基于Internet的企业VPN应用拓扑图图2中两地VPN网关的公网地址是假设的。192.168.0.0 /24网段与192.169.0.0/24网段利用VPN-GW-NJ和VPN-GW-BJ之间建立的加密隧道进行通信。 为了使Linux能够适应今后的大规模VPN部署,这里使用X.509证书进行IKE认证,同时也避免了因预共享密钥泄露引起的VPN系统安全问题。利用X.509配置IKE,可分两步进行:首先创建X.509证书;然后修改配置文件,使IKE进程使用X.509证书进行认证。 关于CA(Certificate Authority)的知识,请查阅相关资料。本文只给出实施IPSec所需X.509证书的创建步骤。 (1)创建自己的CA证书。 #openssl genrsa -out /etc/ssl/private/ca.key 1024#openssl req -new -key /etc/ssl/private/ca.key -out /etc/ssl/private/ca.csr其中ca.key是CA的私钥,必须存放在安全的地方。 下一步利用CA的私钥为CA自己签署证书: #openssl x509 -req -days 3650 -in /etc/ssl/private/ca.csr -signkey /etc/ssl/private/ca.key -out /etc/ssl/ca.crt这样便拥有自己的CA证书,然后可以用该证书为其它主机签发X.509证书。 (2)为每个IPSec网关创建私钥和证书。 在网关VPN-GW-NJ上: #openssl genrsa -out /etc/isakmpd/private/local.key 1024#openssl req -new -key /etc/isakmpd/private/local.key -out /etc/isakmpd/private/202.102.0.120.csr将证书请求传给CA进行签署: #openssl x509 -req -days 365 -in 202.102.0.120.csr -CA /etc/ssl/ca.crt -CAkey /etc/ssl/private/ca.key -CAcreateserial -out 202.102.0.120.crt必须运行工具certpatch在证书中增加一些扩展项,以使它可以被isakmpd所用。 #certpatch -i 202.102.0.120 -k /etc/ssl/private/ca.key 202.102.0.120.crt 202.102.0.120.crt将签署好的证书放在网关的/etc/isakmpd/certs/目录下,同时将CA证书ca.crt放在网关的/etc/isakmpd/ca/目录下。 对网关VPN-GW-BJ同样执行上述步骤,将202.102.0.120改成网关VPN-GW-BJ的公网IP地址即可。 (3)编辑配置文件和策略文件。 两台VPN网关的策略文件isakmpd.policy配置为: authorizer:"POLICY"conditions:app_domain == "IPsec policy" &&( esp_present == "yes" ||ah_present == "yes")- "true";上述配置不是最安全的配置,应该再进一步进行安全优化。 两台安全网关的配置文件isakmpd.conf分别如图3、图4所示。 图3 VPN-GW-NJ的配置文件 图4 VPN-GW-BJ的配置文件(4)启动isakmpd进程。 #isakmpd(5)用相关工具验证VPN是否正常工作。 [root@wwchen isakmpd]# setkey -DP192.169.0.0/24[any] 192.168.0.0/24[any] anyin ipsecesp/tunnel/213.14.1.122-202.102.0.120/usecreated: Dec 27 15:39:12 2003
lastused:lifetime: 0(s) validtime: 0(s)spid=232 seq=3 pid=4921refcnt=1192.168.0.0/24[any] 192.169.0.0/24[any] anyout ipsecesp/tunnel/202.102.0.120-213.14.1.122/requirecreated: Dec 27 15:39:12 2003
lastused:lifetime: 0(s) validtime: 0(s)spid=225 seq=2 pid=4921refcnt=1... ...以上为查看策略库SPD时VPN正常工作显示的内容。 [root@wwchen isakmpd]# setkey -D202.102.0.120 213.14.1.122esp mode=tunnel spi=3338011673(0xc6f60419) reqid=0(0x00000000)E: 3des-cbc
033ccd02 e4430fe4 e3947652 e4a3a5a9 f2fd5514 06bec978A: hmac-md5
54e401f0 57f1ff08 5f37f52c d2bcfa1dseq=0x00000000 replay=16 flags=0x00000000 state=maturecreated: Dec 27 15:39:12 2003
current: Dec 27 15:39:24 2003diff: 12(s)
hard: 1200(s)
soft: 1080(s)last:
hard: 0(s)
soft: 0(s)current: 0(bytes)
hard: 0(bytes)
soft: 0(bytes)allocated: 0
hard: 0 soft: 0sadb_seq=1 pid=4922 refcnt=0213.14.1.122 202.102.0.120esp mode=tunnel spi=1733688336(0x6755fc10) reqid=0(0x00000000)E: 3des-cbc
82acc8b0 d2c641c9 5677169d 67a4f9ed 0b7da239 6585ba29A: hmac-md5
07a411f6 b72bcd1a aab1dbd3 da3f869bseq=0x00000000 replay=16 flags=0x00000000 state=maturecre