a)点到点VPN(Site-to-SiteVPN)IPSec可以为任何基于IP的通信提供安全保护,既可以保护传统的固定网络,也可以保护LTE等移动网络。无论是针对固定网络还是移动网络,运营商场景里IPSec的应用大都可以归结为点到点VPN和基于GREoverIPSec这两种。点到点VPN也称网关到网关VPN(GatewaytoGatewayVPN),可以保证两个网关之间IP流量的安全性。典型组网如图2-1所示。
点到点VPN部署非常灵活,而且当两个IPSec网关之间存在NAT设备时,支持IPSecNAT穿越。
b)GREoverIPSec
IPSec本身不支持封装组播、广播和非IP报文。当需要在IPSecVPN上传输这些报文时,可以使用GRE先将其封装为IP报文,然后再进行IPSec封装。如图2-2所示。
基于GREoverIPSec的应用很多,比如BGP、LDP、OSPF、IS-IS和IPv6,这些应用的原理相同,都是使用GRE将协议报文封装成IP报文,然后在IPSec隧道里传输。
2)企业场景
a)点到点VPN(Site-to-SiteVPN)
企业场景里IPSec主要用于公司之间通过IPSecVPN网络互连或者移动员工远程接入公司网络,典型应用除了前面提到的点到点VPN和GREoverIPSec,还有IPSecoverL2TP。企业场景里IPSec的组网更加灵活多样。点到点VPN主要用于公司总部与分支机构之间建立IPSec隧道,从而实现局域网之间互通。
GREoverIPSec可以提供在总部和分支之间传送广播、组播的业务,例如视频会议或动态路由协议消息等等。
c)IPSecoverL2TP
IPSecoverL2TP,即先用IPSec封装报文后再用L2TP封装,通过L2TP实现用户验证和地址分配,并利用IPSec保障安全性。如图2-8所示,DeviceA作为接入服务器,使用PPP拨号方式发起PPP会话,触发L2TP隧道创建。L2TP隧道建立成功后,LNS生成一条通往DeviceA的路由;DeviceA获取IP地址,并发起IPSec隧道创建。
d)点到多点VPN(Hub-SpokeVPN)
实际组网中最常见的是公司总部与多个分支机构通过点到多点IPSecVPN互通。
在这种组网中,用户可以根据实际需求配置IPSec、L2TPoverIPSec或GREoverIPSec。此时网络内数据流量可能存在如下两种情况:
※各分支机构之间不需要通信只有总部和分支之间部署IPSecVPN,也只有总部和分支之间存在业务流量。如图2-10所示。
※各分支机构之间需要通信分支机构之间通过总部进行通信,如图2-11所示。
3.IPSec协议框架
1)安全协议
IPSec通过AH(AuthenticationHeader,验证头)和ESP(EncapsulatingSecurityPayload,封装安全载荷)两个安全协议实现IP报文的封装/解封装。
※AH是报文头验证协议,主要提供数据源验证、数据完整性验证和防报文重放功能,不提供加密功能。
※ESP是封装安全载荷协议,主要提供加密、数据源验证、数据完整性验证和防报文重放功能。虽然AH协议和ESP协议都可以提供数据源验证和数据完整性校验服务,但是两者不能互相取代。两者之间的差别在于验证报文的范围不同,验证范围请参见封装模式。
安全特性
AH
ESP
IP协议号
51
50
数据完整性校验
支持(验证整个IP报文)
支持(不验证IP头)
数据源验证
支持
数据加密
不支持
防报文重放攻击
IPSecNAT-T(NAT穿越)
从上表中可以看出两个协议各有优缺点,AH协议不提供数据加密功能,ESP的验证范围不包括IP头,其安全性不如AH,故在安全性要求较高的场景中可以考虑联合使用AH协议和ESP协议。AH协议和ESP协议联合使用时,需要先使用ESP,这是因为AH对整个IP数据报文进行认证,如果先使用AH再使用ESP,ESP的头和尾会改变数据报文的长度,而且ESP的填充字段也会改变数据报文的长度,造成AH认证失败。
2)封装模式
a)传输模式:在传输模式下,AH或ESP被插入到IP头之后但在所有传输层协议或者其他IPSec协议之前。
传输模式不改变IP报文头,只是IP协议字段被改为AH或者ESP,并重新计算IP报文头校验和,故IPSec隧道的源和目的地址必须为IP报文头中的源和目的地址,所以只适用于两台主机之间的通讯。
传输模式下,AH协议的完整性验证范围为整个IP报文,IP报文内容改变会导致接收端AH认证失败,因此AH与必须改变IP报文头中的IP地址的NAT协议无法共存。ESP协议验证报文的完整性检查部分包括ESP头、传输层协议头、数据和ESP尾,但不包括IP报文头,因此ESP协议无法保证IP报文头的安全,却可以与NAT协议共存。ESP的加密部分包括传输层协议头、数据和ESP尾。
b)隧道模式
隧道模式的报文格式如图2-19所示。在隧道模式下,原始IP数据报文被封装成一个新的IP数据报文,并在旧IP报文头(图2-19中的IPHeader)和新IP报文头(图2-19中的NewIPHeader)之间插入一个IPSec报文头(AH或ESP),原IP地址被当作有效载荷的一部分受到IPSec的安全保护。
隧道模式隐藏了原始IP报文头信息,因此主要应用于两台VPN网关之间或一台主机与一台VPN网关之间的通信。隧道模式下,AH协议的完整性验证范围为包括新增IP头在内的整个IP报文。ESP协议验证报文的完整性检查部分包括ESP头、原IP头、传输层协议头、数据和ESP尾,但不包括新IP头,因此ESP协议无法保证新IP头的安全。ESP的加密部分包括传输层协议头、数据和ESP尾。当安全协议同时采用AH和ESP时,AH和ESP协议必须采用相同的封装模式。
c)传输模式和隧道模式比较
※从安全性来讲,隧道模式优于传输模式。它可以完全地对原始IP数据包进行验证和加密。隧道模式下可以隐藏内部IP地址,协议类型和端口。
※从性能来讲,隧道模式因为有一个额外的IP头,所以它将比传输模式占用更多带宽。
3)加密算法
加密是一种将数据从明文转换成无法读懂的密文的过程,接收方只有在拥有正确的密钥的情况下才能对密文进行解密,从而保证了数据的私密性。
IPSecVPN工作过程中涉及数据加密(IP报文加密)和协议消息加密(ISAKMP消息加密)两种情况。
a)数据加密
ESP能够对IP报文内容进行加密保护,以防止IP报文内容在传输过程中被窥探。IPSec采用对称加密算法对数据进行加密和解密。对称加密算法是指数据发送方和接收方使用相同的密钥进行加密、解密。采用对称加密算法进行数据加密和解密的过程如图2-20所示。
用于加密的对称密钥可以手工配置,也可以通过DH算法生成并在两端设备共享。
一般来说IPSec使用以下加密算法:
※DES(DataEncryptionStandard):使用56bit的密钥对一个64bit的明文块对IP报文进行加密。※3DES(TripleDataEncryptionStandard):使用三个56bit的DES密钥(共168bit密钥)对明文形式的IP报文进行加密。※AES-CBC-128(AdvancedEncryptionStandardCipherBlockChaining128):使用128bit加密算法对IP报文进行加密。※AES-CBC-192(AdvancedEncryptionStandardCipherBlockChaining192):使用192bit加密算法对IP报文进行加密。※AES-CBC-256(AdvancedEncryptionStandardCipherBlockChaining256):使用256bit加密算法对IP报文进行加密。※SM4:使用128比特的密钥对协议报文进行加密。3DES比DES安全得多,但是其加密速度慢于DES。AES比3DES更安全。
b)协议消息加密协议消息加密用于IKE协商阶段。协议消息加密所用的算法也是DES、3DES和AES。用于加密的对称密钥通过DH算法生成。
4)认证算法
加密和HMAC验证配合使用的过程如图2-21所示。
用于验证的对称密钥可以手工配置,也可以通过DH算法生成并在两端设备共享。
一般来说IPSec使用以下几种认证算法:
※MD5(MessageDigest5):输入任意长度的消息,产生一个128比特的消息摘要。※SHA-1(SecureHashAlgorithm):输入长度小于264比特的消息,然后生成一个160比特的消息摘要。※SHA2-256:通过输入长度小于264比特的消息,产生256比特的消息摘要。※SHA2-384:通过输入长度小于2128比特的消息,产生384比特的消息摘要。※SHA2-512:通过输入长度小于2128比特的消息,产生512比特的消息摘要。※SM3:通过输入长度小于264比特的消息,产生256比特的消息摘要。SHA-2的消息摘要长于MD5和SHA-1,因此,SHA-2比MD5和SHA-1更安全。
5)密钥算法
IKEv1和IKEv2的协商过程中,隧道两端需要进行密钥材料的交换,以便使用相同密钥进行正确的加密和解密。
a)密钥交换方法
IPSec使用IKE协议在发送、接收设备之间安全地协商密钥。IKE采用DH算法在不安全的网络上安全地交换密钥信息,并生成加密、验证密钥。这种方式配置简单,可扩展性好,特别是在大型动态的网络环境下此优点更加突出。
IKE提供密钥交换,自动协商建立安全联盟等服务。采用IKE协议可以使IPSec配置和管理更简单、更灵活。lInternet安全联盟和密钥管理协议ISAKMP(InternetSecurityAssociationandKeyManagementProtocol)是IKE的基础,IKE使用ISAKMP协议定义密钥交换的过程。ISAKMP提供了对安全服务进行协商的方法,密钥交换时交换信息的方法,以及对对等体身份进行验证的方法。※IKE的精髓在于它永远不在不安全的网络上传送密钥,而是通过一些数据的交换,通信双方最终计算出共享的密钥,并且即使第三方截获了双方用于计算密钥的所有交换数据,也无法计算出真正的密钥。其中的核心技术就是DH(DiffieHellman)交换技术。b)DH密钥交换DH用于产生密钥材料,并通过ISAKMP消息在发送和接收设备之间进行密钥材料交换。然后,两端设备各自计算出完全相同的对称密钥。该对称密钥用于加密和验证密钥的计算。在任何时候,双方都不交换真正的密钥。
4.IPSec安全联盟
IPSec在两个端点之间提供安全通信,这两个端点被称为IPSec对等体。安全联盟(SecurityAssociation)是通信对等体间对某些要素的约定。它定义了保护IP报文安全的协议(AH或者ESP)、IP报文的封装模式、认证算法、保护IP报文的共享密钥等。通过安全联盟实现了IPSec对IP报文的保护。安全联盟是IPSec的基础,也是IPSec的本质。
SA是单向的,输入的IP报文和输出的IP报文由入方向安全联盟和出方向安全联盟分别处理。因此,如果有两个设备(DeviceA和DeviceB)使用ESP进行通信,则必须在DeviceA上设置两个SA,一个用于处理外发IP报文,另一用于处理接收IP报文。同样地,DeviceB也需要两个SA。
安全联盟建立方式
安全联盟可通过手工配置和自动协商两种方式建立。※手工建立安全联盟的方式是指用户通过在两端手工设置一些参数,在两端参数匹配和协商通过后建立IPSec安全联盟。手工方式配置比较复杂,创建IPSec安全联盟所需的全部信息都必须手工配置,而且不支持IPSec的一些高级特性(例如定时更新密钥),但优点是可以不依赖IKE而单独实现IPSec功能。手工方式目前主要用于协议报文的认证,例如RIPng、OSPFv3、IGMP、MLD、PIM和DHCPv6Relay等。※自动协商方式由IKE生成和维护,通信双方基于各自的安全策略库经过匹配和协商,最终建立安全联盟而不需要用户的干预。
IKE属于一种混合型协议,它建立在由Internet安全联盟和密钥管理协议ISAKMP(InternetSecurityAssociationandKeyManagementProtocol)定义的一个框架上。它能够为IPSec提供自动协商交换密钥、建立安全联盟的服务,以简化IPSec的使用和管理。
IKE分为IKEv1和IKEv2两个版本,二者建立安全联盟的方式大体相同,
IKE的安全机制
※DH密钥交换。※完善的前向安全性PFS(PerfectForwardSecrecy):指一个密钥被破解,并不影响其他密钥的安全性,因为这些密钥间没有派生关系。PFS是由DH算法保障的。此特性是通过在IKE阶段2的协商中增加密钥交换来实现的。※身份验证:身份验证用于确认通信双方的身份。对于pre-sharedkey验证方法,验证字用来作为一个输入产生密钥,验证字不同是不可能在双方产生相同的密钥的。验证字是验证双方身份的关键。※身份保护:身份数据在密钥产生之后加密传送,实现了对身份数据的保护。
1)IKEv1协商安全联盟的过程
主模式
下面对这三个步骤进行详细说明:
1.协商对等体之间使用的IKE安全提议。
3.对等体之间验证彼此身份。
a.两个对等体通过两条ISAKMP消息(5、6)交换身份信息(预共享密钥方式下为IP地址或名称,数字证书方式下还需要传输证书的内容),身份信息通过SKEYID_e加密,故可以保证身份信息的安全性。b.两个对等体使用IKE安全提议中定义的加密算法、验证算法、身份验证方法和SKEYID_a、SKEYID_e对IKE消息进行加解密和验证。IKEv1支持如下身份验证方法:–预共享密钥这种方法要求对等体双方必须要有相同的预共享密钥(该密钥直接参与SKEYID的生成计算)。对于设备数量较少的VPN网络来说易于配置,在大型VPN网络中,不建议采用预共享密钥来做身份验证。–RSA签名(通常称为数字证书)数字证书需要由CA服务器来颁发。这种方法适用于大型动态的VPN网络。证书验证和预共享密钥验证的主要区别在于SKEYID的计算和交换的身份信息,其他的交换和计算过程和预共享密钥验证方式相同。–数字信封认证在数字信封认证中,发起方采用对称密钥加密信息内容,并通过非对称密钥的公钥加密对称密钥,从而保证只有特定的对端才能阅读通信的内容,从而确定对端的身份。说明:此认证方法只能在IKEv1的主模式协商过程中使用,不能在IKEv1野蛮模式协商过程中使用。
野蛮模式
野蛮模式仅交换3个消息就可以完成IKESA的建立。
野蛮模式时IKEv1阶段1的协商过程:
如果发起者已知响应者的策略,或者对响应者的策略有全面的了解,采用野蛮模式能够更快地创建IKESA。
IKEv1协商阶段2
IKEv1阶段2的目的就是建立用来传输数据的IPSecSA。
IKEv1阶段2通过快速交换模式完成。由于快速交换模式使用IKEv1阶段1中生成的密钥SKEYID_a对ISAKMP消息的完整性和身份进行验证,使用密钥SKEYID_e对ISAKMP消息进行加密,故保证了交换的安全性。
在快速交换模式中,对等体两端协商IPSecSA的各项参数,并为数据传输衍生出密钥。
快速模式共有3条消息完成双方IPSecSA的建立。
1.消息1发送本端的安全参数和身份认证信息。安全参数包括被保护的数据流和IPSec安全提议等需要协商的参数。身份认证信息包括第一阶段计算出的密钥和第二阶段产生的密钥材料等,可以再次认证对等体。2.消息2响应消息1,发送响应方的安全参数和身份认证信息并生成新的密钥。
对等体双方通过交换密钥材料生成新的共享密钥,并最终衍生出IPSec的加密密钥。此时响应者和发送者各有两个SA。
IPSecSA数据传输需要的加密、验证密钥由SKEYID_d、SPI、协议等参数衍生得出,以保证每个IPSecSA都有自己独一无二的密钥。
当启用PFS时,要再次应用DH算法计算出一个共享密钥,然后参与上述计算,因此在参数协商时要为PFS协商DH密钥组。3.消息3响应消息2,确认与响应方可以通信,协商结束。
2)IKEv2协商安全联盟的过程
要建立一对IPSecSA,IKEv1需要经历两个阶段:“主模式+快速模式”或者“野蛮模式+快速模式”。前者至少需要交换9条消息,后者也至少需要6条消息。而IKEv2,正常情况使用2次交换共4条消息就可以完成一个IKESA和一对IPSecSA,如果要求建立的IPSecSA大于一对时,每一对SA只需额外增加1次交换,也就是2条消息就可以完成。这比IKEv1要简化很多。
IKEv2协商安全联盟的过程
IKEv2定义了三种交换:初始交换、创建子SA交换以及通知交换。1.初始交换IKE通信总是从IKE安全联盟初始交换(IKE_SA_INIT交换)和IKE认证交换(IKE_AUTH交换)开始。这2个交换通常由4条消息组成,在某些场景下消息数目可能会增加。所有使用IKE的通信都由请求/响应对组成。IKE安全联盟初始交换和IKE认证交换完成后可以建立一个IKESA和第一对CHILD_SA(即IPSecSA)。
详细说明如下:
a.第一个消息对(IKE_SA_INIT)这个消息对负责进行IKE安全联盟参数的协商,包括协商加密和验证算法,交换临时随机数(nonces)和DH交换。
综上,有如下结论:
第一阶段作用:对等体之间彼此验证对方,并协商出IKESA,保护第二阶段中IPSecSA协商过程;
第二阶段作用:协商IPSec单向SA,为保护IP数据流而创建;
5.IPSec报文处理流程
6.IPSecDPD
当两个对等体之间采用IKE和IPSec进行通信时,对等体之间可能会由于路由问题、对等体重启或其他原因等导致连接断开。IKE协议本身没有提供对等体状态检测机制,一旦发生对等体不可达的情况,只能等待安全联盟的生存周期到期。生存周期到期之前,对等体之间的安全联盟将一直存在。安全联盟连接的对等体不可达将引发“黑洞”,导致数据流被丢弃。通常情况下,迫切需要识别和检测到这些“黑洞”,以便尽快的恢复IPSec通信。
Keepalive机制可以解决这个问题。Keepalive机制是指IKE对等体间通过周期性的交换Hello/Ack消息来告知对方自己处于活动状态。但是在设备上的IKESA数量很大时,发送的Hello/Ack消息将会大量消耗设备的CPU资源,限制了这种机制的应用。
DPD有两种模式可以选择:interval和on-demand。
7.完善的前向安全性PFS(PerfectForwardSecrecy)
8.安全联盟生存周期
9.IPSecNAT穿越
1)NAT技术主要用于解决IPv4地址紧缺问题,在目前网络中NAT应用非常广泛,特别是在企业网出口网关大都使用了NAT技术解决公网地址不足的问题。IPSec提供了端到端的IP通信的安全性,可以实现同一企业集团不同地域分支之间的低成本安全互连。但是IPSec和NAT技术本身存在不兼容的问题。
※从NAT的角度上说,为了完成地址转换,势必会修改IP报文头中的IP地址。※从IPSec的角度上说,IPSec要保证数据的安全,因此它会加密和校验数据。AH主要用于保护消息的完整性,其验证范围包含IP报文头,而NAT修改IP报文头会导致AH检查失败,因此使用AH保护的IPSec隧道是不能穿越NAT网关的。但是ESP协议保护的报文不存在该问题,因为ESP保护的部分不包含IP报文头(对隧道方式而言是外层IP报文头)。但是还是有新的不兼容问题,当NAT改变了某个包的IP地址和(或)端口号时,它通常要更新TCP或UDP校验和。当TCP或UDP校验和使用了ESP来加密时,它就无法更新这个校验和。
※ESP封装的传输模式:ESP隧道模式的封装中,TCP或UDP报文头使用了ESP加密,从而无法更改校验和。由于IP地址或端口号已经被NAT更改,目的地的校验和检验就会失败。这就导致ESP封装的传输模式无法与NAT共存。※ESP封装的隧道模式:ESP隧道模式将整个原始的IP包整个进行了加密,且在ESP的头部外面新加了一层IP头部,所以NAT如果只改变最前面的IP地址对后面受到保护的部分是不会有影响的。因此,IPSec采用ESP的隧道模式来封装数据时可以与NAT共存。2)IPSec穿越NAT的处理IPSecNAT穿越的流程是:
※NAT穿越(NAT-Traversal,简称NAT-T)能力检测:建立IPSec隧道的两端需要进行NAT穿越能力协商,这是在IKE协商的前两个消息中进行的,通过VendorID载荷指明的一组数据来标识。※NAT网关发现:通过NAT-D(NAT-Discovery)载荷来实现的,该载荷用于在IKEPeer之间发现NAT网关的存在以及确定NAT设备在Peer的哪一侧。NAT侧的Peer作为发起者,需要定期发送NAT-Keepalive报文,以使NAT网关确保安全隧道处于激活状态。※ESP报文正常穿越NAT网关:IPSec穿越NAT,简单来说就是在原报文的IP头和ESP头(不考虑AH方式)间增加一个标准的UDP报文头。这样,当ESP报文穿越NAT网关时,NAT对该报文的外层IP头和增加的UDP报头进行地址和端口号转换;转换后的报文到达IPSec隧道对端时,与普通IPSec处理方式相同,但在发送响应报文时也要在IP头和ESP头之间增加一个UDP报文头。采用上述方式,ESP封装的传输模式和隧道模式报文均可以穿越NAT。增加UDP报文头后传输模式和隧道模式的报文格式如图2-33所示。
3)IKEv2与NAT穿越
NAT-T能力检测NAT-T能力检测在IKE协商的前两个消息中交换完成,通过在消息中插入一个标识NATT能力的VendorID载荷来告诉对方自己对该能力的支持。如果双方都在各自的消息中包含了该载荷,说明双方对NAT-T都是支持的。只有双方同时支持NAT-T能力,才能继续进行其他协商。NAT网关发现当存在NAT设备时必须使用UDP传输,所以在IKEv2中的第一阶段协商中必须先探测是否存在NAT设备,也就是NAT探测。通过发送NAT-D载荷来实现NAT探测是目前比较流行的方法。