下面的图例显示了一个连接两个基于 Linux 网络的典型 CIPE 设置:
该图表显示了一个在防火墙上运行 CIPE 的网络,和一个充当启用 CIPE 节点的远程客户机器。CIPE 连接仿佛是一个隧道,所有到内联网的数据都在远程节点间被选路传送。所有数据都使用动态生成的128位钥匙来加密,大文件传输还可以被进一步压缩,或者把 X 应用程序用隧道输送到远程主机。CIPE 可以被配置来在两个或更多启用了 CIPE 的 Linux 机器间通信,它还有用于基于 Win32 的操作系统的网络驱动程序。
为什么使用 CIPE?
CIPE 是安全管理员和系统管理员的明智选择,其原因如下:
1.CIPE 被包括在红帽企业 Linux 中,因此所有你想连接到你的内联网的红帽企业 Linux 边缘机器(如防火墙和网关机器)和个体客户机器上都可以利用它。红帽企业 Linux 还包括支持 CIPE 的加密术。
2.CIPE 使用标准的 Blowfish 或 IDEA 加密算法来支持加密。根据你所在国家的加密出口法规而定,你可以使用默认方法(Blowfish)来加密你的专用网上的所有 CIPE 交通。
3.因为 CIPE 是基于软件的,只要运行红帽企业 Linux,任何一个较老的或闲置的机器都可以充当 CIPE 网关,所以你不必购买昂贵的专用 VPN 硬件来安全地连接两个局域网,从而给机构节省资金。
4.CIPE 被积极开发来与 iptables、ipchains、以及其它基于规则的防火墙一起使用。要和现存的防火墙规则共同存在,只需要让对端接受进入的 CIPE UDP 分组就可以了。
5.CIPE 配置是通过文本文件来完成的。这使管理员不必使用通过网络运行效果不佳的图形化工具来远程地配置 CIPE 服务器和客户。CIPE 还可以使用网络管理工具来配置。
CIPE 安装
在 Linux 下安装 CIPE 和安装网络接口一样。CIPE RPM 软件包包含 /etc/cipe/ 中的配置文件、CIPE 守护进程(/usr/sbin/ciped-cb)、载入内核模块和激活/解除 CIPE 接口(if*-cipcb)的网络脚本、以及 /usr/share/doc/cipe-<version>/samples/ 中的配置文件范例。其中还包括了一个详细解释 CIPE 协议和各类实现细节的文本信息文件。
以下说明详细描述了一个配置范例。它涉及了一个想要安全地连接到带有 CIPE 网关的远程 LAN 的工作站客户。这个工作站使用电缆调制解调器连接的动态 IP 地址,启用了 CIPE 的网关机器使用 192.168.1.0/24 范围。这被称为是“典型”的 CIPE 配置。图 6-1显示了这种典型 CIPE 设置。
在客户和 CIPE 服务器间安装 CIPE 会允许你使用互联网作为 WAN 交通的传输媒介来进行安全的端到端连接。客户工作站通过互联网给启用了 CIPE 的防火墙发送一份文件,每个分组都被加以时间戳、并被给予接收端的地址。然后,目标防火墙读取它的头信息,剥离它,并把它传送给远程 LAN 路由器,接着再被选路发送到目标节点。整个过程天衣无缝,并对终端用户完全透明。传输的主要过程是在启用了 CIPE 的对端间完成的。
CIPE 服务器配置
要设置 CIPE 服务器,从红帽企业 Linux 光盘或通过红帽网络来安装 cipe RPM 软件包。
重要 | |
---|---|
如果你使用的是较老的红帽企业 Linux,并且/或者有一个较老的 CIPE,你应该升级到最新的版本。 |
下一步是把位于 /usr/share/doc/cipe-version/samples/ 的配置文件范例复制到 /etc/cipe/ 中(这里的 version 是安装在你的系统上的 CIPE 版本)。复制完毕后,你将需要编辑 /etc/cipe/options.cipcbx(x 是从0开始的递增数字,为那些想要在 CIPE 服务器上不止有一个 CIPE 连接的客户提供)文件来包括你的 LAN 子网地址和可公共选路的防火墙 IP 地址。以下是包括在红帽企业 Linux CIPE RPM 中的 options 文件范例。在这个例子中,它被重命名为 options.cipbcb0:
# Surprise, this file allows comments (but only on a line by themselves) # This is probably the minimal set of options that has to be set # Without a "device" line, the device is picked dynamically # the peer's IP address ptpaddr 6.5.4.3 # our CIPE device's IP address ipaddr 6.7.8.9 # my UDP address. Note: if you set port 0 here, the system will pick # one and tell it to you via the ip-up script. Same holds for IP 0.0.0.0. me bigred.inka.de:6789 # ...and the UDP address we connect to. Of course no wildcards here. peer blackforest.inka.de:6543 # The static key. Keep this file secret! # The key is 128 bits in hexadecimal notation. key xxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
ptpaddr 是远程 LAN 的 CIPE 地址。ipaddr 是工作站的 CIPE IP 地址。me 地址是客户的可公共选路的 IP 地址,它通过互联网发送 UDP 分组。peer 是 CIPE 服务器的可公共选路的 IP 地址。注意,客户工作站的 IP 地址是 0.0.0.0,因为它使用动态连接。CIPE 客户将会处理到 CIPE 服务器的连接。key 字段(用 x 代表;你的钥匙应该是密钥)是共享静态钥匙。这个钥匙在两个对端上必须是相同的,否则连接就不能成立。关于如何为你的 CIPE 机器生成共享静态钥匙,请参阅第 6.8 节。
这是客户工作站将会使用的被编辑过的 /etc/cipe/options.cipcb0:
ptpaddr 10.0.1.2 ipaddr 10.0.1.1 me 0.0.0.0 peer LAN.EXAMPLE.COM:6969 key 123456ourlittlesecret7890shhhh |
这是 CIPE 服务器的 /etc/cipe/options.cipcb0 文件:
ptpaddr 10.0.1.1 ipaddr 10.0.1.2 me LAN.EXAMPLE.COM:6969 peer 0.0.0.0 key 123456ourlittlesecret7890shhhh |
成功地配置了 CIPE 服务器并测试了它的功能后,你现在就可以在客户机器上使用这种连接了。
CIPE 客户应该能够自动地连接和断开 CIPE 连接。因此,CIPE 包含内建的机制来为个别使用自定设置。例如,远程职员可以通过键入以下命令来连接到 LAN 上的 CIPE 设备:
/sbin/ifup cipcb0 |
设备应该自动出现;防火墙规则和选路信息也应该和连接一起配置。远程职员应该能够使用以下命令来终止连接:
/sbin/ifdown cipcb0 |
配置客户需要创建在设备被载入后需运行的脚本。服务配置本身可以通过用户创建的文件 /etc/sysconfig/network-scripts/ifcfg-cipcb0 来本地配置。这个文件中包含一些参数,如判定 CIPE 连接是否在引导时发生的参数;代表 CIPE 设备名称的参数等。以下是一个连接到 CIPE 服务器的远程客户的 ifcfg-cipcb0 文件:
DEVICE=cipcb0 ONBOOT=yes BOOTPROTO=none USERCTL=no # This is the device for which we add a host route to our CIPE peer through. # You may hard code this, but if left blank, we will try to guess from # the routing table in the /etc/cipe/ip-up.local file. PEERROUTEDEV= # We need to use internal DNS when connected via cipe. DNS=192.168.1.254 |
CIPE 设备的名称是 cipcb0。CIPE 设备将会在引导时间被载入(通过 ONBOOT 字段配置),而且将不会使用一种引导协议(如 DHCP)来接收该设备的 IP 地址。PEERROUTEDEV 字段决定连接到客户的 CIPE 服务器设备名称。如果这个字段中没有指定任何设备,在设备被载入后就会为它决定一个。
如果你的内部网络是在防火墙背后,你需要设置规则来允许客户机器上的 CIPE 接口发送和接收 UDP 分组。关于为红帽企业 Linux 配置防火墙的信息请参阅第7章 。我们这个配置例子中使用了 iptables 规则。
注记 | |
---|---|
客户应该这样配置,因此所有被本地化的参数都被放在一个用户创建的叫做/etc/cipe/ip-up.local 的文件中。CIPE 会话被关闭后,应该使用 /etc/cipe/ip-down.local 来还原本地参数。 |
客户机器上的防火墙应该被配置接受 CIPE UDP 封装分组。规则的差距可能会很大,但是对 UDP 分组的基本接受对于 CIPE 连接来说却是必需的。以下的 iptables 规则允许连接到 LAN 上的远程客户机器进行 UDP CIPE 传输;最后一条规则添加了 IP 伪装来允许远程客户与 LAN 和互联网通信。
/sbin/modprobe iptables /sbin/service iptables stop /sbin/iptables -P INPUT DROP /sbin/iptables -F INPUT /sbin/iptables -A INPUT -j ACCEPT -p udp -s 10.0.1.1 /sbin/iptables -A INPUT -j ACCEPT -i cipcb0 /sbin/iptables -A INPUT -j ACCEPT -i lo /sbin/iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE |
你必须还在客户机器上添加用来像访问本地网络一样访问 CIPE 连接背后的节点的选路规则。这可以通过运行 route 命令来完成。在我们的例子中,客户工作站需要添加以下网络路线:
route add -net 192.168.1.0 netmask 255.255.255.0 gw 10.0.1.2 |
以下显示了用于客户工作站的最终 /etc/cipe/ip-up.local 脚本:
#!/bin/bash -v if [ -f /etc/sysconfig/network-scripts/ifcfg- ] ; then . /etc/sysconfig/network-scripts/ifcfg- else cat < |
定制 CIPE
CIPE 的配置方法多种多样,你可以在启动 ciped 时作为命令行参数来传递它们,也可以生成新的共享静态钥匙。这给安全管理员定制 CIPE 会话来在保证安全的同时还提高生成率方面提供了灵活性。
注记 | |
---|---|
最常用的参数应该被放在 /etc/cipe/options.cipcbx 文件中,它们会在运行时间被自动载入。 请注意,任何在命令行中作为选项来传递的参数将会超越和在 /etc/cipe/options.cipcbx 配置文件中设置的相应参数。 |
表 6-1详细描述了一些运行 ciped 守护进程时的命令行参数。
参数 | 描述 |
---|---|
arg | 把参数传递给 /etc/cipe/ip-up 初始脚本 |
cttl | 设置载体生存时间值(TTL);推荐的值是64 |
debug | 启用调试的布尔值 |
device | 给 CIPE 设备命名 |
ipaddr | CIPE 机器的可公开选路的 IP 地址 |
ipdown | 选择另一个 ip-down 脚本,而不是默认的 /etc/cipe/ip-down |
ipup | 选择另一个 ip-up 脚本,而不是默认的 /etc/cipe/ip-up |
key | 为 CIPE 连接指定一个共享静态密钥 |
maxerr | 在 CIPE 守护进程退出前允许的错误数量 |
me | CIPE 机器的 UDP 地址 |
mtu | 设置设备的最大传输单位 |
nokey | 不使用加密 |
peer | 对端的 CIPE UDP 地址 |
ping | 设置 CIPE 特有的(非 ICMP)保持活跃 ping 间隔 |
socks | 用于代理连接的 SOCKS 服务器的 IP 地址和端口号码 |
tokey | 设置动态钥匙的活跃时间;默认为10分钟(600秒) |
tokxc | 共享钥匙互换的超时值;默认为10秒钟 |
tokxts | 共享钥匙互换时间戳的超时值;默认为0(无时间戳) |
toping | 保存活跃 ping 的超时值;默认为0 |
表 6-1. CIPE 参数
CIPE 的钥匙管理
如前面所提到,CIPE 包括一个静态链接钥匙(link key)和加密交通的安全组合来在载体网络如互联网中创建一个安全隧道。静态链接钥匙为两个启用了 CIPE 的网络安全传递信息提供了一个公共参考点。因此,这两个启用了 CIPE 的网络网关分享完全相同的钥匙这一点是极端重要的,否则 CIPE 通信就不能够进行。
生成 CIPE 钥匙需要你懂得哪类钥匙是兼容的。随机的字母数字生成器是行不通的。静态钥匙必须是128位、32字符的字符串。这些字符串可以通过运行以下命令来被创建。该命令使用 od 来创建使用 /dev/random 随机数字设备的十六进制密钥:
od -N 16 /dev/random -t x4 | awk '{print }' |
把输出放在 /etc/cipe/options.cipcb0 文件中以用于所有 CIPE 服务器和客户。