前一篇文章中讨论了IPsec协议和基本的IPsec VPN连接模型。现在我们将学习如何使用IKE实现ISAKMP协议来保证安全的VPN配置。 部署一个使用IPsec的IOS路由器要从配置ISAKMP策略和路由器的ISAKMP认证密钥数据开始。如果路由器仅仅与Site-to-Site拓扑中的另外一个路由器相连,那么ISAKMP配置就完成了。
然而,如果路由器也要支持Client-to-Site,就还需要一个额外的IKE模式配置。在我们进行ISAKMP策略配置之前,我们先看一些安全性技巧: 对于初学者,IOS可交换地在配置模型和EXEC模型中使用ISAKMP和IKE。记住IKE是一个支持ISAKMP……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
前一篇文章中讨论了IPsec协议和基本的IPsec VPN连接模型。现在我们将学习如何使用IKE实现ISAKMP协议来保证安全的VPN配置。
部署一个使用IPsec的IOS路由器要从配置ISAKMP策略和路由器的ISAKMP认证密钥数据开始。如果路由器仅仅与Site-to-Site拓扑中的另外一个路由器相连,那么ISAKMP配置就完成了。然而,如果路由器也要支持Client-to-Site,就还需要一个额外的IKE模式配置。在我们进行ISAKMP策略配置之前,我们先看一些安全性技巧:
- 对于初学者,IOS可交换地在配置模型和EXEC模型中使用ISAKMP和IKE。记住IKE是一个支持ISAKMP的协议——ISAKMP是规则,IKE执行规则。
- IKE监听500端口,使用UDP来协商发送和接收报文。如果你在VPN路由器前部署了一个防火墙,或者你正在尝试建立一个穿越防火墙的IPsec客户端连接,这就可能出现问题。而且除非你使用UDP的500端口,否则传统的IKE将不能正常工作。
- IKE不像Network Address Translation (NAT)。当两个IPsec节点之间使用NAT时,基于IP地址绑定的预共享密钥认证将无法工作。NAT转换修改了源地址和目标地址,结果会造成密钥与发送或接收主机的不匹配。在大多数基于有状态的防火墙使用的Port Address Translation (PAT)也会破坏IPsec连接。然而,IOS的后续版本将使用IPsec Nat透明及Cisco 通道控制协议 (cTCP)解决IPsec和NAT/PAT之间的操作问题。这两种解决方案都在IKE协商阶段中使用。NAT透明在IKE第一阶段增加了一个NAT发现阶段原件以及在第二阶段增加了一个NAT穿越工具。操作上,IPsec NAT透明将IKE移到UDP端口4500,而且在需要时将IPsec数据包封装到UDP帧中。
虽然NAT透明解决了一些问题,但它不能解决所有问题。即使有NAT透明,IPsec客户端连接也不能在有严格防火墙规则的环境中工作。如果在1024之上的UDP端口访问对原始连接关闭,客户端就不能与网关建立连接。为了解决这种环境的问题,Cisco开发了通道控制协议(Tunnel Control Protocol,cTCP)。cTCP接管NAT透明所不能解决的工作,为IKE和ESP数据包提供了TCP封装。通过cTCP的配置,IPsec网关和客户端就能够使用具体的TCP服务端口发送IPsec数据。这使得通过TCP端口80或443发送IPsec数据成为可能。这也使得我们能够更容易地打开只允许有限的网络服务穿越的网络环境中的IPsec客户端连接。
NAT透明默认是激活的,并且它也被整合成为支持这个功能的IOS版本的IKE协商过程的一部分。Cisco通道控制协议需要经过配置,它也是路由器全局加密策略的一部分。下面我们将学习将cTCP配置成为IKE模式配置的一部分的方法。
配置一个ISAKMP策略
接下来让我们看看配置一个ISAKMP策略的各个细节。我们从最基本步骤开始:激活路由器上的ISAKMP(和IKE):
outlan-rt02(config)#crypto isakmp enable outlan-rt02(config)# Oct 13 15:09:27 EST: %CRYPTO-6-ISAKMP_ON_OFF: ISAKMP is ON outlan-rt02(config)# |
一旦ISAKMP被激活,我们需要为每一个策略实体定义五个策略参数。如果没有定义策略,一个使用所有默认值的策略将会被使用。当创建一个策略时,如果没有显式定义策略参数,默认的参数将会被使用。策略的参数及其默认值如下:
1. IKE策略加密,默认值为数据加密标准(Data Encryption Standard,DES)
2. IKE策略哈希,默认值为Secure Hash Standard-1 (SHA-1)
3. IKE密钥交换,默认值为Diffie-Hellman Group 1 (768-Bit)
4. IKE寿命,默认值为一天(86,400秒)
5. IKE认证方式,默认值为RSA公钥
你可能已经知道节点是需要与一个通用ISAKMP策略协商,以建立一个IPsec节点联系。所以根据你想要连接的设备,你可能需要多个ISAKMP策略。每一个ISAKMP策略被赋于一个唯一的1到10,000之间的优先级数。优先级数为1的策略被认为是最高优先级的策略。策略协商从策略数最接近于1的开始。通常的做法是从策略数为10的开始创建,这样做的话当你需要往生产环境的路由器中插入一个优先级更高的策略时,你才有位置可以用。
另一个关于ISAKMP策略优先级数的技巧与用于支持IPsec客户端的ISAKMP策略有关。支持IPsec客户端连接的ISAKMP策略有两个策略组件:ISAKMP策略和IKE模式配置策略。如果路由器准备支持IPsec网关和IPsec客户端之间的节点关系,这种支持“客户端”的ISAKMP策略应该有最低的优先级。这样就可以避免网关到网关请求用户名和密码信息的IKE协商。(在IOS的后续版本中,可以通过在一个预共享密钥定义末尾添加no-xauth来覆载)。现在,让我们继续创建一个策略:
outlan-rt02(config)#crypto isakmp policy 10 |
我们需要定义的第一个参数是加密算法。IOS支持两种加密算法:Data Encryption Algorithm (DEA) 和 Rijndael。Data Encryption Standard (DES) 和 Triple DES (3DES)标准是基于DEA的。DES和3DES是块分组密码,它们使用一个经过56位密钥加密的64位的块。这二者之间的区别是3DES会对每一个数据块运行三次加密过程,而DES只运行一次。
Advanced Encryption Standard (AES)是基于Rijndael算法的块分组密码。AES使用一个128位块大小,以及三个密钥大小选择:126位、192位或256位。DES和3DES是旧方法,但他们都是被各种Cisco路由器平台广泛支持的,不管是在路由器逻辑板还是通过使用一个加密适配器。在一个只使用一个软件加密引擎的路由器上使用3DES是非常消耗计算资源的,并且不容易升级到多通道。IOS的后续版本是支持AES的,其中也包括了基于硬件的加密选项。AES比3DES更安全且更加高效。在软件中有限的使用AES实现是可能实现的。通常的做法是使用DES或3DES,但如果可能,就使用AES-256。
outlan-rt02(config-isakmp)#encryption 3des |
下一步是定义ISAKMP哈希算法。IOS支持两种哈希协议:消息摘要算法5(Message-Digest Algorithm 5,MD5)和安全哈希算法(Secure Hash Algorithm)。MD5是一个单向哈希算法,它生成一个128位的哈希。SHA-1是公认的比这两个算法更新的算法,而这两个算法也的确有些过时了。可以期待的是IOS的后续版本将支持SHA-2,这是一个更加安全的算法,它支持4种不同的哈希长度(224、256、384和512位)。
outlan-rt02(config-isakmp)#hash sha |
下面我们来定义Diffie-Hellman (DH)使用的模数。原始的RFC定义值为2;DH组1使用一个768位的模数,DH组2使用一个1024位的模数。这个数值越大,密钥就更加随机,也就更加安全了。IOS支持组1、组2和组5的DH。DH组5使用一个1536位的模数。通常的做法是使用组2,因为组5并没有在所有的IOS版本中支持,并且它也不被Cisco VPN客户端支持。另外一个需要注意的是,模数越长,CPU用来生成密钥的时间也越长。在一些较低端的路由器上,使用一个较短的DH模数更好一些。
outlan-rt02(config-isakmp)#group 2 |
由于还没有SA算法参数,我们需要定义SA的寿命。对于SA寿命,我们从几个方面来考虑。当一个SA过期时,一个新的SA和新的SPI就被生成或被删除。SA寿命越短就越安全。此外,SA寿命越短,路由器崩溃后的恢复和重新加载速度就越快。如果一个节点停掉了,其它节点就会启动,在一些实例中,新的SA将等到之前的SA过期后才会建立。对于支持上百个通道的网关路由器是特别明显的现象。设置一个保持活跃的ISAKMP可以大大消除这个问题,但却往往被忽略。另一方面,更长的SA寿命需要ISAKMP处理负载更小。而在不同路由器平台上,ISAKMP协商通常不是一个太大的处理负担,这样一个短的SA寿命可以用在大量节点关系的路由器上。
outlan-rt02(config-isakmp)#lifetime 300 |
在一个Site-to-Site的路由器配置中,我们需要定义的最后一个ISAKMP参数是认证参数。IOS支持3种认证:RSA签名、RSA现时标记和预共享密钥。使用RSA签名认证要配置路由器使用X.509基于证书的认证。这是最安全的方式,但它需要部署和管理一个证书制授权服务器。因为它有这个额外需求,这是一个最少用的方法。更多关于RSA签名的信息可以查询Cisco的网站。
RSA现时标记同样可以使用,一个RSA现时标记是一个由IKE发起者产生的随机数,并用接收者的公钥加密。使用RSA现时标记的好处是它们非常安全;而且它们不需要证书服务器。但是其缺点是节点需要拥有与其通信的所有节点的公钥。这意味着使用这个方法会出现大量的工作量。
最后一个是预共享密钥。预共享密钥是用于同时支持Site-to-Site和Client-to-Site VPN的。虽然预共享的密钥是最不安全的方法,但它们却是最常用于网关节点的认证。这是因为它们速度快并且容易设置,而且通过适当的安全性配置,在主机之间使用一个通用密钥的风险会很小。在一个IPsec客户端配置中,预共享密钥是用IKE Extended Authentication(Xauth)来管理的,这是一个使用一个用户密码加组密码的二元认证方法。组密码功能上是作为预共享密钥使用的,它是一个所有客户端和网关使用的公用值,而用户密码是唯一用于具体用户的。
我们将在后面更深入地看看如何为网关和客户端配置RSA现时标记和共享密钥配置。让我们先举例说明预共享密钥的配置方法,下面是标准的配置:
outlan-rt02(config-isakmp)#authentication pre-share We are done with our ISAKMP configuration. Here is what our policy statement looks like: crypto isakmp policy 10 encr 3des hash sha lifetime 300 authentication pre-share group 2 ! crypto isakmp keepalive 20 5 crypto isakmp nat keepalive 30 |
注意除了我们的ISAKMP策略,这里多了两个keepalive语句。这是必须作为全局加密配置命令而增加的,因为默认的IOS加密配置把keepalive服务禁用了。ISAKMP的keepalive是通过全局配置命令<crypto isakmp keepalive {10-3600 sec}{2-20 sec}>配置的。当ISAKMP的keepalive激活后,路由器会每隔10到3600秒发送Dead Peer Detection (DPD)消息。如果没有收到DPD的响应,路由器就会以更高频率地发送DPD消息——在2到60秒之间。如果节点路由器在高频探测激活后还不能响应,发送消息的路由器会删除这个节点的SA。<crypro isakmp nat keepalive {5-3600}>命令就是在路由器支持IPsec客户端连接时使用的。如果没有收到从客户端发来的流量,一个keepalive数据包会在间隔时间到达前而流量没有发出时被发送出去。
IKE模式配置
关于IPsec客户端支持,我们来接着看IKE模式配置安装。为了支持Client-to-Site的IPsec配置,客户端要求有一个安全的IP身份。然后IPsec客户端的IP地址将被用于所有与其他由IPsec网关保护的安全主机的IP通信。IP地址分配,以及其他全部的客户端配置参数(如域名、子网掩码、DNS服务器)都定义在IKE模式策略中。IKE客户端配置依赖于ISAKMP策略定义。
outlan-rt04#config t Enter configuration commands, one per line. End with CNTL/Z. outlan-rt04(config)#crypto isakmp policy 1000 outlan-rt04(config-isakmp)# encr 3des outlan-rt04(config-isakmp)# hash md5 outlan-rt04(config-isakmp)# authentication pre-share outlan-rt04(config-isakmp)# group 2 outlan-rt04(config-isakmp)#exit outlan-rt04(config)# |
IKE模式配置有三个部分。第一部分是ISAKMP客户端组。这是使用命令<crypto isakmp client configuration group {group name}>创建的。这个命令定义了大多数的客户端配置和组策略信息,这些信息是用于支持IPsec客户端连接的。第二部分是一个客户端IP地址池的创建,IP地址是客户端配置组分配IP给客户端的地方。它是通过使用全局配置命令<ip local pool {pool-name} {start-ip} {end-ip}>来创建的。最后一部分是半隧道的客户端访问策略访问控制列表(ACL)。ACL定义了可以通过IPsec客户端IP接口访问的网络。如果没有定义ACL,客户端会使用一个catch-all访问策略,它表示所有网络都应该通过IPsec客户端IP接口访问。半隧道的意思是一个IPsec客户主机可能想要通过一个“非安全”的环境访问一些IP节点,而其它的客户主机则通过一个“安全的”环境访问。这个方法的好处是通过激活半隧道,用户可以同时访问本地LAN设备和因特网,比如,使用客户端的LAN接口访问LAN服务,而不需要通过IPsec VPN网关。而它的缺点是当VPN客户端激活时,主机是同时连接到非安全和安全网络的。这会带来安全资源暴露的风险。ISAKMP客户端组需要五个必要的参数来正确工作。除了基本的配置参数外,客户端组策略还可以定义许多客户端条件参数,但这根据你的IOS版本不同而有所不同。我们将在后面的Client-to-Site拓扑配置中讨论这些附加的属性。下面是客户端组定义使用的五个基本参数:
outlan-rt04(config)#crypto isakmp client configuration group outlan-ras outlan-rt04(config-isakmp-group)# key outlan-ras outlan-rt04(config-isakmp-group)# dns 172.30.40.2 outlan-rt04(config-isakmp-group)# domain outlan-ras.net outlan-rt04(config-isakmp-group)# pool outlan-ras outlan-rt04(config-isakmp-group)# acl outlan-ras-networks outlan-rt04(config-isakmp-group)#exit outlan-rt04(config)# crypto isakmp client configuration group outlan-ras key outlan-ras dns 172.30.40.2 domain outlan-ras.net pool outlan-ras acl outlan-ras-networks |
一旦客户端组定义完成后,我们就需要创建IP地址池:
outlan-rt04(config)#ip local pool outlan-ras 172.30.99.10 172.30.99.100 The final step is the client access policy ACL: outlan-rt04(config)#ip access-list extended outlan-ras-networks outlan-rt04(config-ext-nacl)# permit ip 172.30.40.0 0.0.0.255 172.30.99.0 0.0.0.255 |
技术上说我们的ISAKMP VPN客户端支持配置已经完成了。然而,如果我们想要扩展我们的VPN客户端以支持连接到其它安全的主机上,我们需要配置Cisco Tunnel Control Protocol。NAT透明默认是激活的,所以激活cTCP要求更多的全局加密配置命令<cyrpto ctcp port {(listener port 1-65535), port, port}>。这个命令的端口设置是可选的,可以设置一个端口或都不设置或者设置一个监听端口列表。如果没有设置端口,cTCP会监听端口10000。下面是监听HTTP、HTTPS和默认cTCP服务端口的cTCP配置:
outlan-rt04(config)#crypto ctcp port 443 80 10000 |
必须记住的一点是,当配置cTCP时,如果路由器正在运行着一个HTTP或HTTPS后台程序,IKE服务和HTTP/HTTPS服务是不能在同一个路由器接口运行的。下面是完成的ISAKMP客户端配置:
! crypto isakmp policy 1000 encr 3des hash md5 authentication pre-share group 2 crypto isakmp keepalive 20 5 crypto isakmp nat keepalive 30 ! crypto isakmp client configuration group outlan-ras key outlan-ras dns 172.30.40.2 domain outlan-ras.net pool outlan-ras acl outlan-ras-networks ! crypto ctcp port 443 80 10000 ! ip local pool outlan-ras 172.30.99.10 172.30.99.100 ! ip access-list extended outlan-ras-networks permit ip 172.30.40.0 0.0.0.255 172.30.99.0 0.0.0.255 |
这个过程的下一步就是生成和交换预共享的RSA密钥。
作者
Michael J. Martin作为网络和Unix信息管理员已经在信息技术领域工作了17多年。他早期在研究和ISP方面进行的设计、实现和支持MIS基础架构的经历,为他当前在大型因特网和安全架构的工作上提供了独特的视角。作为一个网络架构师,他已经为多家公司设计过高速、高可用的LAN/WAN网络,如ANS/AOL、Philips和Edgix Corporation等,它也给许多业务和区域ISP提供网络顾问服务。Michael也撰写了很多关于网络和安全问题的文章。
翻译
TechTarget中国特约技术编辑,某高校计算机科学专业教师和网络实验室负责人,曾任职某网络国际厂商,关注数据中心、开发运维、数据库及软件开发技术。有多本关于思科数据中心和虚拟化技术的译著,如《思科绿色数据中心建设与管理》和《基于IP的能源管理》等。
相关推荐
-
Ipsec VPN的网络拓扑
本文将分别介绍站点到站点的VPN配置,以及客户端到站点的VPN配置。在站点到站点的VPN配置中,每一个节点都会连接到一个分散的网络,这些网络是由其他……
-
IPsec VPN认证:生成和交换预共享密钥
前一篇文章中讨论了IPsec协议、VPN连接模型式以及使用IKE实现ISAKMP政策以保证VPN配置安全。IKE和ISAKMP配置的最后一步是认证密钥配置。