首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

在 Linux 内使用 IPSEC 配置网络对网络和点对点的 VPN 连接(1)

在 Linux 内使用 IPSEC 配置网络对网络和点对点的 VPN 连接(1)

简介目前,全球的许多组织都在使用各种可用的物理连接方法来连接各个办公室。可使用的方式有专用数字线路和虚拟专用网 (Virtual Private Networks, VPN),而后者要比物理线路便宜很多。VPN 与专线部署的方式几乎相同,但却可以将几个 LAN 组合成一个并可对流量进行加密以隐藏所传输的数据。当在 VPN 技术中部署加密时,通常会使用开放标准。这涉及到在 IP 上传输并使用数据报 (datagram) 作为传输层的流量。
从技术角度来看,VPN 可通过使用软件和硬件来实现。在 Linux® 内,经常使用安全协议 IPSEC (Internet Protocol Security) 的标准实现来部署 FreeS/Wan 技术。这些使用软硬件实现的解决方案,在 VPN 连接终端充当路由器。当数据包由客户机传输时,它会被发送到这个专用的路由器,该路由器会向其添加一个验证头 (Authentication Header, AH)。在数据被加密且解密和处理它的指令被添加后,数据包就会被传递到另一端的专用路由器。当收到此包时,终端路由器会对之进行解密,丢弃 AH 头,并将清晰的数据包传输到目的地的用户。
如果网络间使用了加密,那么 LAN 内的主机就会接收已解密的数据包并以正常的方式开始处理它。这就意味着当网络间使用了加密时,整个加密/解密的流程对网络的终端主机是透明的。
在 VPN 中会部署若干层验证和加密,这就使其足够安全和有效,能够将多个远端节点组合成一个内部网 (intranet)。
IPSEC 是 VPN 标准的一种流行实现,就将其分支或远程用户连接到它们的网络而言,它足够可靠,可满足各种客户需求。
IPSEC 总体概述IPSEC 通常用来支持节点和网络之间通过 Internet 的安全连接。它可以在点到点的配置(一个计算机连接到另一个计算机)或网络到网络配置(一个 LAN/WAN 连接到另一个 LAN/WAN)内运行。IPSEC 使用由 Internet Engineering Task Force (IETF) 开发的用来做互连系统或网络间的相互验证和安全参数对比的 Internet Key Exchange (IKE) 协议来实现。
IPSEC 连接流程分为两个逻辑阶段。在第一个阶段,IPSEC 节点建立起与一个远端节点或网络的连接。这个远端的节点/网络验证请求节点的凭证,双方就连接中使用的验证方法达成一致。IPSEC 节点的验证通常会使用一种预共享密钥的算法。如果 IPSEC 连接使用了一个预共享密钥,那么两个节点必须使用这个相同的密钥。之后才有可能进入建立连接的第二个阶段。
在节点间建立 IPSEC 连接的第二个阶段使用 Security Association (SA) 来完成。这会涉及到配置数据,比如加密方法,会话密钥的交换手段以及导入到 SA 数据库的其他几个参数。这一阶段也管理分布于整个 WAN 的节点和网络之间的 IPSEC 连接。
现在,我们根据 CentOS Linux 分布的示例,来看看 IPSEC 的实现。要在网络内的所有机器上(在点到点配置的情况下)或路由器上(在网络到网络配置的情况下)部署 IPSEC,必须设置相关的数据包来管理 IPSEC 配置。这些数据包必须包括帮助建立 IPSEC 连接的基础库、守护程序和配置文件,包括 /lib/libipsec.so 库,该库包含了 Linux 内核和 CentOS Linux 内使用的 IPSEC 实现之间用来管理可信任密钥 PF_KEY 的接口。在本例中:
  • /sbin/setkey 提供了内核中的密钥管理和 IPSEC 安全属性。此程序遵守管理密钥的 racoon 守护程序。有关 setkey 的更多信息可以在 setkey (8) 手册页(参见 )中找到。
  • /sbin/racoon 守护程序的作用是管理 IKE 密钥并监管运行着 IPSEC 的计算机之间的密钥交换以及安全关联。这个守护程序可以在编辑了文件 /etc/racoon/racoon.conf 之后设置。有关 racoon 的更多信息可以在 racoon (8) 手册页(参见 )中找到。
  • /etc/racoon/racoon.conf 是一个配置文件,各种 IPSEC 连接参数在此设置,包括验证方法和加密算法。有关此主题的详细信息也可以在 racoon.conf (5) 手册页(参见 )的命令总结部分中找到。
为点到点配置设置 IPSECIPSEC 可基于点到点连接将一个工作站连接到另一个工作站。有了这种连接,将使用两个节点均连接到的网络来创建一个安全通道。此节点只需一个到 Internet 的永久连接或另一个经常处于运行状态的网络来建立 IPSEC 连接。
创建点到点连接需要如下数据:
  • 两个节点的 IP 地址
  • IPSEC 连接的惟一名称,使其有别于另一个设备或连接 (ipsec0)
  • 一个加密密钥,永久的或使用 racoon 自动创建
  • 一个验证预共享密钥,用来建立连接并在连接会话期间交换加密密钥
现在,我们来看看两个主机相互建立连接的场景。其中会用到共享密钥 my_key 以及守护程序 racoon 来自动创建并交换验证密钥。连接名是 ipsec0。
此工作站使用如  所示的 ifcfg 文件来建立与另一个工作站的 IPSEC 点到点连接。 显示了文件 /etc/sysconfig/network-scripts/ifcfg-ipsec0 的格式。
清单 1. ifcfg-ipsec0 的格式
1
2
3
4
DST=X.X.X.X’
TYPE=IPSEC
ONBOOT=yes
IKE_METHOD=PSK




在第一个计算机上,字母 X.X.X.X 必须由第二个计算机的 IP 地址所替代,反之亦然。连接是在启动 (ONBOOT=yes) 期间建立的并使用预共享密钥验证方法 (IKE_METHOD=PSK)。
具有共享密钥 (/etc/sysconfig/network-scripts/keys-ipsec0) 的文件,如  所示,是两个计算机做相互验证所必需的。在两个计算机上,此文件的内容必须相同,而且必须只有 root 用户能够访问它:IKE_PSK=my_key。               
发出如下命令来限制对此文件的访问 keys-ipsec0:
清单 2. 具有共享密钥的文件
1
chmod 600 /etc/sysconfig/network-scripts/keys-ipsec0.




为了能随时更改验证密钥,必须编辑两个计算机上的 keys-ipsec0 文件。这两个密钥必须完全一致才能建立连接。
解释了连接到一个远端节点的第一个阶段的配置流程。这个文件名为 X.X.X.X.confX.X.X.X 由远端 IPSEC 路由器的 IP 地址所替代)。请注意此文件是在 IPSEC 通道激活时自动生成的,不是手动编辑的。
清单 3. X.X.X.X.conf 文件的格式
1
2
3
4
5
6
7
8
9
10
11
12
;
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 ;
        }
}




  • 命令 remote X.X.X.X 表明配置文件中的后续字符串只适用于被分配到地址 X.X.X.X 的远端节点。
  • 在 CentOS Linux 中,默认 IPSEC 配置内的 exchange_mode aggressive 是一种允许多个节点间具有不同 IPSEC 连接的验证方法。
  • my_identifier address 定义了用于节点验证的识别方法。CentOS Linux 可识别 IP 地址处的节点。
  • encryption_algorithm 3des 定义了用于验证的加密算法。默认的方法是 Triple Data Encryption Standard (3DES)。
  • hash_algorithm sha1 表明在连接的第一个阶段期间所使用的是散列计算算法。
  • authentication_method pre_shared_key 定义了同步化节点时所使用的验证方法。
  • Вdh_group 2 表明的是用来选择自动生成的会话密钥的 Diffie-Hellman 群组的数量。默认使用 1024 位组。
在所有 IPSEC 节点上,/etc/racoon/racoon.conf 也必须相同,运算符 include "/etc/racoon/X.X.X.X.conf"除外,此运算符将会有不同的 IP 地址。当 IPSEC 通道激活时,操作和文件都会生成。 显示了当 IPSEC 连接建立时所生成的典型的 racoon.conf:
清单 4. racoon.conf 文件的格式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 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"




对于配置文件内所有参数的描述不在本文的讨论范围之内。可以从相应的手册获得这些信息。
要建立此连接,可以重启计算机或在每个节点执行代表 root 的如下命令:/sbin/ifup ipsec0。
启动实用工具 tcpdump 来检查 IPSEC 连接。当这么做时,数据包必须包含 AH 和 ESP 数据。ESP 意味着加密有效。 显示了一个示例 tcpdump:
清单 5. 样例 tcpdump
1
2
17:13:20.617872 pinky.example.com > ijin.example.com: \
AH(spi=0x0aaa749f,seq=0x335): ESP(spi=0x0ec0441e,seq=0x335) (DF)

返回列表