<< Back to shouce.jb51.net

6.4. IPsec 主机到主机配置

IPsec 可以通过主机到主机连接的配置来连接一个桌面或工作站到另一个桌面或工作站。这类连接使用每个主机所连的网络来创建彼此间的安全隧道。主机到主机连接的要求很少,每个主机的 IPsec 配置的要求也很少。主机只需要到载体网络(如互联网)的专用连接和红帽企业 Linux 就能够创建 IPsec 连接。

创建连接的第一步是从每个工作站收集系统和网络信息。对于主机到主机连接,你需要以下信息:

例如:假定工作站 A 和工作站 B 想通过 IPsec 隧道来彼此连接。它们想使用值为 foobarbaz 的预共享钥匙来连接,并且用户同意让 racoon 自动生成和共享每个主机间的验证钥匙。两个主机用户都决定把它们的连接命名为 ipsec0

以下是工作站 A 和工作站 B 之间的主机到主机 IPsec 连接的 ifcfg 文件(这个例子中用来识别该连接的独特名称是 ipsec0,因此其结果文件被命名为 /etc/sysconfig/network-scripts/ifcfg-ipsec0)。

DST=X.X.X.X
TYPE=IPSEC
ONBOOT=yes
IKE_METHOD=PSK

工作站 A 将会把 X.X.X.X 替换成工作站 B 的 IP 地址,而工作站 B 将会把 X.X.X.X 替换成工作站 A 的 IP 地址。连接被设置成引导时被引发(ONBOOT=yes),并使用预共享钥匙验证方法(IKE_METHOD=PSK)。

以下是预共享钥匙文件(叫做 /etc/sysconfig/network-scripts/keys-ipsec0),两个工作站都使用它来彼此验证。该文件的内容应该完全一致,并且只有根用户才应该有读写权。

IKE_PSK=foobarbaz

重要重要
 

为了改变 keys-ipsec0 文件的权限使只有根用户才有对它的读写权,在创建了该文件后执行以下命令:

chmod 600 /etc/sysconfig/network-scripts/keys-ipsec0

如果需要改变验证钥匙,必须编辑两个工作站上的 keys-ipsec0 文件。两个文件必须完全一致才能保证正确的连接性

下一个例子显示了到远程主机的第一阶段连接的特有配置。该文件的名称为 X.X.X.X.conf(把 X.X.X.X 替换成远程 IPsec 路由器的 IP 地址)。注意,一旦 IPsec 隧道被激活,该文件会被自动生成,不应该被直接编辑。

;
remote X.X.X.X
{
        exchange_mode aggressive, main;
        my_identifier address;
        proposal {
                encryption_algorithm 3des;
                hash_algorithm sha1;
                authentication_method pre_shared_key;
                dh_group 2 ;
        }
}

默认的第一阶段配置文件在 IPsec 连接被引发时被创建。它包含以下被红帽企业 Linux 的 IPsec 实现所使用的声明:

remote X.X.X.X

指明随后的配置文件实例只应用于被 X.X.X.X IP 地址所识别的远程节点。

exchange_mode aggressive

在红帽企业 Linux 中,IPsec 的默认配置使用强硬的验证模式。这种模式减少连接费用,同时允许到多个主机的多个 IPsec 配置。

my_identifier address

定义验证节点时要使用的身份识别方法。红帽企业 Linux 使用 IP 地址来识别节点。

encryption_algorithm 3des

定义验证时使用的加密术。默认使用“三次数据加密标准”(Triple Data Encryption Standard3DES)。

hash_algorithm sha1;

指定在节点商谈过程的第一阶段中使用的散列算式。默认使用安全散列算式(Secure Hash Algorithm)版本 1。

authentication_method pre_shared_key

定义节点商谈中使用的验证方法。红帽企业 Linux 默认使用预共享钥匙。

dh_group 2

指定建立动态生成的会话钥匙所用的 Diffie-Hellman 组号。默认使用 1024 位组

除了 include "/etc/racoon/X.X.X.X.conf" 这个声明外,/etc/racoon/racoon.conf 文件应该完全一致。该声明(以及它引用的文件)在 IPsec 隧道被激活时被生成。对于工作站 A,include 声明中的 X.X.X.X 是工作站 B 的 IP 地址。工作站 B 的情况正好相反。下面显示了一个当 IPsec 连接被激活时的典型 racoon.conf 文件。

# Racoon IKE daemon configuration file.
# See 'man racoon.conf' for a description of the format and entries.

path include "/etc/racoon";
path pre_shared_key "/etc/racoon/psk.txt";
path certificate "/etc/racoon/certs";

sainfo anonymous
{
	pfs_group 2;
	lifetime time 1 hour ;
	encryption_algorithm 3des, blowfish 448, rijndael ;
	authentication_algorithm hmac_sha1, hmac_md5 ;
	compression_algorithm deflate ;
}
include "/etc/racoon/X.X.X.X.conf"

默认的 racoon.conf 文件包含 IPsec 配置的指定路径,预共享钥匙和证书。sainfo anonymous 中的字段描述 IPsec 节点安全验证的第二阶段 — IPsec 连接的性质(包括所用的被支持加密算式)和交换钥匙的方法。以下列表定义了第二阶段的字段:

sainfo anonymous

意思是只要 IPsec 证件匹配,SA 能够不具名地引发和任何对端的连接。

pfs_group 2

定义 Diffie-Hellman 钥匙交换协议。该协议会决定 IPsec 节点为 IPsec 连接的第二阶段建立彼此使用的临时会话钥匙的方法。红帽企业 Linux 中实现的 IPsec 默认使用 Diffie-Hellman 加密术钥匙交换的组 2(或 modp1024)。组 2 使用 1024 位模块化取幂。这种方法在密钥被窃取时也能够防止攻击者解密前一次 IPsec 传输。

lifetime time 1 hour

这个参数表明 SA 的整个过程可以使用时间或数据字节数量来衡量。红帽企业 Linux 实现的 IPsec 指定了 SA 的生存期为 1 小时。

encryption_algorithm 3des, blowfish 448, rijndael

指定第二阶段中所用的被支持的加密术。红帽企业 Linux 支持 3DES、448 位 Blowfish、以及 Rijndael(用于“高级加密标准”(Advanced Encryption StandardAES)中的加密术。

authentication_algorithm hmac_sha1, hmac_md5

列举被支持的用来验证的散列算式。被支持的模式是 sha1 和 md5 散列消息验证代码(hashed message authentication codes,HMAC)。

compression_algorithm deflate

定义用于 IP 载量压缩(IPCOMP)支持的压缩算式。它具备在较慢的连接中较快地传输 IP 数据报的潜在能力。

要启动连接,在每个主机上以根用户身份重新引导工作站或执行以下命令:

/sbin/ifup ipsec0

要测试 IPsec 连接,运行 tcpdump 工具来查看在主机(或网络)间传输的网络分组,并校验它们是否通过 IPsec 被加密了。分组应该包括 AH 头,而且应该被显示为 ESP 分组。ESP 意味着它被加密了。例如:

17:13:20.617872 pinky.example.com > ijin.example.com: \
	    AH(spi=0x0aaa749f,seq=0x335): ESP(spi=0x0ec0441e,seq=0x335) (DF)