IPsec学习笔记
IPsec是什么
IPsec(IP Security)是一系列为IP通信提供安全性的协议和服务的集合,工作在IP层,可以为上层协议和应用提供透明的安全服务。IPsec提供两种安全机制:认证和加密。
认证机制
使IP通信的数据接收方能够确认数据发送方的真实身份以及数据在传输过程中是否遭篡改。
加密机制
通过对数据进行加密运算来保证数据的机密性,以防数据在传输过程中被窃听。
IPsec提供的安全保护包括:
- 用户数据加密,通过加密算法提供好数据私密性。
- 消息完整性验证,通过摘要认证确保数据在传输路径上未经修改。
- 防御特定类型攻击,通过序列号防数据重放、通过认证防中间人攻击。
- 提供设备之间安全算法和秘钥的协商能力,提供安全的在线秘钥生成机制。
- 提供隧道和安全两种模式,满足不同的网络结构需求。
IPsec出现的原因
- 网络安全问题日益严重,需要保证数据在网络上的传输是安全的。
- 大多数保证数据安全的协议或技术都是在应用层,如SSL协议可以为WEB或FTP提供安全连接,但对于ping、Telnet、SNMP等无效。
- 需要在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配置步骤
- 定义协商第一阶段ISAKMP策略
- 定义ISAKMP消息的保护策略,包括加密算法、验证算法、验证方式等。
- 定义协商第二阶段IPsec SA策略
- 定义IP数据的保护策略,协议是使用ESP还是AH、加密算法、验证算法、封装模式是隧道模式还是传输模式等。
- 定义要被IPsec保护的数据。
- 定义crypt to map
- 定义IPsec SA对端通信实体,并配置协商第二阶段IPsec SA策略和保护数据。
在出接口上调用crypt to map
- 确保路由表中的路由能将被保护的数据从配置了crypt to map的出接口转发出去。
数据包经过IPsec实体时有三种处理方式:IPsec保护、丢弃或旁路(自由穿越,不受保护)。
IPsec学习笔记的更多相关文章
- IPsec 学习笔记
工作中需要,参考网上的资料对IPSecVPN进行学习,并通过博客记录下一些知识点作为学习记录和后续复习的材料. Transport Layer (TLS) 其中主要参考了以下文档: http://ww ...
- TCP协议和socket API 学习笔记
本文转载至 http://blog.chinaunix.net/uid-16979052-id-3350958.html 分类: 原文地址:TCP协议和socket API 学习笔记 作者:gilb ...
- 学习笔记:CentOS7学习之二十一: 条件测试语句和if流程控制语句的使用
目录 学习笔记:CentOS7学习之二十一: 条件测试语句和if流程控制语句的使用 21.1 read命令键盘读取变量的值 21.1.1 read常用见用法及参数 21.2 流程控制语句if 21.2 ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
随机推荐
- RabbitMQ-从基础到实战(3)— 消息的交换(上)
转载请注明出处 0.目录 RabbitMQ-从基础到实战(1)— Hello RabbitMQ RabbitMQ-从基础到实战(2)— 防止消息丢失 RabbitMQ-从基础到实战(4)— 消息的交换 ...
- [转帖] 一文看懂:"边缘计算"究竟是什么?为何潜力无限?
一文看懂:"边缘计算"究竟是什么?为何潜力无限? 转载cnbeta 云计算 雾计算 边缘计算... 知名创投调研机构CB Insights撰文详述了边缘计算的发展和应用前景 ...
- EntityFramework中Json序列化的循环引用问题解决--Newtonsoft.Json
1.在使用EF时,由于数据库主外键关联,将对象进行Json序列化时会遇到循环引用的问题 //EF 中由于数据库主外键关联,对象的序列化经常出现循环引用问题 //使用.Net 自带的序列化工具,序列化出 ...
- Spring定时服务QuartZ
在JavaEE系统中,我们会经常用到定时任务,比如每天凌晨生成前天报表,每一小时生成汇总数据等等. 我们可以使用java.util.Timer结合java.util.TimerTask来完成这项工作, ...
- 【Revit API】创建工作集并将element加入工作集中
话不多说,直接上代码! public class WorkSetHelper { public void AddElementsToWorkSet(Document doc, List<Elem ...
- BZOJ 3625: [Codeforces Round #250]小朋友和二叉树
3625: [Codeforces Round #250]小朋友和二叉树 Time Limit: 40 Sec Memory Limit: 256 MBSubmit: 304 Solved: 13 ...
- Python OS模块中的fork方法实现多进程
import os '''使用OS模块中的fork方式实现多进程''' '''fork方法返回两次,分别在父进程和子进程中返回,子进程中永远返回0,父进程返回的是子进程的is''' if __name ...
- 使用IntelliJ IDEA工具创建SSM(Spring+MyBatis)项目
1. 安装和使用IntelliJ IDEA 参考:IntelliJ IDEA 的安装和使用教程 2. 创建Web项目 参考:IntelliJ IDEA 创建Java Web项目 3. Spring整合 ...
- js基础回顾----原型链和原型
所有的对象都可以自由扩展属性 (null 除外) 所有的引用类型(对象,数组,函数)都有一个_proto_属性 所有的函数都有一个prototype属性 所有引用类型对象的_proto_属性指向它的的 ...
- Content-Type:几种常用数据编码格式
Content-Type: 用于定义用户的浏览器或相关设备如何显示将要加载的数据,或者如何处理将要加载的数据. 内容类型,一般指网页中存在的Content-Type,Content-Type属性指定请 ...