IPSEC的实现方式
IPSEC的实现方式
在IPSEC通信中涉及到一个重要方面,那就是如何定义要保护的数据流(又称为感兴趣流)。这不仅涉及到IPSEC最终要保护哪部分数据,还关系到IPSEC的实现方式,因此有必要把感兴趣流的定义方式进行详细说明。
1. 感兴趣流的定义方式
“感兴趣流”指的是哪些数据可以进入IPsec隧道进行传输,哪些数据不能进入IPsec隧道传输。在现有的IPsec 实现过程中,最常用的实现方式有两种:“基于ACL”、“基于虚拟隧道接口”。下面我们对这两中方式进行详细的介绍。
2. 基于ACL(访问控制)方式
我们知道,高级IP ACL可以基于源/目的IP地址、源/目的端口、协议等信息对数据报文进行过滤, 而这IPsec正好可以使用ACL的方式来确定哪些数据报文需要隧道保护。
当使用当采用ACL的方式来定义“感兴趣流”时,手动方式和IKE协商方式建立的IPsec 隧道是由高级ACL来指定需要保护的数据流范围,并从中过滤出需要进行IPsec隧道的报文。ACL规则允许的报文(permit)将被保护;ACL规则拒绝的报文(deny)将不会被保护。
因为这里的ACL为高级IP ACL, 所以可以明确的指定数据报文中的源/目的IP地址**、源/目的端口、**协议类型等参数。但是这里的源、目的IP地址指数据发送方和接收方的主机IP地址,通常是两端内部网络中的私网地址。
这种基于ACL方式定义感兴趣流的方式的优点是:
可以利用ACL配置的灵活性,根据IP地址、端口信息、协议类型(TCP, UDP, ICMP, IP等)等信息对报文进行过滤从而指定灵活的IPSec保护方法。
3. 基于虚拟隧道接口方式
基于虚拟隧道接口来定义需要保护的数据流,首先需要在两端的IPsec设备创建一个虚拟的隧道接口Tunnel, 然后通过配置以该Tunnel接口为出接口的静态路由,以此来将到达某一个子网的数据流量通过IPSec隧道进行转发。因为Tunnel接口为点对点类型的接口,是运行PPP链路层协议的,因此以该接口为出接口的静态路由是可以不指定下一跳IP地址的。
IPsec虚拟隧道接口是一种三层逻辑接口,采用这种方式时,所有路由到IPsec虚拟隧道接口上的报文都将进行IPSec保护,而不再对数据流类型进行细分。使用IPSec虚拟隧道接口有如下诸多优点:
简化配置
只需要将IPSec保护的数据流引到虚拟隧道接口上,无需再通过ACL来定义加解密流量的特征。这使得IPSec的配置不会受到网络规划的影响,增加了网络规划的可扩展性,降低了网络维护的成本。
较小开销
在保护远程接入用户流量的组网中,只需要在IPSec虚拟隧道接口处进行IPSec报文封装,与IPSec over GRE 或者 IPSec over L2TP方式的隧道封装相比,较少了封装层次,节省了带宽。
支持范围更广
点对点IPSec虚拟隧道接口可以支持动态路由协议,同时还可以支持对组播流量的报文。另外,IPSec虚拟隧道接口在实施过程中明确的区分出“加密前”和“加密后”两个阶段,用户可以根据不同的组网需求灵活的选择其他业务(例如NAT, QoS)实施的阶段。 例如用户希望对加密前的报文进行QoS,则可以在IPSec虚拟隧道接口上应用QoS策略;如果希望对IPSec封装后的报文应用QoS,则可以在报文发送的物理接口上应用QoS策略。
4. 虚拟隧道接口
IPSec 虚拟隧道接口(即Tunnel接口),是一种支持路由的三层逻辑接口,它可以支持动态路由协议、所有路由到IPSec虚拟隧道接口的报文都将进行IPSec保护,同时可以支持对组播流量的保护。
下面简单介绍下IPSec隧道两端的虚拟隧道接口上报文处理流程:
4.1 IPSec虚拟隧道接口上封装和加密流程
用户数据到达IPSec设备(如路由器),需要被IPSec保护的报文(感兴趣流)会被转发到IPSec虚拟隧道接口上进行封装和加密。如下图所示:

- Router将从入接口上收到的明文IP报文后发送到转发模块进行处理
- 转发模块依据路由表查询结果进行转发,如果为相应的感兴趣流,会被引到IPSec虚拟隧道接口上进行AH或ESP封装;
- IPSec虚拟隧道接口完成对明文的封装处理后,根据建立的IPSec SA安全策略再将封装后的报文进行加密,然后再将加密后的报文交由转发模块进行处理
- 转发模块通过第二次转发查询后,将已经封装完毕的加密IPSec报文通过相应的物理接口发送出去,最终密文到达对端的IPSec设备的虚拟隧道接口上。
4.2 IPSec虚拟隧道接口上解封装和解密流程
数据经过IPSec隧道传输到达对端IPSec设备时,需要对数据包进行解密、解封装处理。它的处理流程如下所示:

- Router将从入接口上收到的加密的IP报文发送到转发模块进行处理
- 转发模块识别到此密文的目的IP地址为本设备的隧道接口IP地址,且IP报文协议号为ESP、AH、UDP时,会将此报文发送到相应的虚拟隧道接口上进行解密和解封装处理;
- IPSec虚拟隧道接口完成对密文的解封装处理后,再将解封装后的报文交由转发模块进行处理
- 转发模块通过第二次转发查询后,将IP明文通过相应的物理接口发送出去,最终密文到达相应的主机上。
IPSEC的实现方式的更多相关文章
- IPSec
一. +IPSec(IP Security)Internet 协议安全性 是IFTF制定的为保证在Internet上传送数据的安全保密性能的框架协议 +IPSec包括报文验证头协议AH(协议号51)和 ...
- [转帖] IPsec相关知识 --未知来源
目 录 IPsec IPsec简介 IPsec的协议实现 IPsec基本概念 加密卡 IPsec虚拟隧道接口 使用IPsec保护IPv6路由协议 IKE IKE简介 IKE的安全机制 IKE的交换过 ...
- IPSec协议框架
文章目录 1. IPSec简介 1.1 起源 1.2 定义 1.3 受益 2. IPSec原理描述 2.1 IPSec协议框架 2.1.1 安全联盟 2.1.2 安全协议 报文头结构 2.1.3 封装 ...
- 技术分析:Femtocell家庭基站通信截获、伪造任意短信
阿里移动安全团队与中国泰尔实验室无线技术部的通信专家们一起,联合对国内运营商某型Femtocell基站进行了安全分析,发现多枚重大漏洞,可导致用户的短信.通话.数据流量被窃听.恶意攻击者可以在免费申领 ...
- IPsec_VPN实现技术【转载】
GRE Tunnel GRE Tunnel(General Routing Encapsulation 通用路由封装)是一种非常简单的VPN(Virtual Private Network 虚拟专用网 ...
- Femtocell家庭基站通信截获、伪造任意短信漏洞
阿里移动安全团队与中国泰尔实验室无线技术部的通信专家们一起,联合对国内运营商某型Femtocell基站进行了安全分析,发现多枚重大漏洞,可导致用户的短信.通话.数据流量被窃听.恶意攻击者可以在免费申领 ...
- [转]Mac下配置基于SecurID的Cisco IPSec VPN全攻略(有图)
来自: http://www.eefocus.com/Kevin/blog/11-09/230878_53c71.html RSA的SecurID长的是这个样子滴: Mac里面,可以设置VPN, 方法 ...
- 安全协议系列(五)---- IKE 与 IPSec(上)
IKE/IPSec 属于网络层安全协议,保护 IP 及上层的协议安全.自上个世纪末面世以来,关于这两个协议的研究.应用,已经非常成熟.协议本身,也在不断地进化.仅以 IKE 为例,其对应的 RFC 编 ...
- 利用开源软件strongSwan实现支持IKEv2的企业级IPsec VPN,并结合FreeRadius实现AAA协议(下篇)
续篇—— 利用开源软件strongSwan实现支持IKEv2的企业级IPsec VPN,并结合FreeRadius实现AAA协议(上篇) 上篇文章写了如何构建一个支持IKEv2的VPN,本篇记录的是如 ...
随机推荐
- React Hooks的理解
一.是什么 Hook 是 React 16.8 的新增特性.它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性 至于为什么引入hook,官方给出的动机是解决长时间使 ...
- KMP算法的详细解释
什么是kmp算法呢?这是一个处理字符串的算法,用来判断给出的模式串p是否存在于文本串t中(p的长度小于t). 在本文中,字符串储存在字符数组中,并且第一个字符放在下标为1的元素中. 那么如何理解kmp ...
- Spring Cloud Alibaba - Feign
Feign Feign简介 使用Feign实现消费者客户端 使用Feign+Ribbon实现客户端负载均衡 底层的负载均衡策略还是使用Ribbon通过Feign进行调用 Feign的相关配置 ribb ...
- JVM学习笔记-第六章-类文件结构
JVM学习笔记-第六章-类文件结构 6.3 Class类文件的结构 本章中,笔者只是通俗地将任意一个有效的类或接口锁应当满足的格式称为"Class文件格式",实际上它完全不需要以磁 ...
- 自己动手实现Lua--实现TAILCALL指令
最近在看<自己动手实现Lua-虚拟机.编译器和标准库>.这是本挺不错的书,通过学习此书能够对Lua语言有比较深刻的理解,此外还可以对如何自己实现一门脚本语言有直观的认识.对于想学习Lua的 ...
- 解决vscode+python不提示numpy函数的问题
前言 使用vscode编写numpy代码时,对于numpy.array()等方法总是无法提示.查找了很多博客后,大部分都是修改配置和安装多种vscode插件,经过尝试后方法对于我来说无效.最后在调试p ...
- Block循环引用详解
前言 在项目中经常用到block,使用不当就很容易因为循环引用而造成内存泄漏.本文分析了block循环引用形成原因以及处理办法,如果有什么不对或者疑问请留言. 什么情况下block会造成循环引用 bl ...
- Linux搭建Ldap服务器
一,服务器安装 yum install -y openldap openldap-clients openldap-servers migrationtools 二,配置ldap服务器 2.1配置ld ...
- spring-cloud-sleuth+zipkin追踪服务
1, 父Maven pom 文件 <parent> <groupId>org.springframework.boot</groupId> <artifact ...
- WebAPI中controller添加[AllowAnonymous]无效的解决方法
对于Methods添加[AllowAnonymous]可以进行匿名访问,但是对于Controller添加时无效 public class AuthAttribute : AuthorizationFi ...