3.5. IPSec

IPSec 是一种位于 IP 之上的新协议,可在互联网上的 2 台主机之间提供临时的加密链接。IPSec 的实现对于 IPv6 是强制性的,并且可以添加到 IPv4。即使 IPSec 是 IPv6 的一部分,但这并不意味着网络管理员会部署它。IPSec 的实施并不简单,因为在机器之间自动交换密钥的机制存在困难。DNS 可以提供帮助,但它不是主流,而且知名的证书颁发机构尚未提供足够的认证设施,以便在企业中广泛部署。

3.5.1. FreeS/WAN

FreeS/WAN 是 GNU/Linux 上 IPSec 的一种流行实现。在其当前版本 (1.9.7) 中,它需要进行修补才能整合 X.509 功能。您可以在 此站点 上找到修补版本。一些 GNU/Linux 发行版已经为您应用了补丁,因此请检查您的软件包。此版本的优势在于,您可以使用 openssl 创建证书以与 FreeS/WAN 和 DNS CERT 记录一起使用,但更具体地说,您可以与 Microsoft IPSec 的实现进行交互。有关更多信息,请查看 Nate 的页面

3.5.1.1. FreeS/WAN 网关机器

生成一个证书,其中 CN 为您的 IPSec 网关的完全限定域名:host.example.com。不要忘记签署证书。您有两个文件 newcert.pem 和 newreq.pem。文件 newreq.pem 包含私钥和一些额外信息,因此需要对其进行编辑,使其仅包含私钥。删除 --BEGIN RSA PRIVATE KEY-- 和 --END RSA PRIVATE KEY-- 之外的所有内容。将文件移动到网关机器上的适当位置。确保您安全地执行此操作。在我的发行版中,FreeS/WAN 的所有配置文件都位于 /etc/freeswan 中,在您的发行版中可能有所不同。

mv newreq.pem /etc/freeswan/ipsec.d/private/host.example.com.key
mv newcert.pem /etc/freeswan/ipsec.d/host.example.com.pem

还将您的根证书复制到 FreeS/WAN 配置目录。仅复制证书,而不是密钥。

mv cacert.pem /etc/freeswan/ipsec.d/cacerts

生成证书吊销列表或将您的列表复制到正确的位置。

openssl ca -genrcl -out /etc/freeswan/ipsec.d/crls/crl.pem

仍然在网关机器上,通过包含以下行来配置 ipsec.secrets 文件

: RSA host.example.com.key “password”

密码是用于生成密钥对的密码。按如下方式配置 ipsec.conf

config setup
interfaces=%defaultroute
klipsdebug=none
plutodebug=none
plutoload=%search
plutostart=%search
uniqueids=yes
conn %default
keyingtries=1
compress=yes
disablearrivalcheck=no
authby=rsasig
leftrsasigkey=%cert
rightrsasigkey=%cert
conn roadwarrior-net
leftsubnet=<your_subnet>/<your_netmask>
also=roadwarrior
conn roadwarrior
right=%any
left%defaultroute
leftcert=host.example.com.pem
auto=add
pfs=yes

如您所见,正在建立 2 个连接,一个连接到网关机器,另一个连接到网关机器后面的网络。如果您在网关机器上操作某种防火墙/NAT,这将特别有用。配置使得任何拥有有效证书的人都能够连接到网关机器。

3.5.1.2. FreeS/WAN 客户端机器

过程类似,您需要为客户端机器生成一个证书,其中 CN 为客户端机器的完全限定域名,例如 clienthost.example.com。此证书必须由与网关证书相同的签名机构签名。这将是链接授权的方式。

与网关一样,安全地将以下文件复制到配置目录

mv newreq.pem /etc/freeswan/ipsec.d/private/clienthost.example.com.key
mv newcert.pem /etc/freeswan/ipsec.d/clienthost.example.com.pem

还将您的根证书复制到 FreeS/WAN 配置目录。仅复制证书,而不是密钥。

mv cacert.pem /etc/freeswan/ipsec.d/cacerts

生成证书吊销列表或将您的列表复制到正确的位置。

openssl ca -genrcl -out /etc/freeswan/ipsec.d/crls/crl.pem

最后,您还需要复制网关机器的证书(而不是私钥)

mv host.example.com.pem /etc/fresswan/ipsec.d/host.example.com.pem

同样,编辑您的 ipsec.secrets 文件以加载客户端私钥

: RSA clienthost.example.com.key “password”

并按如下方式编辑 ipsec.conf 以启用连接

config setup
interfaces=%defaultroute
klipsdebug=none
plutodebug=none
plutoload=%search
plutostart=%search
uniqueids=yes
conn %default
keyingtries=0
compress=yes
disablearrivalcheck=no
authby=rsasig
leftrsasigkey=%cert
rightrsasigkey=%cert
conn roadwarrior-net
left=(ip of host)
leftsubnet=(gateway_host_subnet)/(gateway_host_netmask)
also=roadwarrior
conn roadwarrior
left=(ip of host)
leftcert=host.example.com.pem
right=%defaultroute
rightcert=clienthost.example.com.pem
auto=add
pfs=yes

现在您可以启动 VPN 链接

ipsec auto --up roadwarrior
ipsec auto --up roadwarrior-net

要自动启动链接,请在配置文件中将“auto=add”替换为“auto=start”

3.5.1.3. MS Windows 2000/XP 客户端机器

该过程与 FreeS/WAN 客户端相同。生成 CN 为 winhost.example.com 的证书,但您必须将此证书转换为 .p12 文件。按照“将此证书与 MS-Outlook 一起使用”一章中的步骤操作,但确保 .p12 文件与根 CA 证书捆绑在一起:winhost.example.com.p12

此外,请注意以下输出

openssl x509 -in cacert.pem -noout -subject

将此文件安全地复制到 MS-Windows 机器。

您现在需要安装 Marcus Muller 的 ipsec.exe 实用程序,例如在 c:\ipsec 目录中。

打开 Microsoft 管理控制台 (MMC),在“添加/删除管理单元”中单击“添加”,然后单击“证书”,然后单击“添加”。选择“计算机帐户”,然后单击“下一步”。选择“本地计算机”,然后单击“完成”。单击“IP 安全策略管理”,然后单击“添加”。选择“本地计算机”,然后单击“完成”,单击“关闭”,然后单击“确定”。

现在您可以添加 .p12 证书

单击“证书(本地计算机)”旁边的加号箭头,然后右键单击“个人”,然后单击“所有任务”,然后单击“导入”,单击“下一步”。键入 .p12 文件的路径(或浏览并选择文件),然后单击“下一步”。键入导出密码,然后单击“下一步”。选择“根据证书类型自动选择证书存储”,然后单击“下一步”。单击“完成”,并对弹出的任何提示说“是”。退出 MMC,并将其另存为文件,这样您就不必每次都重新添加管理单元。

按照 ipsec 实用程序的文档中的说明安装 ipsecpol.exe (Windows 2000) 或 ipseccmd.exe (Windows XP)。编辑您的 ipsec.conf(在 Windows 机器上),将“RightCA”替换为 'openssl x509 -in cacert.pem -noout -subject' 的输出;重新格式化如下(您需要将 / 替换为逗号,并更改某些字段的名称 - 只需按照下面的示例进行操作)

conn roadwarrior 
left=%any 
right=(ip_of_remote_system) 
rightca="C=FJ, ST=Fiji, L=Suva, O=SOPAC, OU=ICT, CN=SOPAC Root"
network=auto 
auto=start 
pfs=yes
conn roadwarrior-net 
left=%any 
right=(ip_of_remote_system) 
rightsubnet=(your_subnet)/(your_netmask)
rightca="C=FJ, ST=Fiji, L=Suva, O=SOPAC, OU=ICT, CN=SOPAC Root" 
network=auto 
auto=start 
pfs=yes

启动链接

运行命令 'ipsec.exe'。以下是示例输出

C:\ipsec>ipsec 
IPSec Version 2.1.4 (c) 2001,2002 Marcus Mueller 
Getting running Config ... 
Microsoft's Windows XP identified 
Host name is: (local_hostname) 
No RAS connections found. 
LAN IP address: (local_ip_address) 
Setting up IPSec ...
Deactivating old policy... 
Removing old policy...
Connection roadwarrior: 
MyTunnel : (local_ip_address)
MyNet : (local_ip_address)/255.255.255.255 
PartnerTunnel: (ip_of_remote_system) 
PartnerNet : (ip_of_remote_system)/255.255.255.255 
CA (ID) : C=FJ, ST=Fiji, L=Suva, O=SOPAC, OU=ICT, CN=SOPAC Root... 
PFS : y 
Auto : start 
Auth.Mode : MD5 
Rekeying : 3600S/50000K 
Activating policy...
Connection roadwarrior-net: 
MyTunnel : (local_ip_address) 
MyNet : (local_ip_address)/255.255.255.255 
PartnerTunnel: (ip_of_remote_system) 
PartnerNet : (remote_subnet)/(remote_netmask) 
CA (ID) : C=FJ, ST=Fiji, L=Suva, O=SOPAC, OU=ICT, CN=SOPAC Root... 
PFS : y 
Auto : start 
Auth.Mode : MD5 
Rekeying : 3600S/50000K 
Activating policy...
C:\ipsec>

现在,ping 您的网关主机。它应该会说“正在协商 IP 安全”几次,然后为您提供 ping 响应。请注意,这可能需要尝试几次;从 T1 连接到电缆调制解调器上的 VPN 服务器,通常需要 3-4 次 ping。对远程端的内部网络执行相同的操作,您应该就可以连接了!