近段时间,笔者完成了一些IPSec VPN的配置,有站点到站点固定公网IP地址的IPSec VPN,有站点到站点使用固定公网IP地址的EZVPN,有网络中心点是固定公网IP地址,而分支机构是动态地址的DMVPN,有路由器和防火墙之间互联的IPSec VPN,也有不同厂商的设备之间互联的IPSec VPN。通过这些项目的锻炼,笔者感到对IPSec VPN的了解又增进了一步,以前一些模糊的地方,经过这次项目的实践之后也越来越清晰,以下就是笔者对IPSec VPN配置的总结和配置实例。
一、 理解IPSec VPN
VPN是利用公共网络建立一条专用的通道来实现私有网络的连接,IPSec VPN就是利用IPSec协议框架实现对VPN通道的加密保护。IPSec工作在网络层,它能在IP层上对数据提供加密、数据完整性、起源认证和反重放保护等功能。
加密的作用就是通过将数据包加密,保证数据的安全,即使数据包被人监听获取到,也无法阅读数据内容。
IPSec使用的数据加密算法是对称密钥加密系统。支持的加密算法主要有:DES、3DES、MD5和SHA加密算法,这种加密算法需要一个共享的密钥执行加密和解密,共享的密钥是通过通信两端交换公钥,然后用公钥和各自的私钥进行运算,就得到了共享的密钥,这样就需要一个公钥交换的算法。DH密钥协议就是一种公钥交换方法。DH密钥交换协议有组1到组7的几种不同的算法。DES和3DES支持组1和2,AES支持组2和5,因此如果选用了不同的加密算法,就需要选择相应的DH密钥交换算法。
数据完整性的作用就是保证数据包在传输的过程当中没有被篡改。 为了保证数据的完整性,给每个消息附加一个散列数,通过验证发送的散列数和接收的散列数是否匹配来判断消息是否被修改。散列消息验证代码(HMAC)主要有两种算法:HMAC-MD5和HMAC-SHA-1,MD5使用128位的共享密钥,
而SHA使用160位密钥,因此HMAC-SHA-1比HMAC-MD5的加密强度要更高一些。
起源认证的作用就是保证发送数据包的源站点是可信的。
起源认证用来在建立隧道时验证隧道两端的对等体是否是可信的。主要有预共享密钥,RSA签名、RSA-加密nonces三种方法。其中预共享密钥配置起来最简单,但安全性和扩展性也相对来说要差一些。预共享密钥就是在每个对等体上都预先配置好相同的密钥,经过运算之后发送到远端的对等体,由于每个对等体的密钥相同,因此就能够通过起源认证。另外两种认证方法配置较为复杂,需要和证书服务器配合起来使用,笔者没有这方面的实践,因此后面的配置实例中都是采用的预共享密钥的配置。
反重放保护的作用就是保证数据包的唯一性,确定数据包在传输过程中没有被复制。
在IPSec的数据包中含有一个32位的序列数,并且是不能重复的,接收方通过检查序列数是否是唯一的来执行反重放保护功能。
IPSec协议簇主要包括两种协议:AH(认证头)和ESP(封装安全有效载荷)。其中AH不提供加密功能,而ESP两者都提供。当使用ESP进行加密和认证的时候,执行顺序是先加密再认证。将这两种协议应用到IP数据包时有两种模式,分别是隧道模式和传输模式。隧道模式将一个新的IP头附加在已加密的数据包之前,为整个数据包提供安全性;而传输模式下原数据包的IP头不变,保持明文,只对数据包的内容提供安全性。
IPSec的建立有两个阶段,第一个阶段主要是认证对等体,并协商策略。如确定建立IPSec隧道所需用到的安全参数,主要有加密的算法、对等体的认证、保证消息完整性的散列算法和密钥交换的算法,在协商成功后建立一条安全通道。
第二个阶段主要是协商IPSec的参数和IPSec变换集,如确定使用AH还是ESP协议,使用传输模式还是隧道模式。协商成功后建立IPSec SA(安全关联),保护IPSec隧道的安全。
在笔者所配置的IPSec VPN中,都统一采用下列参数: 阶段一:
加密算法采用3DES;
保证数据完整性的算法采用HMAC-SHA-1; 起源认证采用预共享密钥; 密钥交换采用DH组2; 阶段二:
采用ESP协议提供对整个数据包的保护,并同时使用加密和认证,加密算法采用3DES,认证算法采用HMAC-SHA-1
使用模式采用隧道模式。
二、 配置实例及说明
1. 用路由器实现站点到站点的IPSec VPN
以笔者单位的网络拓扑结构为例来说明使用路由器实现站点到站点的IPSec VPN的配置。本例中总部和三个分公司都具有固定的公网IP地址,路由器型号为Cisco3845,拓扑如图一所示:
图1
总部路由器阶段一的配置: ZB(config)#crypto isakmp policy 10
//建立一个
新的密钥交换策略,优先级为10,优先级号是从1到100000,1的优先级最高
ZB(config-isakmp)#encryption 3des 3DES的加密算法
ZB(config-isakmp)#authentication pre-share 享密钥认证对等体
ZB(config-isakmp)#hash sha
//使用SHA
//使用预共
//
使
用
散列算法,这一条配置命令可不用配置,因为默认的就是采用的这种散列算法
ZB(config-isakmp)#group 2 算法采用DH密钥协议组2的算法
由于采用的是预共享密钥的方式认证对等体,因此需要回到全局配置模式下,指定对等体的密钥:
//密钥交换
ZB IP地址
//密钥为cjgsvpn,然后分别指定三个分公司的路由器公网接口的
总部路由器阶段二的配置:
ZB(config)#crypto ipsec transform-set cjgsset esp-3des esp-sha-hmac
//定义
IPSec的转换集,转换集的名字为cjgsset,并指定采用ESP协议提供对整个数据包的加密和认证,加密采用3DES算法,认证采用SHA算法
ZB(cfg-crypto-trans)#mode tunnel
//使用
隧道模式,这条配置命令也可以不用配置,默认就是采用隧道模式
IPSec的两个阶段配置完成后,接下来定义需要保护的数据类型,定义加密映射,并将加密映射映射到路由器的公网接口上:
ZB(config)#ip access-list extended cz
//这里
的几条访问列表定义要被保护的数据,即总部访问三个分公司的数据流。
.255
ZB(config-ext-nacl)#exit ZB(config)#ip access-list ext tl 到铜陵分公司的流量
.255
ZB(config-ext-nacl)#exit ZB(config)#ip access-list ext zz 洲分公司的流量
ZB(config-ext-nacl)#permit ip 172.19.0
ZB(config)#crypto map cjgsmap 10 ipsec-isakmp
//建立优先
//总部到株
//总部
级为10,名字为cjgsmap的加密映射,并使用ISAKMP(即阶段一协商的参数)来自动建立IPSec SA
ZB(config-crypto-map)#match add cz
//匹配加密
映射需要保护的流量,这里是匹配到常州分公司的流量
ZB(config-crypto-map)#set transform-set cjgsset cjgsset变换集定义的IPSec参数
//定义对等体的地址,即常州分公司路由器公网接口的
//
使
用
IP地址
ZB(config-crypto-map)#exit
ZB(config)#crypto map cjgsmap 20 ipsec-isakmp 级为20的加密映射
ZB(config-crypto-map)#match add tl 陵分公司的流量
ZB(config-crypto-map)#set transform-set cjgsset
//铜陵分公司路由器公网接口的IP地址
//匹配到铜
//定义优先
ZB(config-crypto-map)#exit
ZB(config)#crypto map cjgsmap 30 ipsec-isakmp 优先级为30的加密映射
ZB(config-crypto-map)#match add zz 洲分公司的流量
ZB(config-crypto-map)#set tran cjgsset
//株洲分公司路由器公网接口的IP地址
//匹配到株
//定义
加密映射的策略定义完成后,将加密映射应用到总部路由器的公网接口上: ZB(config)#int fa0/0
ZB(config-int)crypto map cjgsmap 至此总部路由器上的配置即完成。
分公司的配置以铜陵分公司为例,阶段一和阶段二的参数必须采用和先前定义的一致,否则总部和分公司之间就不能建立加密的安全通道,具体的配置命令与总部路由器上的一样,配置结果如下:
crypto isakmp policy 100 级为100的密钥交换策略
encr 3des 3DES加密
authentication pre-share 享密钥认证
group 2
//采用DH
//采用预共
//
采
用
//建立优先
组2的密钥交换算法
crypto isak
//建立预共享密钥,必须和总部的配置一致
//
建
立
crypto ipsec transform-set tl esp-3des esp-sha-hmac
IPSec转换集,使用ESP协议,采用3DES算法加密,SHA算法认证,并使用隧道模式
crypto map zbvpn 100 ipsec-isakmp
//建立优先
级为100的加密策略,使用ISAKMP自动生成SA,策略名为zbvpn
set 口地址
set transform-set tl 为tl的转换集和IPSec参数
match address zb 分公司到总部的流量
interface FastEthernet0/0 crypto map zbvpn 略应用到接口
ip access-list extended zb
//定义铜陵分公司到总部的流量
//将加密策
//匹配铜陵
//使用名称
//设定总部的路由器的公网
其他分公司的配置与此类似,就不再重复了。 下面再来看看IPSec VPN建立的过程:
当有总部访问各分公司数据流量到达这个接口时,就根据加密映射的策略进行判断。例如目标地址在铜陵分公司的地址段内,首先和优先级是10的策略进行比较,就会发现和优先级10的策略中定义的地址段不相符,那么就会忽略优先级10的加密策略;然后再和优先级是20的加密策略比较,这时发现要访问的目标地址和优先级20定义的地址段正好匹配,那么就开始和优先级20中定义的对端地址进行先进行阶段一的协商,包括密钥的交换,对等体的认证,完整性算法等参数,协商成功后再进行阶段二的协商,包括采用哪种协议进行封装、是否使用加密和认证,然后建立SA,成功后就建立了一条安全通道。那么总部到铜陵分公司的数据就可以通过互联网在这条安全通道内进行加密传送了。
2. 用路由器实现站点到站点的EZVPN
EZVPN有的也写作Easy VPN,顾名思义就是容易使用的VPN。它是Cisco开发的用于简化远程端配置和管理的一种基于IPSec VPN的实现,降低了VPN在实施过程中的复杂程度。EZVPN的结构由EZVPN的服务器端和若干远程的EZVPN客户端组成,服务器端是整个EZVPN网络的中心节点,它的主要的参数定义和配置都是在服务器端完成,而EZVPN的客户端只需要几条简单的命令就可以完成VPN的配置,所以在企业中,远程的分支机构不需要配备专业的IT技术人员就可以完成VPN的配置。
EZVPN的远程客户端支持三种操作模式,分别是客户端模式、网络扩展模式和网络扩展加模式。
客户端模式是默认的模式,它需要由作为EZVPN服务器端的路由器来分配地址,然后通过客户端路由器自动建立NAT/PAT转换来实现与服务器端的通讯;
网络扩展模式不需要由EZVPN服务器端路由器分配地址,这种方式下,客户端的网络被认为是一个完全可路由的网络,客户端路由器上也不会自动的建立NAT/PAT;
网络扩展模式加是对网络扩展模式的扩展,主要就是增加了能够通过MC和自动分配功能为回环接口请求IP地址的功能,EZVPN的远端会为这个接口自动创建IPSec SA。这个接口主要被用来排错(如用ping,Telnet或SSH);
下面仍以笔者单位为例来说明EZVPN的配置。笔者单位除了几个分公司以外,还有若干个改制单位和存续企业,也需要连接到笔者单位的网络中。这些改制单位和存续企业由于规模都较小,没有复杂的网络结构,因此在部分拥有固定公网IP的单位笔者就采用了EZVPN这种方式来实现。对EZVPN客户端的模式笔者统一采用网络扩展模式,并对各改制单位的地址进行了统一的规划。由于规模都不大,因此就采用改制单位采用Cisco1841路由器,拓扑结构如图二所示:
武汉总部59.175.234.100/27Internet改制单位219.140.195.54/30存续企业211.161.180.50/30192.168.1.0/24192.168.2.0/24图2
武汉总部EZVPN服务器端路由器的配置: ZB(config)#aaa new-model
//启用
aaa,用于授权EZVPN客户端访问网络
ZB(config)#aaa authorization network cjgs-remote local 授权的策略,策略名称为cjgs-remote,并使用本地的授权
ZB(config)#crypto isakmp policy 10
//定义
//建立
ISAKMP的策略,参数和前面的例子一致,这个策略用于分配给EZVPN远程客户端
ZB(config-isakmp)#encryption 3des ZB(config-isakmp)#authentication pre-share ZB(config-isakmp)#hash sha ZB(config-isakmp)#group 2
ZB(config)#crypto isakmp client configuration group cjgsezvpn
//定义
MC(模式配置)中需要“推”的组策略,组名为cjgsezvpn,这个策略是将要推
给客户端路由器的
ZB(config-isakmp-group)#key cjgsvpn IKE的预共享密钥
//定义要推给客户端的DNS服务器地址
//定义
ZB(config-isakmp-group)#exit
ZB(config)#crypto ipsec transform-set cjgsvpnset esp-3des esp-sha-hmac //定义转换集和IPSec参数
ZB(config)#crypto dynamic-map cjgsdynavpn 10
//使用
RRI建立动态加密映射,映射名称为cjgsdynavpn,优先级为10,RRI(Reverse Route Injection逆向路由注入),目的是在服务器端的路由器上为每个客户端路由器的IP地址动态建立一条静态路由,并加入到路由表中
ZB(config-crypto-map)#set transform-set cjgsvpnset 定的转换集应用到动态加密映射中
ZB(config-crypto-map)#reverse-route RRI
ZB(config)#crypto map cjgsmap client configuration address respond 加密映射响应客户端的请求,加密映射的名称为cjgsmap
ZB(config)#crypto map cjgsmap 10 ipsec-isakmp dynamic cjgsdynavpn //
将//配置
//启用
//将指
RRI建立的动态加密映射应用到名称为cjgsmap的加密映射中去,并使用ISAKMP策略自动建立SA,优先级为10
ZB(config)#crypto map cjgsmap isakmp authorization list cjgs-remote 前面建立的cjgs-remote本地授权策略使客户端能够有权限访问网络
ZB(config)#int fa0/0
//把加//使用
ZB(config-if)#crypto map cjgsmap 密映射应用到外部接口
EZVPN服务器端路由器的配置基本完成,但是在实际使用时还会碰到问题。因为那些改制单位都是在路由器上建立了NAT,使内部的用户能够访问互联网,但在和笔者单位建立了VPN后,所有的流量到进入到VPN的隧道中去了,造成互联网的访问中断,对这种情况的解决方案就是配置隧道分离,使得只有访问武
汉总部的流量进入隧道,其它的流量进行NAT转换。配置如下:
ZB(config)#ip access-list ext tovpn 需要进入到VPN隧道的访问列表
//将武汉总部的地址段加入到列表中,表明只允许访问武汉
//建立
总部的网络
ZB(config-ext-nacl)#exit
ZB(config)#crypto isakmp client configuration group cjgsezvpn ZB(config-isakmp-group)#acl tovpn
//在推
给用户的组策略中加入隧道分离,只允许到武汉总部的网络进入隧道
如果武汉总部的路由器上做了NAT,就需要在NAT的控制中将改制单位和存续企业的IP地址段加入到访问控制列表中,避免总部访问到这些地方的流量也做NAT转换。
EZVPN服务器端路由器的配置完成,下面再来看看客户端路由器的配置,客户端路由器的配置就要简单得多了,只需要配置客户端路由器的策略并应用到接口就可以了:
GZ(config)#crypto ipsec client ezvpn gzvpn
//在改
制单位的路由器上建立EZVPN客户端的策略,名称为gzvpn
GZ(config-crypto-ezvpn)#group cjgsezvpn key cjgsvpn
//定义
服务器端路由器组策略的名称,预共享密钥,这些参数需要和服务器端路由器的设置对应
//指定服务器端路由器公网接口的地址
//定义
GZ(config-crypto-ezvpn)#mode network-extension 客户端的使用模式,这里采用的是网络扩展模式
GZ(config-crypto-ezvpn)#connect auto 客户端自动连接
GZ(config)#int fa0/0
//配置
//把策
略应用到接口上,在应用策略时要注意客户端路由器的EZVPN接口分内部接口和外部接口,公网接口为外部接口,局域网的接口为内部接口,两个接口都要进行配置,否则EZVPN无法建立
GZ(config-if)#crypto ipsec client ezvpn gzvpn 到外部接口
GZ(config)#int fa0/1
//应用
GZ(config-if)#crypto ipsec client ezvpn gzvpn inside 到内部接口
//应用
客户端路由器的配置完成,很快IPSec VPN隧道就自动的建立起来了,经过测试,改制单位到互联网的访问和到武汉总部的访问均不受影响。在服务器端路由器上用sh ip route命令能够发现自动的添加了一条到该改制单位的静态路由,如果有多个改制单位连接进来,就会增加多条静态路由。其它的改制单位和存续企业配置与此完全一样,可见在客户端的配置真的是非常简单的。
3. 用路由器实现到动态地址的DMVPN
在笔者实施这次VPN的时候,由于有的改制单位使用的是ADSL拨号的方式接入到互联网的,因此笔者在这些地方又尝试了固定地址到动态地址的DMVPN的配置。
DMVPN是Cisco推出的动态多点VPN,是为了适应不断扩展的小型分支机构和总部之间的连接而设计的一种技术。多点的意思就是在总部只有一个点,但可以针对多个分支机构建立IPSec VPN连接,动态的意思就是分支机构的IP地址是不确定的,没有固定的IP地址。DMVPN结合GRE(通用路由封装)、NHRP(下一条地址解析协议)以及IPSec技术实现,可以承载路由协议,因而可以构建一个全网互通的VPN网络。
在DMVPN技术里面,最重要的是要理解NHRP协议。在NHRP协议中,总部的路由器被配置为NHRP服务器,分支机构的路由器被配置为NHRP客户端,作为服务器的中心路由器需要维护一个包含所有客户端路由器公网地址的数据库,每个客户端的路由器在获得了公网的地址后,会向服务器端路由器发送NHRP的注册信息,注册信息中就包括了客户端路由器动态获得的IP地址,这样服务器端的路由器就可以和客户端的路由器建立起VPN的连接了。而客户端的路由器之间需要通讯时,也可以通过作为NHRP服务器端的路由器查询到其他客户端的IP地址,从而两个客户端的路由器之间也可以动态的建立IPSec隧
道了。
下面看看笔者单位和各改制单位的网络,和前面的EZVPN的拓扑其实是一样的,如图三所示:
172.19.63.64/26武汉总部59.175.234.100/27Internet改制单位PPPOE动态地址改制单位PPPOE动态地址192.168.1.0/24192.168.2.0/24图3
图中武汉总部的路由器就充当了NHRP服务器的角色,而改制单位的路由器就是客户端了。具体配置如下:
总部路由器的配置。
首先还是配置统一的ISAKMP的策略: ZB(config)#crypto isakmp policy 10
//建立
ISAKMP策略,优先级为10,其它的参数与前面的一样
ZB(config-isakmp)#encryption 3des ZB(config-isakmp)#authentication pre-share
ZB(config-isakmp)#group 2 ZB(config-isakmp)#hash sha ZB(config-isakmp)#exit
ZB(config)#crypto isakmp key cjgsvpn address 0.0.0.0
//建立
预共享密钥在指定对端的地址时与前面不同,由于改制单位的IP地址是动态的,因此在这里就不能明确的指定对端的IP地址
ZB(config)#crypto ipsec transform-set cjgs_vpnset esp-3des esp-sha-hmac //转换集的参数也和前面的一样
ZB(cfg-crypto-trans)#mode transport
//在这
里使用了传输模式是由于要使用GRE封装,因此就没有必要再使用隧道模式
ZB(config)#crypto ipsec profile cjgs-vpnpro 名称为cjgs-vpnpro的配置文件
ZB(ipsec-profile)#set transform-set cjgs_vpnset 变换集
下面是配置DMVPN的关键部分。 ZB(config)#int t0
//建立
//指定
//建立
隧道接口,接口名称为Tunnel0
ZB(config-if)#ip 0
//给隧道接口配置IP地址
//配置
ZB(config-if)#ip nhrp authentication cjgs
NHRP的认证字符串,只有认证字符串相同的才能够互相通信
ZB(config-if)#ip nhrp map multicast dynamic
//允许
NHRP服务器端路由器能够动态添加客户端路由器到多点NHRP映射
ZB(config-if)#ip nhrp network-id 10
//
为
NBMA(非广播多路访问)网络指定一个网络标识符
ZB(config-if)#tunnel source fa0/0 隧道接口的源地址
ZB(config-if)#tunnel key 100 隧道接口的密钥
ZB(config-if)#tunnel mode gre multipoint
//将隧
//指定
//指定
道接口配置成mGRE(多点GRE)隧道模式
ZB(config-if)#tunnel protection ipsec profile cjgs-vpnpro 道接口和IPSec配置文件关联起来
ZB(config-if)#ip ospf network broadcast
//在笔
//将隧
者单位使用的OSPF路由协议,由于这里是一个NBMA的网络,因此需要将接口配置成广播型的网络
最后根据需要配置好相应的路由协议就可以了。 再看改制单位的配置。
改制单位的路由器作为NHRP的客户端路由器,在ISAKMP策略和转换集的配置上和总部的配置是一样的。
GZ1(config)#crypto isakmp policy 10 GZ1(config-isakmp)#encr 3des GZ1(config-isakmp)#authen pre GZ1(config-isakmp)#hash sh GZ1(config-isakmp)#group 2
GZ1(config)#crypto isakmp key cjgsvpn add 0.0.0.0 预共享密钥和对端地址
GZ1(config)#crypto ipsec transform-set cjgs_vpnset esp-3 esp-sha-hmac //建立转换集
GZ1(cfg-crypto-trans)#mode tran 传输模式
GZ1(config)#crypto ipsec profile cjgs-vpnpro 名称为cjgs-vpnpro的IPSec配置文件
GZ1(ipsec-profile)#set transform-set cjgs_vpnset GZ1(ipsec-profile)#exit
配置隧道接口和NHRP客户端: GZ1(config)#int t0 隧道接口
GZ1(config-if)#ip 0
//配置隧道接口的IP地址
//建立
//建立
//使用
//配置
GZ1(config-if)#ip nhrp authentication cjgs NHRP的验证字符串,和总部的要一致
//配置
//在总部和改制单位使用动态路由协议,告诉客户端路由
器发送组播数据包到服务器端的路由器
关系
GZ1(config-if)#ip nhrp network-id 10
//
为
//建立服务器端路由器的隧道接口的地址和公网地址的映射
NBMA网络指定网络标识符,和总部的路由器保持一致
//指定NHRP服务器的地址,即总部路由器
隧道接口的地址
GZ1(config-if)#tunnel sour fa0/0 隧道接口的源地址
GZ1(config-if)#tunnel mode gre multipoint 道接口配置为多点GRE模式
GZ1(config-if)#tunnel key 100
//隧道
//将隧
//指定
接口的密钥,必须与总部的保持一致
GZ1(config-if)#tunnel protection ipsec profile cjgs-vpnpro IPSec配置文件和隧道接口关联
GZ1(config-if)#ip ospf net br 口配置成广播型
最后再配置好相应的路由协议,这样就完成了一个改制单位的配置,其余的改制单位与此类似。全部配置完成后,可以在路由器上使用sh ip nhrp命令查看NHRP的缓存,在该命令的输出中就可以看到各个路由器的注册信息。这样不仅实现了改制单位与总部之间的通信,同时也实现了改制单位之间的通信。至于是否需要改制单位之间通信可以根据需要来进行进一步的设置。
//将接
//
将
4. 路由器到防火墙之间的IPSec VPN
以上笔者做的都是同种设备之间建立IPSec VPN互联,不同类型的设备只要是遵循IPSec VPN的标准一样可以进行互联。如Cisco的路由器和Cisco的
PIX/ASA防火墙,在配置上与路由器的VPN的配置命令大同小异,下面看看实例。一个改制单位配置的是Cisco的ASA5505的防火墙,需要和总部建立VPN连接,下面是在防火墙上具体的配置:
gz(config)# crypto isakmp policy 10 密钥交换的策略,优先级为10
gz(config-isakmp-policy)# encryption 3des 3DES的加密算法
gz(config-isakmp-policy)# authentication pre-share 预共享密钥验证对等体
gz(config-isakmp-policy)# hash sha SHA的散列算法
gz(config-isakmp-policy)# group 2 DH协议组2的密钥交换算法
gz(config-isakmp-policy)# exit
//设置预共享密钥
//配置
//使用
//使用
//使用
//使用
//建立
gz(config)# crypto ipsec transform-set cjgsset esp-3des esp-sha-hmac
IPSec转换集,使用ESP协议,3DES算法加密,SHA算法认证,隧道模式
//定义感兴趣的流量
//定义
gz(config)# crypto map vpn 10 ipsec-isakmp
加密映射,采用ISAKMP策略自动建立SA,加密映射的名称为VPN
gz(config)# crypto map vpn 10 match address permitvpn 映射匹配的地址
//定义对端的地址,即总部路由器的公网口的地址
//引用
//加密
gz(config)# crypto map vpn 10 set transform-set cjgsset 定义的转换集
gz(config)# crypto map vpn interface outside 密映射应用到防火墙的外部接口
gz(config)# crypto isakmp enable outside 的外部接口上允许密钥交换的策略
//将加
//在防火墙
通过以上的配置命令,可以发现这些命令与路由器上的非常类似,只是在写法的格式上稍有不同而已。路由器端的配置和前面的Site to Site的VPN的配置完全一样,省略。
5. 不同厂家之间的IPSec VPN
以上这些都是同一品牌的设备,它们之间的互通当然要好实现一些,可是在实际的项目中各个单位并没有都使用Cisco的设备,那么不同的厂家的设备之间建立IPSec VPN能够通讯吗?其实只要各个厂家都遵循标准的IPSec协议,在加上用户对IPSec VPN理解透彻的话,一样能够实现互通,只不过稍微麻烦一点而已。笔者就在NetScreen的NS25防火墙和Cisco的ASA5505防火墙之间就实现了IPSec VPN互通。网络拓扑如图四所示:
图4
ASA5505防火墙的配置与前面的一样,配置结果如下: ASA(config)# crypto isakmp policy 10
ASA(config-isakmp-policy)# encryption 3des
ASA(config-isakmp-policy)# authentication pre-share ASA(config-isakmp-policy)# hash md5 ASA(config-isakmp-policy)# group 2 ASA(config-isakmp-policy)# exit
ASA(config)# crypto isakmp key cjgsvpn add 59.
ASA(config)# crypto ipsec transform-set cjgsset esp-3des esp-md5-hmac ASA(config)# access-list permitvpn permit ip 1128 ASA(config)# crypto map vpn 10 ipsec-isakmp
ASA(config)# crypto map vpn 10 match address permitvpn ASA(config)# crypto map vpn 10 set peer 59.
ASA(config)# crypto map vpn 10 set transform-set cjgsset ASA(config)# crypto map vpn interface outside ASA(config)# crypto isakmp enable outside
再看看NS25上的配置。在NS25上是采用图形界面完成的IPSec VPN的配
置,具体过程如下:
第一步:在NS25上建立两个地址本,分别代表本地的地址和需要访问的地址,其实就是定义感兴趣的流量的地址,总部的地址段定义在Untrust区域,改制单位的定义在Trust区域,在左边菜单上依次选择Objects-〉Addresses-〉List
如图五所示:
图5总部的地址段
然后再建立改制单位的地址段,如图六所示:
图6改制单位的地址段
第二步,确定要使用的第一阶段和第二阶段的策略。在NS25中已经预定义了第一阶段和第二阶段的各种参数的组合,如图七所示,在菜单中依次选择VPNs-〉AutoKey Advanced-〉P1 Prosal
图7阶段一的参数
图中的pre-g2-3des-md5代表使用预共享密钥认证,DH协议组2的密钥交换算法,3des加密算法,md5的完整性算法,这是将要使用的阶段一的参数。
阶段二的策略如图八所示,在菜单上依次选择VPNs-〉AutoKey Advanced-〉P2 Prosal
图8阶段二的参数
图中nopfs-esp-3des-md5代表不使用pfs功能,使用ESP协议封装,使用3des加密和md5认证。
第三步,开始VPN阶段一的配置。在菜单上依次选择VPNs-〉AutoKey Advanced-〉Gateway-〉New,如图九所示:
图9阶段一的参数
Gateway Name中输入阶段一的策略的名字:vpn1;
Remote Gateway Type中选择Static IP Address,并输入总部的防火墙的外部接口的地址;
Preshared Key输入预共享密钥:cjgsset;
Outgoing Interface中选择ethernet3,即改制单位防火墙的公网接口; 在本页面中选择Advanced按钮,如图十所示:
图10阶段一的参数
在Phase 1 Proposal中选择阶段一的密钥交换策略,由于武汉总部是固定的公网IP地址,在Mode要选择Main。
然后再单击页面上的Return按钮,返回到上一级配置页面,并单击OK按钮,完成了阶段一的配置。
第四步:开始阶段二的配置。在菜单上依次选择VPNs-〉AutoKey IKE-〉NEW,新建一个阶段2的策略,如图十一所示:
图11阶段二的参数
VPN Name给阶段二的策略命名:vpn;
Remote Gateway选择预定义,并在下拉列表中选择刚才定义的阶段一的策略的名称vpn1。
单击本页面的Advanced按钮,如图十二所示:
图12阶段二的参数
选择阶段二的策略,然后单击Return,返回上一级页面后,再单击OK,完成了阶段二的配置。
第五步:新建一条Trust到Untrust的策略,如图十三所示,
图13新建策略
Source Address选择先前定义的改制单位的地址本; Destination Address选择先前定义的总部的地址本; Action下拉列表中选择Tunnel;
Tunnel VPN下拉列表中选择阶段二建立的策略的名称,并勾选相应的选项。其中除了Logging选项可选可不选外,图中另外两项最好都选上,一条是自动建立一条反向的VPN策略,另外一条是将策略放置在所有策略的顶部,这一点非常重要,因为策略是按顺序执行的,如果不放在顶部,很有可能就执行了别的策略,从而导致永远不执行这条VPN策略,这样IPSec VPN就永远建立不起来了。
确定之后就完成了整个配置。
在NS25的日志中看看VPN建立的过程,如图十四所示:
图14VPN建立的过程
建立后在ASA上查看VPN的状态,如图十五所示:
图15 ASA5505防火墙VPN会话
从武汉总部ping改制单位的计算机,如图十六所示:
图16 ping改制单位计算机
这样在改制单位与总部之间建立了IPSec VPN通道,实现了不同厂商产品之间的VPN互通。
从笔者以上的应用来看,IPSec VPN的应用很灵活,可以针对不同的应用场合使用不同的IPSec VPN技术,如何使用就需要根据应用需求、设备的投入和维护的成本等方面综合考虑来进行取舍。如笔者单位和改制单位之间最后使用最多的是防火墙之间建立的IPSec VPN,兼顾了改制单位本身的网络安全防护的需求和建立IPSec VPN的要求,使改制单位的应用成本和维护成本都降至比较的水平。
IPSec VPN技术已推出很长时间了,技术上也比较的成熟,各个网络厂商也都有支持IPSec VPN技术的路由器、防火墙、安全网关等产品,只要产品遵循标准的IPSec VPN框架,都可以实现互通,极大的方便了用户,也使得用户不必拘泥于一家的产品而被束缚了手脚。虽然目前各个厂家也都在着力推广SSL VPN技术,但就实际应用效果来看,还具有很多局限性,因此IPSec VPN以它的成熟、便利、低廉的投入和安全性在很长一段时间内还将继续存在,成为企业总部和各分支机构、移动用户之间进行互连的主要选择。
因篇幅问题不能全部显示,请点此查看更多更全内容