赞
踩
上回说到手工方式的IPSec VPN帮助天地会解决了总舵和分舵之间秘密通信的问题,但随着分舵数量的增加新的问题又出现了。手工方式下防火墙的加密和验证所使用的密钥都是手工配置的,为了保证IPSec VPN的长期安全,需要经常修改这些密钥。分舵数量越多,密钥的配置和修改工作量越大。随着天地会的壮大,IPSec VPN的维护管理工作越来越让人吃不消了。
为了降低IPSec VPN管理工作量,天地会总舵主再访高人寻求灵丹妙药。灵丹已练,妙药天成――原来IPSec协议框架中早就考虑了这个问题――智能的密钥管家IKE(Internet Key Exchange)协议可以帮助解决这个问题。
IKE综合了三大协议:ISAKMP(Internet Security Association and Key Management Protocol)、Oakley协议和SKEME协议。ISAKMP主要定义了IKE伙伴(IKE Peer)之间合作关系(IKE SA,跟IPSec SA类似)的建立过程。Oakley协议和SKEME协议的核心是DH(Diffie-Hellman)算法,主要用于在Internet上安全地分发密钥、验证身份,以保证数据传输的安全性。有了IKE加盟,IPSec VPN的安全和管理问题不再困扰天地会,各地分舵申请建立VPN的流程终于可以进入“实施”状态了。
IKE协议的终极目标是通过协商在总舵和分舵之间动态建立IPSec SA,并能够实时维护IPSec SA。为建立IPSec SA而进行的IKE协商工作是由ISAKMP报文来完成的,所以在部署IKE之前,强叔先领大家认识一下ISAKMP报文。ISAKMP报文封装如下:
IP报文头
UDP报文头
IKE协议使用端口号500发起协商、响应协商。在总舵和分舵都有固定IP地址时,这个端口在协商过程中保持不变。当总舵和分舵之间有NAT设备时(NAT穿越场景),IKE协议会有特殊处理(后续揭秘)。
ISAKMP报文头
说明:
1:IKE诞生以来,有过一次大的改进。老的IKE被称为IKEv1,改进后的IKE被称为IKEv2。二者可以看做是父子关系,血脉相承,基本功能不变;但青胜于蓝,后者有了长足的进步。
2:IKEv1版本中可以在交换类型字段查看协商模式,阶段1分为两种模式:主模式和野蛮模式,阶段2采用快速模式。主模式是主流技术,野蛮模式是为解决现实问题而产生的。IKEv2版本中定义了查看创建IKE SA和CHILD SA(对应IKEv1的IPSec SA)的IKE_SA_INIT、IKE_AUTH(创建第一对CHILD SA)、CREATE_CHILD_SA(创建后续的CHILD SA)。
IKEv1和IKEv2的精华之处正是本文的重点,各位看官莫急,容强叔一一道来。
IKE最适合于在总舵和众多分舵之间建立IPSec VPN的场景,分舵越多IKE的优势越能凸显。为了讲解方便,这里仅给出总舵和一个分舵之间建立IPSec VPN的组网图。
相比手工方式,IKE方式仅增加了两步:配置IKE安全提议和IKE对等体。IKE安全提议主要用于配置建立IKE SA用到的加密和验证算法。IKE对等体主要配置IKE版本、身份认证和交换模式。
配置项 | 网关A | 网关B |
IKE安全提议 | ike proposal 10 | ike proposal 10 |
IKE对等体 | ike peer b ike-proposal 10 undo version 2 //IKEv1 exchange-mode main//主模式(缺省) remote-address 2.2.3.2//对端发起IKE协商的地址 pre-shared-key tiandihui2 | ike peer a ike-proposal 10 undo version 2 //IKEv1 exchange-mode main//主模式(缺省) remote-address 1.1.1.1//对端发起IKE协商的地址 pre-shared-key tiandihui2 |
ACL | acl number 3001 rule 5 permit ip source 192.168.0.0 0.0.0.255 destination 172.16.2.0 0.0.0.255 | acl number 3000 rule 5 permit ip source 172.16.2.0 0.0.0.255 destination 192.168.0.0 0.0.0.255 |
IPSec安全提议 | ipsec proposal a transform esp encapsulation-mode tunnel esp authentication-algorithm md5 esp encryption-algorithm des | ipsec proposal a transform esp encapsulation-mode tunnel esp authentication-algorithm md5 esp encryption-algorithm des |
IPSec安全策略 | ipsec policy policy1 11 isakmp security acl 3001 proposal a ike-peer b | ipsec policy policy1 1 isakmp security acl 3000 proposal a ike-peer a |
应用IPSec安全策略 | interface GigabitEthernet0/0/1 ip address 1.1.1.1 255.255.255.0 ipsec policy policy1 | interface GigabitEthernet0/0/1 ip address 2.2.3.2 255.255.255.0 ipsec policy policy1 |
说明:两条红色命令表示本例采用了IKEv1版本主模式。缺省同时开启IKEv1和IKEv2,关闭IKEv2后采用IKEv1版本进行协商。
配置完成之后,总舵和分舵之间有互访数据流时即可触发建立IPSec VPN隧道,下面强叔通过抓包来为大家详解一下IKEv1的精妙之处。
IKEv1版本分两个阶段来完成动态建立IPSec SA的任务:
阶段1-建立IKE SA:阶段1采用主模式或野蛮模式协商。
阶段2-建立IPSec SA:阶段2此采用快速模式协商。
下面先介绍主模式+快速模式下的IPSec SA建立过程。
主模式下IKEv1采用3个步骤6条ISAKMP消息建立IKE SA。下面以网关A主动发起IKE协商为例进行讲解。
1. 协商IKE安全提议。
协商分两种情况:
二种情况下响应方都会在自己配置的IKE安全提议中寻找与发送方相匹配的IKE安全提议,如果没有匹配的安全提议则协商失败。IKE Peer双方安全提议匹配的原则为协商双方有相同的加密算法、认证算法、身份认证方法和DH组标识(不包括IKE SA生存周期)。
说明:通过IKEv1协议协商建立IPSec安全联盟时,采用本地生存周期和对端生存周期中较小的一个,不必保证隧道两端设备配置的生存周期相同(sa duration)。
通过抓包可以看出ISAKMP消息的SA载荷中携带用于协商的IKE安全提议。以消息1为例:
2. 使用DH算法交换密钥材料,并生成密钥。
网关A和B利用ISAKMP消息的Key Exchange和nonce载荷交换彼此的密钥材料。Key Exchange用于交换DH公开值,nonce用于传送临时随机数。由于DH算法中IKE Peer双方只交换密钥材料,并不交换真正的共享密钥,所以即使黑客窃取了DH值和临时值也无法计算出共享密钥,这一点正是DH算法的精髓所在。从抓包中可以看到IKE Peer双方交换密钥材料,以消息3为例:
密钥材料交换完成后,IKE Peer双方结合自身配置的身份验证方法各自开始复杂的密钥计算过程(预共享密钥或数字证书都会参与到密钥计算过程中),最终会产生三个密钥:
以上两个密钥保证了后续交换的ISAKMP消息的安全性!
整个密钥交换和计算过程在IKE SA超时时间的控制下以一定的周期进行自动刷新,避免了密钥长期不变带来的安全隐患。
3. 身份认证
IKE Peer通过两条ISAKMP消息(5、6)交换身份信息,进行身份认证。目前有两种身份认证技术比较常用:
以上身份信息都由SKEYID_e进行加密,所以在抓包中我们只能看到标识为“Encrypted”的ISAKMP消息,看不到消息的内容(身份信息)。以消息5为例:
预共享密钥是最简单、最常用的身份认证方法。这种方式下设备的身份信息可以用IP地址或名称(包括FQDN和USER-FQDN两种形式)来标识。当IKE Peer两端都有固定IP地址的时候,一般都用IP地址作为身份标识;当一端为动态获取IP地址的时候,没有固定IP地址的一端只能用名称来标识。本篇强叔给大家展示的案例为前者,后者晚些再讲。
这里有个小问题提醒大家关注:
总舵收到分舵1发来的身份信息后,需要用密钥(SKEYID_a和SKEYID_e)进行完整性验证和解密,只有先找到正确的预共享密钥才能计算出这两个密钥。但总舵网关为每个IKE Peer都配置了一个预共享密钥。怎么找呢?此时只能根据IKE Peer发来的ISAKMP报文的源IP地址(src)来查找预共享密钥,只要报文源地址与本端IKE Peer视图下remote-address命令配置的IP地址一致,就认为该视图下配置的pre-shared-key是分舵1的预共享密钥。
以上是IPSec协议内部处理过程,不需要大家操心。大家只要记住在IKE Peer两端都有固定IP地址的场景下,remote-address命令配置的IP地址要跟对端发起IKE协商的IP地址保持一致即可。这个IP地址的作用不仅仅是指定了隧道对端的IP地址,还参与了预共享密钥的查找。
阶段1协商完成后,进入阶段2。
在阶段2中IKEv1采用快速交换模式通过3条ISAKMP消息建立IPSec SA。由于快速交换模式使用IKEv1阶段1中生成的密钥SKEYID_e对ISAKMP消息进行加密,所以我们抓到的报文都是加密的,看不到载荷里面的具体内容。故下面只能文字介绍一下每一步的作用。
下面以网关A发起IPSec协商为例进行讲解。
1. 发起方发送IPSec安全提议、被保护的数据流(ACL)和密钥材料给响应方。
2. 响应方回应匹配的IPSec安全提议、被保护的数据流,同时双方生成用于IPSec SA的密钥。
IPSec对等体两端协商IPSec安全提议的过程跟协商IKE安全提议的过程类似,不再赘述。
IKEv1不协商ACL规则,建议两端设备配置的ACL规则互为镜像,避免IPSec SA协商失败。
IPSec对等体两端交换密钥材料(SKEYID_d、SPI和协议1、nonce等参数),然后各自进行密钥计算生成用于IPSec SA加密验证的密钥,这样可以保证每个IPSec SA都有自己独一无二的密钥。由于IPSec SA的密钥都是由SKEYID_d衍生的,一旦SKEYID_d泄露将可能导致IPSec VPN受到侵犯。为提升密钥管理的安全性,IKE提供了PFS(完美向前保密)功能。启用PFS后,在进行IPSec SA协商时会进行一次附加的DH交换,重新生成新的IPSec SA密钥,提高了IPSec SA的安全性。
说明:1、协议指AH和/或ESP协议。
3. 发起方发送确认结果。
协商完成后发送方开始发送IPSec(ESP)报文。
检查IPSec VPN状态信息
以总舵显示信息为例。
配置命令exchange-mode aggressive即可将IKEv1的协商模式改为野蛮模式。抓包看一下野蛮模式的情况:
野蛮模式只用了3条ISAKMP消息就完成了阶段1的协商过程,阶段2仍旧是快速模式不变。
发起方和响应方把IKE安全提议、密钥相关信息和身份信息一股脑地全放在一个ISAKMP消息中发送给对方,IKE协商效率提高了。但由于身份信息是明文传输,没有加密和完整性验证过程,IKE SA的安全性降低了。既然这样不够安全,为什么野蛮模式还会出现?
在IPSec VPN出现的早期,由于主模式+预共享密钥身份认证方式下,IPSec需要通过对端的IP地址来在本地查找预共享密钥(主模式中已经详细解释了这个问题)。这种密钥查找方式在对端没有固定IP地址的情况下(比如IPSec NAT穿越场景,网络出口动态获取IP地址场景)行不通。此时,野蛮模式可以“野蛮”地解决这个问题。野蛮模式中“身份信息”没有加密,IPSec就直接用对端发送来的身份信息来查找预共享密钥即可。所以在IPSec VPN应用初期,野蛮模式主要用于解决没有固定IP地址的节点部署IPSec VPN的问题。现在,IPSec VPN解决这个问题有很多方法,不安全的野蛮模式已经不是最好的选择了。具体方法待后续再呈现给大家。
IKEv1似乎已经很完美了,但用得久了仍旧会发现不尽人意之处。
IKEv1主模式协商一对IPSec SA,需要6(协商IKE SA)+3(协商IPSec SA)=9条消息。
IKEv1野蛮模式协商一对IPSec SA,需要3(协商IKE SA)+3(协商IPSec SA)=6条消息。
IKEv1不能对远程用户进行认证。若想支持远程用户接入,只能借助L2TP,通过PPP来对远程用户进行AAA认证。
这些问题怎么解决呢?办法总比问题多!IKEv2中完美的解决了这些问题。
IKEv2相比IKEv1:
IKEv2的配置思路与IKEv1完全相同,只是细节稍有不同:
说明:红色命令与IKEv1不同。缺省情况下,防火墙同时开启IKEv1和IKEv2协议。本端发起协商时,采用IKEv2,接受协商时,同时支持IKEv1和IKEv2。可以不关闭IKEv1。
IKEv2协商IPSec SA的过程跟IKEv1有很大差别:
1. 初始交换4条消息同时搞定IKE SA和IPSec SA。
初始交换包括IKE安全联盟初始交换(IKE_SA_INIT交换)和IKE认证交换(IKE_AUTH交换)。
第一个消息对(IKE_SA_INIT):负责IKE安全联盟参数的协商,包括IKE Proposal,临时随机数(nonce)和DH值。
SA载荷主要用来协商IKE Proposal。
KE(Key Exchange)载荷和Nonce载荷主要用来交换密钥材料。
IKEv2通过IKE_SA_INIT交换后最终也生成三类密钥:
SK_e:用于加密第二个消息对。
SK_a:用于第二个消息对的完整性验证。
SK_d:用于为Child SA(IPSec SA)衍生出加密材料。
第二个消息对(IKE_AUTH):负责身份认证,并创建第一个Child SA(一对IPSec SA)。
目前三种身份认证技术比较常用:
以上身份信息都通过SKEYID_e加密。
创建Child SA时,当然也要协商IPSec安全提议、被保护的数据流。IKEv2通过TS载荷(TSi和TSr)来协商两端设备的ACL规则,最终结果是取双方ACL规则的交集(这点跟IKEv1不同,IKEv1没有TS载荷不协商ACL规则)。
当一个IKE SA需要创建多对IPSec SA时,例如两个IPSec对等体之间有多条数据流的时候,需要使用创建子SA交换来协商后续的IPSec SA。
2. 子SA交换2条消息建立一对IPSec SA。
子SA交换必须在IKE初始交换完成之后才能进行,交换的发起者可以是IKE初始交换的发起者,也可以是IKE初始交换的响应者。这2条消息由IKE初始交换协商的密钥进行保护。
IKEv2也支持PFS功能,创建子SA交换阶段可以重新进行一次DH交换,生成新的IPSec SA密钥。
IKEv1和IKEv2的细节写了这么多,现在总结一下二者的异同点吧:
功能项 | IKEv1 | IKEv2 |
IPSec SA建立过程 | 分两个阶段,阶段1分两种模式:主模式和野蛮模式,阶段2为快速模式。 主模式+快速模式需要9条信息建立IPSec SA。 野蛮模式+快速模式需要6条信息建立IPSec SA。 | 不分阶段,最少4条消息即可建立IPSec SA。 |
ISAKMP | 二者支持的载荷类型不同 | |
认证方法 | 预共享密钥 数字证书 数字信封(较少使用) | 预共享密钥 数字证书 EAP 数字信封(较少使用) |
IKE SA完整性算法 | 不支持 | 支持 |
PFS | 支持 | 支持 |
远程接入 | 通过L2TP over IPSec来实现 | 支持 |
显然IKEv2以其更加快捷、更加安全的服务胜出,长江后浪推前浪又成为了没有任何悬念的事实。
安全协议(AH和ESP)、加密算法(DES、3DES、AES)、验证算法(MD5、SHA1、SHA2)、IKE、DH,好多的缩写,大家搞清楚他们之间的关系了么?强叔做了一下总结,看看能否帮助大家:
l 安全协议(AH和ESP)――IP报文的安全封装。穿上AH或/和ESP马甲的IP报文称为IPSec报文。此“马甲”并非一般的马甲,是交织了“加密”和“验证”算法的刀枪不入的“软猬甲”。
说明:AH封装的验证范围实际要还更大一些,包括新的IP头。
l 加密算法(DES、3DES、AES)――IPSec报文的易容之术。IPSec数据报文采用对称加密算法进行加密,但只有ESP协议支持加密,AH协议不支持。另外,IKE协商报文也会进行加密。
l 验证(MD5、SHA1、SHA2)――IPSec报文的验明正身之法。加密后的报文经过验证算法处理生成数字签名,数字签名填写在AH和ESP报文头的完整性校验值ICV字段发送给对端;在接收设备中,通过比较数字签名进行数据完整性和真实性验证。
l IKE――手握密钥管理大权的贴心管家。IPSec使用IKE协议在发送、接收设备之间安全地协商密钥、更新密钥。
l DH算法――贴心管家的铁算盘。DH被称为公共密钥交换方法,它用于产生密钥材料,并通过ISAKMP消息进行交换,并最终在收发两端计算出加密密钥和验证密钥。
这些概念一一梳理过来,强叔不得不感叹IPSec协议设计者的强大――这么多新的老的协议、算法拼接起来如此天衣无缝,自此Internet的险恶被屏蔽在隧道之外!为了方便大家记忆这些缩写,强叔用一张简图概括之:
写到这里,强叔心情舒畅,暗自为天地会网络的顺利推动得意。可是问题又来了――将IKE应用于IPSec VPN之后,那些有固定公网IP地址的大中型分舵的通信问题很快就解决了。但一些小型分舵IP地址不固定或只有私网IP地址,用常规的IKE方式部署IPSec VPN行不通。这种情况下怎么办呢?别担心,IKE的精彩之处还在于不出招则已、出招即能克敌;招招有戏、变化无穷,欲听详解请见下回分解。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。