SPD、SAD、Traffic Selector和IKE收发数据包的处理过程

2023-10-10 20:50

本文主要是介绍SPD、SAD、Traffic Selector和IKE收发数据包的处理过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在IPSec的安全体系中,有两个很重要的数据库。一个是SPD - Security Policy Database;另一个是SAD - Security Association Database。顾名思义,SPD中定义了若干策略,说明对于各个IP数据流应当做出怎样的处理,是透传、丢弃,还是执行IPSec加解密。SAD则负责保存已经建立的SA相关信息,比如SA的各种参数,如加密算法、认证算法、生存时间等。


下面以一个例子为线索,说明它们之间的关联关系。网络结构如下:



描述:

设备10.0.68.5在Spoke-2-East的局域网10.0.68.0/24内部。它想要跟另一台位于VPN-GW1-EAST的局域网10.1.1.0/24中的设备10.1.1.5进行通信。


通信过程如下:

1. 当一个IP包从10.0.68.5发往目的地址10.1.1.5,数据包首先通过局域网设备到达路由器SPOKE-2-EAST。它上面的配置信息确定了通过网络接口serial0/0来讲此数据包路由到Internet。

2. 在数据包被路由出去之前,路由器会首先检查serial0/0接口的SPD。


SPD的内容如下:


研究一下这个SPD。其中每一行代表一个SPD Entry。Local IP / Local Port / Remote IP / Remote Port / Protocol都是traffic selector。Action表示对满足条件的IP流执行怎样的策略,是DISCARD / BYPASS,或者是应用IPSEC加密? Policy表示,一旦采用IPSec加密,那么在协商SA时应当建议怎样的算法等等。目前SA entry都为空,因为还没有建立任何SA。


再仔细观察,可以发现每个Traffic Selector都有一个sharing? 这表示什么意思呢?RFC4301规定,每个Selector都包含一个PFP flag(Populate from packet)。它可以设置成True或者False。当此标志被设定为True,则表示在创建一个SA时使用packet中的Traffic selector payload来作为selector,否则使用SPD中的Selector。举一个具体的例子,比如,现在10.0.68.5想要想10.1.1.5发送http请求。根据SPD,它满足最上面的index为9的规则。由于SA不存在,所以在IKE_AUTH交换后将生成必要的SA。在生成新的SA时,发现规则9中的Local IP / Remote IP的PFP flag都为false,也就是说允许SA sharing。那么将利用规则9中的Traffic Selector来生成一个共享SA,所有从10.0.68.5到10.1.1.0/24网段的TCP流都将使用这个新生成的SA来加密。相反的,如果PFP为True,也就是不允许SA sharing,那么在生成SA时将使用IKE_AUTH消息中的Traffic Selector Payload中协商好的Traffic Selector。假如Traffic Selector Payload中指定Tsi为10.0.68.5,而Tsr为10.1.1.5,那么新生成的SA只对10.0.68.8和10.1.1.5之间的TCP数据流提供IPSec保护。


稍作总结,PFP flag描述了在生成一个SA时是使用SPD Entry中的Traffic Selector还是使用IKE_AUTH / IKE_CREATE_CHILD消息的Traffic Selector Payload中的Traffic Selector。如果使用前者,意味着SPD中的每条规则将只对应一对SA,如此处的从10.0.68.5与10.1.1.0/24网段的一对SA。而如果使用后者,那么生成的新SA可能只是对应着SPD Entry中描述的一个子集,如此处,可能10.0.68.5和10.1.1.5之间就有一对专用SA,而10.0.68.5再与10.1.1.8通信可能会建立起另外一对SA。这样,一个SPD Entry所对应的Policy可能生成多个SA。


在这里,我们发现在SPD Entry中有一对SAD Entry的指针。但是,其实在RFC4301中对SPD Entry结构的定义中,并没有要求在SPD Entry中包含SAD Entry的指针。此处的SPD表只是实现的一种方式。在具体实现中,完全可以没有这个指针。当从SPD中了解到需要对一个IP流采用的策略后,再到SAD中查找是否有对应的SA。在SPD中包含SAD Entry的指针可以提高效率。但是如果一个SPD Entry对应多个SA,此处就需要有一种机制从多个SA Entry指针中找到最匹配的一个。


SAD:

SPD是一个策略数据库,描述了对每一个IP数据报应该采取的策略,是透传、丢弃或者做IPSec加解密。同时,它还为SA的建立提供协商用的参数,比如,加密套件,生存时间等。新生成的SA则被插入到SAD中。每当发出或者接收到一个数据包的时候,如果对它的策略是IPSec,那么就要去SAD中找到对应的SA,根据SA中提供的参数,对数据包进行加解密、生成校验和、封装成AH/ESP等操作。


3. 到目前为止,我们已经从SPD和SAD中了解到负责此IP数据报的SA还没有建立。Spoke-2-East将首先向远端的VPN-GW1-East发起第一个IKE的协商请求。协商成功后,两个安全网关之间将为从10.0.68.5和10.1.1.0/24之间的通信生成一个Ipsec SA。


4. 当VPN-GW1-East收到加密的数据包的时候。它将首先利用外层的目的地址、ESP协议号和ESP头部的SPI为索引,从SAD中检索SA。如果找到,利用SA的参数对数据包进行解密,然后对解密的数据包应用SPD规则。此时,使用的是内部IP,因为数据包已经被解密了。

这篇关于SPD、SAD、Traffic Selector和IKE收发数据包的处理过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/183019

相关文章

android xml之Drawable 篇 --------shape和selector和layer-list的

转自 : http://blog.csdn.net/brokge/article/details/9713041 <shape>和<selector>在Android UI设计中经常用到。比如我们要自定义一个圆角Button,点击Button有些效果的变化,就要用到<shape>和<selector>。 可以这样说,<shape>和<selector>在美化控件中的作用是至关重要。 在

【vue使用Sass报错】启动项目报错 Syntax Error: SassError: expected selector

出现的问题 新项目启动的时候,提示: Syntax Error: SassError: expected selector 看了一下发现是sass使用样式穿透/deep/报的错 /deep/其实是已经过期的写法,某个版本之后就不支持了 但是我同事并没有出现同样的问题,不知道是为啥,也有可能是电脑(mac)的原因 解决办法 将 /deep/更换为::v-deep 但是这个项目是多人协作的,有

Linux是如何收发网络包的

Linux网 络协议栈 从上述⽹络协议栈,可以看出: 收发流程 ⽹卡是计算机⾥的⼀个硬件,专⻔负责接收和发送⽹络包,当⽹卡接收到⼀个⽹络包后,会通过 DMA 技术,将⽹络包放⼊到 Ring Buffer ,这个是⼀个环形缓冲区。 1 、发送 ⾸先,应⽤程序会调⽤ Socket 发送数据包的接⼝,由于这个是系统调⽤,所以会从⽤户态陷⼊到内核

安卓用代码来实现selector

android可以通过XML文件来创建selector,以Drawable对象的形式安装到组件上,以提供统一的风格设置。但是在某些时候,我们需要通过代码的形式来实现相同的功能,例如组件数量非常多,对应不同的图片,这时候如果还用XML的话就需要创建大量的selector文件,非常繁琐。     例如一个TextView使用了如下的selector < TextView

python socket TCP/UDP/MULTICAST 收发示例

python socket TCP/UDP/MULTICAST 收发示例 一、接收端 import socketimport structdef tcp_onece_receiver(port):"""只接收一次 TCP 消息"""# 创建 TCP 套接字sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定到本地端口sock

[米联客-XILINX-H3_CZ08_7100] FPGA程序设计基础实验连载-30 RS485串口程序收发环路设计

软件版本:VIVADO2021.1 操作系统:WIN10 64bit 硬件平台:适用 XILINX A7/K7/Z7/ZU/KU 系列 FPGA 实验平台:米联客-MLK-H3-CZ08-7100开发板 板卡获取平台:https://milianke.tmall.com/ 登录“米联客”FPGA社区 http://www.uisrc.com 视频课程、答疑解惑! 目录 1概述

Android Selector和Shape的使用方法

本文介绍下背景选择器、文字颜色选择器、背景渐变器的实现。结合Shape来实现背景渐变效果。或者只是以color代替drawable作为背景选择器的元素 1.背景选择器(位于res/drawable/,使用方法:android:background=”@drawable/XXX”) 复制代码 代码如下: <?xml version="1.0" encod

使用java mail进行简单的邮件收发

今天开发过程中遇到降价通知的问题,价格下降了则发送email到指定邮箱。顺便学习下java如何进行简单的邮件收发。  sun公司提供的 java mail api能够很好的解决这个问题,下面是具体的思路与代码。  1、发邮件:  主要分为以下四个步骤:  a、创建收发邮件session(创建时可以使用java.util.properties类进行各类参数的写入,并使用A

深入解析Android中的selector

有时候我们需要根据一个组件的不同状态来显示不同的图片,不如说一个按钮,就包含点击,聚焦,或者既不点击又不聚焦等状态,要使按钮在不同的状态下显示不同的样式或图片,这时就要用到selector,可以把组件的不同状态定义在一个xml文件中。 下面是一个实例: EditText中随着文本框的状态来动态的改变输入的文字的颜色: activity_main.xml<?xml version="1.0"

ChatTCP:一款离线TCP数据包分析macOS APP,致力于让分析TCP数据包像看聊天记录一样简单

ChatTCP是一款离线TCP数据包分析macOS APP,致力于让分析TCP数据包像看聊天记录一样简单!已为UI交互方式申请专利,独家聊天会话方式分析TCP数据包,给你不一样的TCP数据包分析体验! ChatTCP是Easy TCP Analysis的离线版本,离线版本更名为ChatTCP,目前只提供macOS版本。经过一段时间的迭代,目前离线版本功能基本追上在线版本。 当前有哪些功能?