填坑:IPsec不同安全协议的报文封装结构对比

简介: 填坑:IPsec不同安全协议的报文封装结构对比

回顾一下,前面两个IPsec实验挖了一个坑,就是IPsec和GRE在组合使用的时候,出现了MTU值无法验证的情况,今天来填一下坑。


结合RFC2401、RFC2402、RFC2406的相关说明:


IPsec SA(Security Association,安全联盟)分为两种类型:传输模式和隧道模式。


传输模式 SA 是两个主机之间的安全联盟。在 ESP 的情况下,传输模式 SA 仅为这些更高层协议提供安全服务,而不是为 IP 标头或 ESP 标头之前的任何扩展标头提供安全服务。在 AH 的情况下,保护还扩展到 IP 标头的选定部分、扩展标头的选定部分和选定的选项。


隧道模式SA本质上是应用于IP隧道的SA。每当SA的任一端是安全网关时,SA 必须是隧道模式。因此,两个安全网关之间的 SA 始终是隧道模式 SA,主机和安全网关之间的 SA 也是如此。


对于隧道模式 SA,有一个“外部”IP 标头指定 IPsec 处理目的地,加上一个“内部”IP 标头,指定数据包的(表面)最终目的地。安全协议头出现在外部 IP 头之后,内部 IP 头之前。如果在隧道模式下使用 AH,则外部 IP 报头的部分将受到保护(如上所述),以及所有隧道传输的 IP 数据包(即,所有内部 IP 报头都受到保护,以及更高层协议)。如果采用 ESP,则仅对隧道数据包提供保护,而不对外部报头提供保护。


总之,主机必须同时支持传输和隧道模式;要求安全网关仅支持隧道模式,如果安全网关支持传输模式,则应仅在安全网关充当主机时使用。


组网图


采用和第一次实验相同的组网图。

1677225443783.jpg

设备配置


IPsec这个实验我是在H3C模拟器HCL中做的,主要配置任务包括以下几点:


1、配置IPsec保护的数据流量。一般也称为感兴趣流,用ACL来进行匹配;


2、配置IPsec安全提议。指定对IP报文的封装形式为传输模式或隧道模式,选择安全协议为AH或ESP或AH-ESP,并配置与之对应的加密算法及认证算法;


3、配置IPsec安全策略。包含配置应用感兴趣流,应用IPsec安全提议,指定IPsec隧道地址,配置安全协议的SPI(Security Parameter Index,安全参数索引)和SA(Security Association,安全联盟)密钥;


4、在接口上应用IPsec安全策略。


所以,今天,我们将主要通过调整安全协议、加密算法和认证算法来验证一下。


IPsec安全提议支持的安全协议有AH、ESP和AH-ESP,相关协议介绍请参照相关RFC文档,不同安全协议的数据封装格式如下图所示:

1677225464019.jpg

模拟器支持的安全协议:

1677225480353.jpg

 

缺省情况下,采用ESP安全协议,那就延用上个实验的环境,先测一下ESP安全协议。


使用ESP安全协议的报文结构


已知使用ESP封装的报文,MTU值为1400字节。从RFC2406我们得知,ESP封装报文头格式如下:

1677225493304.jpg

虽然抓包的可读性比较差,但还是要做一下分析。

1677225505014.jpg

将标准的封装格式和实际报文进行对比,可以得出:


1、SPI字段长度为4字节;


2、序列号字段长度为4字节;


3、加密填充内容字段长度可变,长度为0-255字节;


4、填充长度字段长度为1字节;


5、下一个头部字段长度为1字节;


6、认证数据字段长度可变,并且是可选的。


所以上面1和2为ESP头,3-6位ESP-T(校验尾),初步推算ESP-T长度为44字节。


所以使用ESP封装的完整报文结构如下图所示:

1677225520441.jpg

使用AH安全协议的报文结构


修改安全协议在IPsec的安全提议transform-set中,重新配置安全协议为AH。并在IPsec策略中修改SA的SPI和密钥。


#
ipsec transform-set tran1
 protocol ah
 ah authentication-algorithm sha1
#
ipsec policy ipsec 10 manual
sa spi inbound ah 123321
sa string-key inbound ah simple 123321
sa spi outbound ah 123321
sa string-key outbound ah simple 123321

查看SA信息,发现协议已经是AH了,并且没有加密算法。

1677225578259.jpg

 

测试封装后的MTU为1428字节。

1677225583820.jpg

 

抓包进行分析,发现仅仅是在原始报文头部加了一个认证头,没有对报文进行加密,原始报文数据一目了然。

1677225590684.jpg

对比RFC2402中的报文结构,AH头部封装和协议中完全一致。RFC2402中AH ICV字段为可变长度,此处该字段长度为12字节。

1677225603444.jpg

 

所以使用ESP封装的完整报文结构如下图所示:

1677225608178.jpg

组合使用AH-ESP安全协议的报文结构


再从IPsec的安全提议transform-set中,配置安全协议为AH-ESP。并在IPsec策略中添加SA的SPI和密钥。需要注意,AH和ESP的SPI值不能重复,否则无法配置。


#
ipsec transform-set tran1
esp encryption-algorithm aes-cbc-128
esp authentication-algorithm sha1
#
ipsec policy ipsec 10 manual
sa spi inbound ah 123321
sa spi inbound esp 321123
sa string-key inbound ah simple 123321
sa string-key inbound esp simple 123321
sa spi outbound ah 123321
sa spi outbound esp 321123
sa string-key outbound ah simple 123321
sa string-key outbound esp simple 123321

查看SA信息,能发现SA中同时包含AH和ESP,加密算法和认证算法均有体现。

1677225704957.jpg

 

测得封装后的链路MTU为1376字节。

1677225710484.jpg

 

抓包进行分析,发现报文封装结构和之前学习的一样,先封装ESP,再加一个AH认证头。

1677225715611.jpg

所以组合使用AH和ESP封装的完整报文结构如下图所示:

1677225725641.jpg

修改ESP加密算法


验证完了安全协议,那加密算法会不会对报文封装有影响呢?

这个验证还是比较简单的,仅需要在IPsec安全提议transform-set中修改加密算法即可,此处将原来的aes-cbc-128算法修改为aes-ctr-256。

#
ipsec transform-set tran1
 protocol ah-esp
 esp encryption-algorithm aes-ctr-256
 esp authentication-algorithm sha1
 ah authentication-algorithm sha1
修改之后查看SA信息,验证加密算法修改成功。

1677225783781.jpg

测试修改加密算法之后的MTU值为1384字节,比使用aes-cbc-128的1376字节增加8字节。

1677225799713.jpg

 

总结


1、使用不同安全协议的报文封装结构如下图所示:

1677225804746.jpg

2、使用的加密算法和认证算法在SA中均可查看;

3、ESP使用的加密算法不同,ESP校验尾部填充报文长度不同;

4、同时使用AH和ESP封装时,需要在IPsec策略中分别配置SA的AH-SPI值和ESP-SPI值,并且两个值不可以相同。

相关文章
|
JSON 网络协议 数据格式
curl常用参数详解及示例
curl是一个开源的命令行工具,它基于网络协议,对指定URL进行网络传输,得到数据后不任何具体处理(如:html的渲染等),直接显示在"标准输出"(stdout)上。
4792 1
|
安全 网络协议 算法
AH 协议详解
【2月更文挑战第25天】
|
网络协议 数据安全/隐私保护 网络架构
【个人笔记】计算机网络五层结构理解
【个人笔记】计算机网络五层结构理解
|
数据可视化 IDE 编译器
Open CASCADE之v7.4.0源码编译与可视化调试,使用VS2017+32位编译器(1)
Open CASCADE之v7.4.0源码编译与可视化调试,使用VS2017+32位编译器
2062 0
Open CASCADE之v7.4.0源码编译与可视化调试,使用VS2017+32位编译器(1)
|
自然语言处理 并行计算 PyTorch
GitHub 开源神器 Bark模型,让文本转语音更简单!
GitHub 开源神器 Bark模型,让文本转语音更简单!
1053 0
|
NoSQL Java 微服务
2025 年最新 Java 面试从基础到微服务实战指南全解析
《Java面试实战指南:高并发与微服务架构解析》 本文针对Java开发者提供2025版面试技术要点,涵盖高并发电商系统设计、微服务架构实现及性能优化方案。核心内容包括:1)基于Spring Cloud和云原生技术的系统架构设计;2)JWT认证、Seata分布式事务等核心模块代码实现;3)数据库查询优化与高并发处理方案,响应时间从500ms优化至80ms;4)微服务调用可靠性保障方案。文章通过实战案例展现Java最新技术栈(Java 17/Spring Boot 3.2)的应用.
1107 9
|
机器学习/深度学习 传感器 人工智能
模型微调
本文深入探讨了从GPT3到ChatGPT及DeepSeek等大模型中微调技术的关键作用。微调(Fine-tuning)是在预训练模型基础上,通过特定任务数据调整参数以优化性能的技术。文中对比了全参数微调与参数高效微调(如LoRA、Adapter),并介绍了模型蒸馏和强化学习在AI优化中的角色。通过实例解析,如“厨师学川菜”,生动说明了微调的原理与优势。此外,还提供了云平台(如百炼、Hugging Face Space)上的微调实践指南,帮助开发者快速上手。未来,随着算力提升和新技术发展,微调将更高效、广泛应用于各类场景。
|
存储 算法 安全
BGP Keychain认证的原理与实现
【7月更文挑战第15天】
529 2
BGP Keychain认证的原理与实现
|
存储 网络协议
技术心得记录:数据链路层学习之LLDP
技术心得记录:数据链路层学习之LLDP
|
Kubernetes 负载均衡 监控
从零开始入门 K8s | Kubernetes 网络模型进阶
导读:本文将基于之前介绍的基本网络模型,进行更深入的一些了解,希望给予读者一个更广更深的认知。首先简单回顾一下容器网络的历史沿革,剖析一下 Kubernetes 网络模型的由来;其次会剖析一个实际的实现(Flannel Hostgw),展现了数据包从容器到宿主机的变换过程;最后对于和网络息息相关的 Servcie 做了比较深入的机制和使用介绍,通过一个简单的例子说明了 Service 的工作原理。
从零开始入门 K8s | Kubernetes 网络模型进阶

热门文章

最新文章