IPsec是什么

IPsec(IP Security)是一系列为IP通信提供安全性的协议和服务的集合,工作在IP层,可以为上层协议和应用提供透明的安全服务。IPsec提供两种安全机制:认证和加密。

认证机制使IP通信的数据接收方能够确认数据发送方的真实身份以及数据在传输过程中是否遭篡改。

加密机制通过对数据进行加密运算来保证数据的机密性,以防数据在传输过程中被窃听。

IPsec提供的安全保护包括:

  • 用户数据加密,通过加密算法提供好数据私密性。
  • 消息完整性验证,通过摘要认证确保数据在传输路径上未经修改。
  • 防御特定类型攻击,通过序列号防数据重放、通过认证防中间人攻击。
  • 提供设备之间安全算法和秘钥的协商能力,提供安全的在线秘钥生成机制。
  • 提供隧道和安全两种模式,满足不同的网络结构需求。

IPsec出现的原因

  1. 网络安全问题日益严重,需要保证数据在网络上的传输是安全的。
  2. 大多数保证数据安全的协议或技术都是在应用层,如SSL协议可以为WEB或FTP提供安全连接,但对于ping、Telnet、SNMP等无效。
  3. 需要在IP层提供安全性的方法,可以使在传输层上层的所有协议受益。

IPsec相关概念

  • SA(Security Association,安全关联):为安全目的创建的一个单向逻辑连接,所有经过同一个SA的数据流会使用相同的安全处理协议(AH或ESP)。对同一个数据流同时使用AH和ESP时需要两个嵌套的SA。双向的数据流需要通信实体之间维护一对出入彼此呼应的SA。

  • SPD(Security Association Database,安全关联数据库):用于存放与SA关联的所有状态数据的存储结构。

  • SPI(Security Parameters Index,安全参数索引):一个被携带在AH或ESP报文头中的32bit数值,用于在接收端识别数据流到SA的绑定关系。

  • SPD(Security Policy Database,安全策略数据库):指明所有IP数据报文应该使用何种安全服务,以及如何获得这些服务的数据结构。SPD是一个有序的结构,用访问控制列表来描述数据流特性。

  • AH(Authentication Headers,认证头协议):提供数据来源认证,数据完整性校验,保护通信免受篡改,但不能防止窃听,适合于传输非机密数据。AH协议使用事先协商好的算法和密钥计算报文数据部分的摘要值,然后作为报文完整性的证据保存在AH的头结构中。

  • ESP(Encapsulating Security Payloads,封装安全载荷协议):提供加密,数据源校验,数据完整性校验。ESP协议将原始报文加密后作为负载携带在报文中。

  • IKE(Internet Key Exchange,因特网密钥交换协议):用于动态建立SA,SA有生命周期,如果安全策略要求建立安全、保密的连接,但又不存在与该连接相应的SA,IPSec会立刻启动IKE来协商SA。

  • ISAKMP(Internet Security Association Key Management Protocol,安全联盟密钥管理协议):定义了协商、建立、修改和删除SA的过程和包格式,只是提供了一个通用框架,并没有定义具体的SA格式,与IKE独立,可以被不同的密钥交换协议使用。IKE使用ISAKMP消息来协商并建立SA。

  • 注:AH使用较少,原因是AH协议无法提供数据加密,所有数据都是明文传输,另外由于AH提供数据来源确认,一旦源IP地址改变,AH校验失败,无法穿越NAT。

IPsec的工作原理

封装模式

  • 传输模式:只对IP数据报的数据部分进行加密,在原始IP报文头部与上层协议之间插入AH或ESP协议头。适用于主机到主机方式报文的处理。
  • 隧道模式:对整个IP数据报进行加密,增加新IP头部而将原始IP数据包包括头部都作为负载。适用于转发设备上做封装处理的场景。

  • AH保护

  • ESP保护

工作流程

两个IPsec实体之间的IKE协商分为两个阶段:

  • 第一阶段:建立ISAKMP SA

    • 两种模式:
    • 主模式(main mode):6条ISAKMP消息交互
    • 积极模式(aggressive mode):3条ISAKMP消息交互
    • ISAKMP SA为第二阶段的ISAKMP消息提供安全保护
  • 第二阶段:建立IPsec SA

    • 一种模式:
    • 快速模式(quick mode):3条ISAKMP消息交互
    • IPSec SA为IP数据提供安全保护
  • ISAKMP报文头格式

  • cookie: 用于帮助通信双方确认一个ISAKMP报文是否真的来自对方,对于一个SA,cookie是唯一的,即在协商过程中,cookie不能改变。cookie由各自实体的机密信息生成,该机密信息不能通过cookie推到出来。

  • 交换类型:表示该报文所属的交换类型,通常为主模式或积极模式。

  • 标志 :加密位(encryp):如果是1,表示ISAKMP头部后的所有载荷都被加密了;如果是0,表示是载荷是明文,没有被加密。

    提交位(commit):用于确保在发送被保护的数据之前完成协商。

IPsec配置步骤

  1. 定义协商第一阶段ISAKMP策略

    • 定义ISAKMP消息的保护策略,包括加密算法、验证算法、验证方式等。
  2. 定义协商第二阶段IPsec SA策略
    • 定义IP数据的保护策略,协议是使用ESP还是AH、加密算法、验证算法、封装模式是隧道模式还是传输模式等。
    • 定义要被IPsec保护的数据。
  3. 定义crypt to map
    • 定义IPsec SA对端通信实体,并配置协商第二阶段IPsec SA策略和保护数据。
  4. 在出接口上调用crypt to map

    • 确保路由表中的路由能将被保护的数据从配置了crypt to map的出接口转发出去。
  • 数据包经过IPsec实体时有三种处理方式:IPsec保护、丢弃或旁路(自由穿越,不受保护)。

IPsec学习笔记的更多相关文章

  1. IPsec 学习笔记

    工作中需要,参考网上的资料对IPSecVPN进行学习,并通过博客记录下一些知识点作为学习记录和后续复习的材料. Transport Layer (TLS) 其中主要参考了以下文档: http://ww ...

  2. TCP协议和socket API 学习笔记

    本文转载至 http://blog.chinaunix.net/uid-16979052-id-3350958.html 分类:  原文地址:TCP协议和socket API 学习笔记 作者:gilb ...

  3. 学习笔记:CentOS7学习之二十一: 条件测试语句和if流程控制语句的使用

    目录 学习笔记:CentOS7学习之二十一: 条件测试语句和if流程控制语句的使用 21.1 read命令键盘读取变量的值 21.1.1 read常用见用法及参数 21.2 流程控制语句if 21.2 ...

  4. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  5. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  6. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  7. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  8. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  9. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

随机推荐

  1. Android map转json格式,附上Jackson包下载地址,导入过程

    android中的map转json,需要下载jackson包,下载地址: http://www.java2s.com/Code/Jar/j/Downloadjacksonall199jar.htm 下 ...

  2. Linux命令(三) 移动文件 mv

    用户可以使用 mv 命令来移动文件或目录至另一个文件或目录, 还可以将目录或文件重命名. 如果将一个文件移动到一个已经存在的目标文件中,目标文件的内容将会被覆盖.mv 命令接收两个参数时,第一个参数表 ...

  3. OneZero第四周第四次站立会议(2016.4.14)

    1. 时间: 15:00--15:10  共计10分钟. 2. 成员: X 夏一鸣 * 组长 (博客:http://www.cnblogs.com/xiaym896/), G 郭又铭 (博客:http ...

  4. mybatis之DAO层自动实现接口

    * 使用mybatis举例,使用DAO接口方式实现* 不需要针对接口去编写具体的实现类代码,编写映射XML文件,直接拿来使用即可.* 1.导入jar包:mybatis和mysql-connector* ...

  5. 【loj114】k大异或和 线性基+特判

    题目描述 给由 $n​$ 个数组成的一个可重集 $S​$ ,每次给定一个数 $k​$ ,求一个集合 $T⊆S​$ ,使得集合 $T​$ 在 $S​$ 的所有非空子集的不同的异或和中,其异或和 $T_1 ...

  6. Fire Net HDU - 1045(二分匹配)

    把每一列中相邻的 .  缩为一个点 作为二分图的左边 把每一行中相邻的  .  缩为一个点 作为二分图的右边 然后求最大匹配即可 这题用匈牙利足够了...然而..我用了hk...有点大材小用的感觉// ...

  7. 在PE32位下安装64位2003、2008系统

    步骤 1.进PE(这里是老毛桃为例) 2.将系统(这里windows2008 r2 为例)拷到本地硬盘 3.将ios镜像出来 4.在PE桌面找到 “windows系统安装”,浏览 系统文件  \sou ...

  8. IAR ------ 基本使用

    1.编译结果: 6 887 bytes of readonly code memory 621 bytes of readonly data memory 331 bytes of readwrite ...

  9. python 获取自身ip

    原文 见过很多获取服务器本地IP的代码,个人觉得都不是很好,例如以下这些 不推荐:靠猜测去获取本地IP方法 #!/usr/bin/env python # -*- coding: utf-8 -*- ...

  10. python+正态分布+蒙特卡洛预测男女身高概率!

    sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campai ...