计算机网络-IPSec VPN工作原理

一、IPSec VPN工作原理

昨天我们大致了解了IPSec是什么,今天来学习下它的工作原理。

IPsec的基本工作流程如下:

  • 通过IKE协商第一阶段协商出IKE SA。
  • 使用IKE SA加密IKE协商第二阶段的报文,即IPsec SA。
  • 使用IPsec SA加密数据。
IPsec基本工作流程
IPsec基本工作流程

简单理解就是先创建一条安全协商的道路(IKE SA),然后通过IKE SA经过算法达到一个秘钥(IPSec SA),接着使用IPSec SA对传输的流量进行加密与验证,这第三步就涉及到哪些流量需要加密,我们需要通过一些方式将对应流量引入到IPSec VPN隧道中来进行传输。

二、IKE 协商

前面我们学习了IPSec双方需要协商出一个SA来进行算法的匹配,一般情况下我们使用IKE方式建立IPsec SA。IKE是建立在ISAKMP定义的框架上,是基于UDP的应用层协议。它为IPsec提供了自动协商密钥、建立IPsec安全联盟的服务,能够简化IPsec的配置和维护工作。

简单说就是我们通过IKE这个框架协商出双方认可的加密算法、认证算法、传输模式等等。而IKE目前有两个版本:IKEv1和IKEv2。

2.1 IKEv1

采用IKEv1协商安全联盟主要分为两个阶段:

  • 第一阶段:通信双方协商并建立IKE协议本身使用的安全通道,即建立一个IKE SA;
  • 第二阶段:利用第一阶段已通过认证与安全保护的安全通道,建立一对用于数据安全传输的IPsec SA。
IKEv1
IKEv1

IKEv1协商第一阶段介绍:

IKEv1协商第一阶段的目的是建立IKE SA。IKE SA建立后对等体间的所有ISAKMP消息都将通过加密和验证,这条安全通道可以保证IKEv1第二阶段的协商能够安全进行。

IKEv1协商第一阶段支持两种协商模式:主模式(Main Mode)野蛮模式(Aggressive Mode)

alt

主模式:

主模式包含三次双向交换,用到了六条ISAKMP信息,协商过程如图1所示。这三次交换分别是:

  • 消息①和②用于提议交换,发起方发送一个或多个IKE安全提议,响应方查找最先匹配的IKE安全提议,并将这个IKE安全提议回应给发起方。匹配的原则为协商双方具有相同的加密算法、认证算法、认证方法和Diffie-Hellman组标识。
  • 消息③和④用于密钥信息交换,双方交换Diffie-Hellman公共值和nonce值,用于IKE SA的认证和加密密钥在这个阶段产生。
  • 消息⑤和⑥用于身份和认证信息交换(双方使用生成的密钥发送信息),双方进行身份认证和对整个主模式交换内容的认证。

野蛮模式:

野蛮模式只用到三条信息,前两条消息①和②用于协商IKE安全提议,交换Diffie-Hellman公共值、必需的辅助信息以及身份信息,并且消息②中还包括响应方发送身份信息供发起方认证,消息③用于响应方认证发起方。

与主模式相比,野蛮模式减少了交换信息的数目,提高了协商的速度,但是没有对身份信息进行加密保护。

实际情况下如果双方都有公网IP使用主模式,如果一方是拨号网络使用野蛮模式,因为IP不固定,而且野蛮模式需要协商发起方主动向固定IP的一端发起,野蛮模式安全性相对较低。

IKEv1协商第二阶段介绍:

IKEv1协商第二阶段的目的是建立用来安全传输数据的IPsec SA,并为数据传输衍生出密钥。

第二阶段采用快速模式(Quick Mode)。该模式使用IKEv1协商第一阶段中生成的密钥对ISAKMP消息的完整性和身份进行验证,并对ISAKMP消息进行加密,故保证了交换的安全性。

快速模式协商过程
快速模式协商过程

至此IKEv1就成功协商出了IKE SA和IPSec SA用于数据加密。

2.2 IKEv2

IKEv2简化了IKEv1协商SA的过程。IKEv2通常使用2次交换共4条消息就可以完成一对IPsec SA的建立,如果要求建立的IPsec SA大于一对时,每一对IPsec SA只需额外增加1次创建子SA交换,也就是2条消息就可以完成。

IKEv2定义了三种交换:初始交换(Initial Exchanges)、创建子SA交换(Create_Child_SA Exchange)以及通知交换(Informational Exchange)。

2.2.1 初始交换

IKEv2通过初始交换就可以完成第一对IPsec SA的协商建立。初始交换包含两次交换四条消息。

IKEv2初始交换介绍
IKEv2初始交换介绍

工作过程:

  • 消息①和②属于第一次交换(称为IKE_SA_INIT交换),以明文方式完成IKE SA的参数协商,包括协商加密和验证算法,交换临时随机数和DH交换。IKE_SA_INIT交换后生成一个共享密钥材料,通过这个共享密钥材料可以衍生出IPsec SA的所有密钥。
  • 消息③和④属于第二次交换(称为IKE_AUTH交换),以加密方式完成身份认证、对前两条信息的认证和IPsec SA的参数协商。IKEv2支持RSA签名认证、预共享密钥认证以及扩展认证方法EAP(Extensible Authentication Protocol)。发起者通过在消息3中省去认证载荷来表明需要使用EAP认证。

就是如果是一条IPSec SA的建立只需要初始交换就可以完成,不需要用到子SA交换等等,更加简单快捷。

报文抓包如下:

只需要4个报文即可完成协商。 IKEv2报文

IKEv2是一次性把需要协商的数据都发送过去的模式。 报文内容

IKEv2的初始交换中,并没有直接区分为主模式(Main Mode)和野蛮模式(Aggressive Mode)这两种模式,而是通过初始交换(Initial Exchanges)来完成类似于IKEv1中这两种模式的协商过程。 在IKEv2中,初始交换包括IKE_SA_INIT交换和IKE_AUTH交换,这两个交换过程顺序完成后,可以建立一个IKEv2 SA和一对IPsec SA。

具体来说,IKEv2的初始交换配置如下:

  • IKE_SA_INIT交换:这个交换完成IKEv2 SA参数的协商以及密钥交换。它对应于IKEv1的主模式的第1、3个包,以及野蛮模式的第1、2个包。
  • IKE_AUTH交换:这个交换完成通信对等体的身份认证以及IPsec SA的创建。它对应于IKEv1的主模式的第5、6个包,以及野蛮模式的第3个包。

在IKEv2中,通过配置不同的认证方法和参数,可以实现类似于IKEv1中主模式和野蛮模式的功能。例如,如果需要快速完成身份认证和密钥交换,可以使用类似于野蛮模式的配置,减少消息交换的数量。如果需要更安全的身份认证过程,可以使用类似于主模式的配置,增加消息交换的数量以提供更强的安全性。

2.2.2 创建子SA交换介绍

当一个IKE SA需要创建多对IPsec SA时,需要使用创建子SA交换来协商多于一对的IPsec SA。创建子SA交换还可以用于IKE SA的重协商。

创建子SA交换包含一个交换两条消息,对应IKEv1协商阶段2,交换的发起者可以是初始交换的协商发起方,也可以是初始交换的协商响应方。

创建子SA交换介绍
创建子SA交换介绍

用于一个总部对应对个分支的情况。

2.2.3 IKEv2通知交换介绍

运行IKE协商的两端有时会传递一些控制信息,例如错误信息或者通告信息,这些信息在IKEv2中是通过通知交换完成的。

通知交换必须在IKE SA保护下进行,也就是说通知交换只能发生在初始交换之后。控制信息可能是IKE SA的,那么通知交换必须由该IKE SA来保护进行;也可能是某子SA的,那么该通知交换必须由生成该子SA的IKE SA来保护进行。

IKEv2通知交换介绍
IKEv2通知交换介绍

就是一些告警信息或者通知报文等的交互。

三、定义IPsec被保护流

前面通过IKE已经协商出IPSec SA了,现在需要对分支间的数据进行保护,哪些流量需要进行加密保护呢?我们需要通过一些方式来进行定义。

IPsec是基于定义的感兴趣流触发对特定数据的保护,可以通过以下两种方式定义:

  • ACL方式,由ACL来指定要保护的数据流范围,筛选出需要进入IPsec隧道的报文。
  • 路由方式,通过IPsec虚拟隧道接口建立IPsec隧道,将所有路由到IPsec虚拟隧道接口的报文都进行IPsec保护。

ACL可以更加精细控制源目地址、源目端口等流量,路由方式比较便捷,但是需要创建tunnel隧道接口方式来实现,支持动态路由协议。

通过IKE协商出IPSec SA秘钥,通过ACL或者路由匹配到感兴趣流量,最后将IPSec策略应用到指定的接口就可以实现IPSec VPN了。

总结:通过IKE协商SA,IKE分v1和v2,一般情况下我用的应该是v1,v2可以快速协商出SA,然后通过ACL或者路由定义感兴趣流量,将IKE提议、IPSec提议、创建IPSec策略、应用到接口串联起来就可以实现IPSec VPN的应用了,其实就是理论比较复杂,实际配置不算太难。

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/933477.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

“切片赋值”创建列表批量操作“新”方法(Python)

[start:end]切片赋值,扩展了list批量增减元素的操作能力。 (笔记模板由python脚本于2024年12月06日 15:07:56创建,本篇笔记适合研python基础的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:…

电脑无法识别usb设备怎么办?电脑无法识别usb解决方法

usb设备是我们常解除的外部操作以及存储设备,它可以方便用户数据传输以及操作输入。但在使用过程中,大家基本都碰到过电脑无法识别usb设备这种情况。这种情况下,我们应该怎么办呢?下面将为你介绍几种可能的原因和解决方法&#xf…

【机器学习】分类器

在机器学习(Machine Learning,ML)中,分类器泛指算法或模型,用于将输入数据分为不同的类别或标签。分类器是监督学习的一部分,它依据已知的数据集中的特征和标签进行训练,并根据这些学习到的知识对新的未标记数据进行分…

路径规划之启发式算法之十一:布谷鸟搜索算法(Cuckoo Search,CS)

布谷鸟搜索算法(Cuckoo Search,CS)是一种新兴的自然启发式算法,由剑桥大学的杨新社教授和S.戴布(Xin-She Yang和Suash Deb)于2009年提出。该算法基于布谷鸟的寄生性育雏(巢寄生)行为…

Java-JMX (官方文档解读)

JMX 简介 JMX(Java Management Extensions)是Java平台的一个标准管理框架,自Java 1.5版本起成为Java 平台标准版 (Java SE 平台) 的标准组成部分。JMX 技术提供了一种简单、标准的方法来管理资源(例如应用程序、设备和服务&#x…

沃丰科技智能客服在跨境电商独立站中的核心角色

随着全球化进程的加速和互联网技术的不断发展,跨境电商行业蓬勃兴起,为消费者提供了更广阔、更便捷的购物选择。在这样一个竞争激烈的市场环境中,优质的客户服务成为了企业脱颖而出的关键。沃丰科技智能客服凭借其先进的技术和人性化的设计理…

java 日期与时间

Java 的时间 API 是一个非常重要的主题,尤其是 Java 8 引入的 java.time 包,它为日期和时间处理提供了强大的功能。 我们可以按照以下几个主题逐步学习 Java 时间处理: import java.time.LocalDate; import java.time.LocalDateTim…

(ICML-2024)DoRA:权重分解低秩自适应

DoRA:权重分解低秩自适应 Paper是英伟达发表在ICML 2024的工作 Paper Title:DoRA: Weight-Decomposed Low-Rank Adaptation Code: 地址 Abstract 在广泛使用的参数高效微调 (PEFT) 方法中,LoRA 及其变体因避免了额外的推理成本而…

想在iPad上远程操作安卓手机的APP,怎样实现iPad远程控制安卓?

学生党或互联网行业的打工人,人手连三台电子设备也很常见,手机、平板还有笔记本电脑一大堆,如果出门要全带上,背包压力也变大。 有没有想过用远程控制功能,让iPad远程控制安卓手机?这样做,出门就…

【JavaEE】UDP、TCP的API介绍

目录 UDP数据报套接字编程 DatagramSocket API DatagramPacket API 回显C/S示例 TIPS TCP ServerSocket API Socket API 回显C/S示例 UDP数据报套接字编程 DatagramSocket API socket是操作系统中的一种概念,本质上是一种特殊的文件,socket属于…

【专题】2024年11月新能源汽车、智能汽车行业报告汇总PDF洞察(附原数据表)

原文链接:https://tecdat.cn/?p38520 随着科技的飞速发展与社会的持续变革,新能源汽车与智能汽车行业正步入全新的发展阶段,成为全球瞩目的焦点领域。本报告深入且全面地剖析了 2024 年 11 月该行业的多方面状况。从汽车消费市场来看&#…

mysql重置root密码(适用于5.7和8.0)

今天出一期重置mysql root密码的教程,适用于5.7和8.0,在网上搜索了很多的教程发现都没有效果,浪费了很多时间,尝试了多次之后发现这种方式是最稳妥的,那么废话不多说,往下看: 目录 第一步&…

AI智能体Prompt预设词指令大全+GPTs应用使用

AI智能体使用指南 直接复制在AI工具助手中使用(提问前) 可前往SparkAi系统用户官网进行直接使用 SparkAI系统介绍文档:Docs 常见AI智能体GPTs应用大全在线使用 自定义添加制作AI智能体进行使用: 文章润色器 你是一位具有敏锐洞察…

linux 系统常用指令

1、查看内核版本 uname -r 2、列出占用空间最大的 10 个文件或目录 du -ah / | sort -rh | head -n 10 终于找到我虚拟机硬盘空间越来越少的原因了,类目......

[C++]继承

继承 概念使用方法继承方式子类的构造与析构 继承的成员继承成员在子类对象里的存放顺序成员变量普通成员变量静态成员变量 成员函数普通成员函数重定义(隐藏) 静态成员函数友元函数 单继承与多继承概念赋值转换(切片)多继承带来的…

MetaGPT 安装

1. 创建环境 conda create -n metagpt python3.10 && conda activate metagpt2. 可编辑方式安装 git clone --depth 1 https://github.com/geekan/MetaGPT.git cd MetaGPT pip install -e .3. 配置 metagpt --init-config运行命令,在C盘位置C:\Users\325…

ros项目dual_arm_pick-place(urdf文件可视化查看)

前言 一直想写一些项目的讲解,今天(2024.12.05)可以说正式开始了。 dual_arm_pick-place项目,是关于两个机械臂协同传递物品。 正文 这次的话,给大家讲一下里面的urdf文件。 这篇文章主要来看一下项目中的urdf文件…

如何在 IntelliJ IDEA 中为 Spring Boot 应用实现热部署

文章目录 1. 引言2. 准备工作3. 添加必要的依赖4. 配置 IntelliJ IDEA4.1 启用自动编译4.2 开启热部署策略 5. 测试热部署6. 高级技巧7. 注意事项8. 总结 随着现代开发工具的进步,开发者们越来越重视提高生产力的特性。对于 Java 开发者来说,能够在不重启…

工业-实时数据采集

1.编写新的 Flume 配置文件,将数据备份到 HDFS 目录 /user/test/flumebackup 下,要求所有主题 的数据使用同一个 Flume配置文件完成。 1. 配置概览 Flume 的主要任务是从多个来源(如日志文件)读取数据,经过处理后通过接收器(Sink)存储到目标系统(如 HDFS)。在此配置…

springSecurity认证流程

Spring Security 是spring家族中的一个安全管理框架。相比于另一个安全框架Shiro,它提供更丰富的功能和社区资源,但也较难上手。所以一般大项目用spring Security,小项目用Shiro。 一般web应用需要认证和授权,这也是spring Secur…