IPsec VPN简介

server/2024/12/2 22:54:18/

什么是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是单向的,所以就需要创建两条。


http://www.ppmy.cn/server/41779.html

相关文章

全面解析OpenAI的新作——GPT-4o

5月14日凌晨1点、太平洋时间的上午 10 点,OpenAI的GPT-4o的横空出世,再次巩固了其作为行业颠覆者的地位。GPT-4o的发布不仅仅是一个产品的揭晓,它更像是向世界宣告AI技术已迈入了一个全新的纪元,连OpenAI的领航者萨姆奥特曼也不禁…

【python数据预处理系列】使用Pandas的factorize()函数进行类别编码(整数编码)

在Pandas中,factorize()函数主要用于将分类变量转换为整数编码,这对于减少内存使用或准备数据进行某些统计分析非常有用。 它实际上是将列的唯一值映射到从0开始的整数序列上。 假设有一个DataFrame,其中一列包含一些类别值,你希望…

鸿蒙OS开发:【Stage模型应用程序包结构】

Stage模型应用程序包结构 为了让开发者能对应用程序包在不同阶段的形态更有清晰的认知,分别对开发态、编译态、发布态的应用程序结构展开介绍。 开发态包结构 在DevEco Studio上[创建一个项目工程],并尝试创建多个不同类型的Module。根据实际工程中的…

【苍穹外卖微服务改造】引入minio

目录 1、需求2、步骤分析3、如何实现导入minio依赖编写配置属性类编写配置类编写接口编写实现类配置application.yml 4、其他实现:自定义stater5、总结 1、需求 需求来源: 下面我就给大家总结一下,如何在苍穹外卖的基础上,引入mi…

14030.ZynqMP配置vlan与ubuntu虚拟机(PC)进行通信

文章目录 1 场景描述2 zynqmp 开发板配置vlan2.1 配置内核2.2 配置vlan地址3 windows 配置网卡vlan标签3.1 网卡配置vlan标签3.2 开发板与windows进行ping连接4 ubuntu配置vlan4.1 ubuntu配置桥接,使用同样的物理网卡4.2 开发板ping 虚拟机5 VLAN的pcap与普通的pcap的区别5.1 …

set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`

TF_ENABLE_ONEDNN_OPTS是配合log输出信息来用。 os.environ["TF_CPP_MIN_LOG_LEVEL"]的取值有四个:0,1,2,3,分别和log的四个等级挂钩:INFO,WARNING,ERROR,FATA…

裸金属服务器与云服务器有什么区别?

近年来,随着云计算技术的迅速发展,裸金属和云服务器已成为企业部署业务的两种主要方式。 裸金属是指提供基础设施硬件环境,但不包含操作系统和中间件的计算资源服务。 而云服务器则是通过虚拟化技术将计算资源划分为多个虚拟机,可…

26、Flink 的状态数据结构升级

状态数据结构升级 a)概述 Flink 流应用通常被设计为永远或者长时间运行,与所有长期运行的服务一样,应用程序需要随着业务的迭代而进行调整,应用所处理的数据 schema 也会随着进行变化。 升级状态类型的数据 schema &#xff0c…