什么是IPsec?
IPsec(Internet Protocol Security)是为IP网络提供安全性的协议和服务的集合,它是VPN(Virtual Private Network,虚拟专用网)中常用的一种技术。其实就是一种协议簇(类似TCP/IP协议簇),IPsec VPN就是基于IPsec协议簇来进行封装的一种VPN技术。VPN的核心就是隧道技术,隧道技术的核心就是封装技术。
通信双方通过IPsec建立一条IPsec隧道,IP数据包通过IPsec隧道进行加密传输,有效保证了数据在不安全的网络环境如Internet中传输的安全性。
IPsec VPN 保护的是点对点之间的通信,通过IPsec VPN可以在主机和主机之间、主机和网络安全网关之间或网络安全网关(如路由器、防火墙)之间建立安全的隧道连接。其协议主要工作在IP层,在IP层对数据包进行加密和验证。
IPsec VPN的工作流程
大致可以分为四个阶段:
1、识别“感兴趣流”。网络设备接收到报文后,通常会将报文的五元组等信息和IPsec策略进行匹配来判断报文是否要通过IPsec隧道传输,需要通过IPsec隧道传输的流量通常被称为“感兴趣流”。
2、协商安全联盟(Security Association)。SA是通信双方对某些协商要素的约定,比如双方使用的安全协议、数据传输采用的封装模式、协议采用的加密和验证算法、用于数据传输的密钥等,通信双方之间只有建立了SA,才能进行安全的数据传输。
识别出感兴趣流后,本端网络设备会向对端网络设备发起SA协商。在这一阶段,通信双方之间通过IKE协议先协商建立IKE SA(用于身份验证和密钥信息交换),然后在IKE SA的基础上协商建立IPsec SA(用于数据安全传输)。
3、数据传输。IPsec SA建立成功后,双方就可以通过IPsec隧道传输数据了。IPsec为了保证数据传输的安全性,在这一阶段需要通过AH或ESP协议对数据进行加密和验证。加密机制保证了数据的机密性,防止数据在传输过程中被窃取;验证机制保证了数据的真实可靠,防止数据在传输过程中被仿冒和篡改。
如下图,IPsec发送方会使用加密算法和加密密钥对报文进行加密,即将原始数据“乔装打扮”封装起来。然后发送方和接收方分别通过相同的验证算法和验证密钥对加密后的报文进行处理得到完整性校验值ICV。如果两端计算的ICV相同则表示该报文在传输过程中没有被篡改,接收方对验证通过的报文进行解密处理;如果ICV不相同则直接丢弃报文。
IPsec VPN中的数据加密流程:
4、隧道拆除。通常情况下,通信双方之间的会话老化(连接断开)即代表通信双方数据交换已经完成,因此为了节省系统资源,通信双方之间的隧道在空闲时间达到一定值后会自动删除。
IKE (互联网密钥交换协议)
主要用来完成IPsec中需要的密钥相关参数的协商工作,可以动态建立IPsec SA 。有两个版本IKE V1、IKE V2
IKE中的三个协议
1、SKEME
2、OAKLEY
3、ISAKMP ISAKMP(互联网安全联盟密钥管理协议)
我们重点了解第三个ISAKMP ISAKMP(互联网安全联盟密钥管理协议)
这就是IKE协议的本体,主要用来完成IPSEC中需要的密钥相关参数的协商工作。可以动态建立IPsec SA UDP500----源、目标端口都必须是500。
SKEME、OAKLEY ---这两个协议可以理解为是IKE协商过程中使用到的资源库(了解即可)
注意:身份认证是建立安全通道的前提。
IKE第一阶段
主要目的是为了获得建立IPSEC SA时使用的密钥,以及进行身份认证。
IKE SA(ISAKMP SA)-----这个SA是双向逻辑的,不区分源和目标。
主模式:默认使用IP地址作为身份标识(也要作为PSK的识别标志),使用6个数据包进行交互,安全性更高
这里我们根据上图中的各个数据包单独进行分析:
第一二个数据包:进行SA交换
1、Cl--- cookie ---这个参数每个数据包中都会携带,在IKEV2中,变成了SPI,在这里作用类似。 2,SA---里面携带的是需要协商的安全参数 ------“五元组"(如下)
加密算法,哈希算法,身份认证,DH组,SA存活期
AES MD5 PSK DH2 84600s(默认值)
注意:手工建立的SA,一经建立,则将永久有效;但是IKE建立的SA,需要配置生存周期,周期时间到了之后,将重新建立SA。时间可以不同,不同的话按照小的来执行。
第二个回包主要确认安全参数,如果安全参数都可以对的上,则将继续完成后面的协商。如果参数没有对上,则将回复一个负载拒绝报文,结束IKESA的建立。
第三四个数据包 ---DH密钥交换 ---对称密钥1,NI,Nr---代表的是随机数 2,X,Y --- DH算法中需要公开的参数这里,为了加强安全性,DH算法会生成四种密钥
种子密钥 --- 剩余三种密钥都需要加入种子密钥运算得出,并且,种子密钥中计算时,会携带预共享密钥。
SKEYID_e---加密密钥 --- g^ir(代表的就是DH算法中计算出来的Z),CKY-I/CKY-R(前面双方携带的cookie值)----用于第一个阶段5,6数据包和第二阶段数据包加密使用。
SKEYID_a ---- 验证密钥 ---用于第二阶段hash时使用的密钥 ---HMAC算法(结合密钥的HASH算法),安全性比不加入密钥的HASH算法更高。
SKEYID_d ---推导密钥 ---用于计算最终密钥(最终加密数据的密钥)的素材
注意:在NAT环境,或是IP地址会变化的场景下,不适合用主模式。
野蛮模式
特点:可以自定义身份标识,速度快,只需要三个数据包就可以完成标识,安全性低
注意:在野蛮模式中,可以自定义身份标识,主要是因为身份信息不需要加密,并且,前两个数据包都无法加密,所以,野蛮模式安全性较低。仅第三个数据包会进行加密。但是,野蛮模式适用于NAT环境以及IP地址不固定的环境。
主模式和野蛮模式的区别
第二阶段
基于已经建立的安全通道,来协商建立IPSEC SA的安全参数,完成后,则标志着IPSEC SA的建立。 快速模式(quick mode) UDP500
需要协商的安全参数
加密算法 ---正式传输数据时使用的加密算法(加密算法协商完成后,会计算密钥第一阶段计算出来的推导密钥会加入到该密钥的计算中)
HASH算法 ---正式传输数据时进行完整性校验的算法
安全协议 ---AH/ESP
封装模式 --- 传输模式/隧道模式
存活时间
可以了解一下这个协议
PFS --- 密钥完美向前保密 --- 正常工作中,第二阶段的最终密钥是通过第一阶段的推导密钥计算出来的,但是,这样做不安全,推导密钥泄露可能导致最终密钥泄露。所以,可以开启这个PFS技术(注意:要开启需要两端设备都开启才行),之后,则将在第二阶段重新进行一次DH交换,计算最终的密钥,从而提高安全性。
数据传输阶段
VPN黑洞:隧道建立之后,如果其中一段的设备异常重启,另一端还在有效期内,则他发送的数据将有去无回,就形成了VPN黑洞。
解决方法
DPD死亡对等体检测。类似于心跳检测机制 ---采用空闲计时器原理 ---两边同时开启一个固定时间的计时器,期间数据值直接发过去,如果计时器超时,则数据发送前,先发送一个DPD检测报文,如果收到对方的DPD应答报文,则将重置计时器。如果没有收到,并且,连续5次都没有收到,则将拆掉安全通道。
最后,在面试过程中常问的一个问题,IPSec SA和IKE SA谁是单向谁是双向?
IKE SA 是双向的,两端只需要构建一条SA就可以共同拥有了;
IPSec SA是单向的,所以就需要创建两条。