IPSec协议(IPSec Protocol)
IPSec(Internet Protocol Security)是一套协议族,用于在IP层提供网络安全服务,保护IP通信的机密性、完整性和真实性
IPSec概述
IPSec是由IETF开发的一套网络层安全协议,用于在IP网络上提供安全服务。它可以在IP层对数据进行加密和认证,保护整个IP包。
IPSec历史发展
1993: IPSec工作组成立
1995: 最初的IPSec RFC发布
1998: IPSec v1.0 (RFC 2401-2412)
2005: IPSec v2.0 (RFC 4301-4309)
2014: IPSec v3.0 (RFC 6071更新)
IPSec在协议栈位置
应用层 (HTTP, FTP, SMTP...)
│
▼
传输层 (TCP, UDP)
│
▼
网络层 ←→ IPSec处理
│
▼
数据链路层 (Ethernet, Wi-Fi)
IPSec协议体系
IPSec协议族组成
IPSec协议族
├── AH (Authentication Header)
├── ESP (Encapsulating Security Payload)
├── IKE (Internet Key Exchange)
├── ISAKMP (Internet Security Association and Key Management Protocol)
├── Oakley Key Determination Protocol
└── SKEME (Secure Key Exchange Mechanism)
IPSec服务
- 数据源认证:验证发送者身份
- 数据完整性:确保数据未被篡改
- 机密性:加密数据内容
- 抗重放攻击:防止数据包重放
- 有限流量机密性:隐藏流量特征
IPSec模式
1. 传输模式
只加密IP载荷(上层协议数据),不加密IP头部。
数据包结构
原始IP包:
┌─────────────┬──────────────┬─────────────┐
│ IP头部 │ TCP头部 │ 数据 │
└─────────────┴──────────────┴─────────────┘
AH传输模式:
┌─────────────┬──────────────┬──────────────┬──────────────┬─────────────┐
│ IP头部 │ AH头部 │ TCP头部 │ 数据 │ AH认证 │
└─────────────┴──────────────┴──────────────┴──────────────┴─────────────┘
ESP传输模式:
┌─────────────┬──────────────┬──────────────┬──────────────┬─────────────┐
│ IP头部 │ ESP头部 │ TCP头部 │ 加密数据 │ ESP尾部 │
└─────────────┴──────────────┴──────────────┴──────────────┴─────────────┘
使用场景
- 主机到主机通信
- 保护路由协议
- 单个端点保护
2. 隧道模式
加密整个原始IP包,包括IP头部。
数据包结构
原始IP包:
┌─────────────┬──────────────┬─────────────┐
│ IP头部 │ TCP头部 │ 数据 │
└─────────────┴──────────────┴─────────────┘
AH隧道模式:
┌─────────────┬──────────────┬──────────────┬──────────────┬─────────────┐
│ 外部IP头部 │ AH头部 │ 内部IP包 │ 数据 │ AH认证 │
└─────────────┴──────────────┴──────────────┴──────────────┴─────────────┘
ESP隧道模式:
┌─────────────┬──────────────┬──────────────┬──────────────┬─────────────┐
│ 外部IP头部 │ ESP头部 │ 内部IP包 │ 加密数据 │ ESP尾部 │
└─────────────┴──────────────┴──────────────┴──────────────┴─────────────┘
使用场景
- 站点到站点VPN
- 远程访问VPN
- 网络安全网关
AH(Authentication Header)
AH提供数据源认证和完整性保护,但不提供加密服务。
AH头部结构
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Header | Payload Len | RESERVED |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Security Parameters Index (SPI) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number Field |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| Integrity Check Value-ICV (variable) |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
AH字段说明
- Next Header:标识AH后面的协议类型
- Payload Len:AH头部长度(以32位字为单位)
- SPI:安全参数索引,标识SA
- Sequence Number:抗重放攻击的序列号
- ICV:完整性校验值,通常使用HMAC
AH认证过程
1. 构建AH头部(不包含ICV字段)
2. 按照协议顺序组装数据包
3. 将不可变字段置零
4. 使用HMAC算法计算ICV
5. 将ICV填入AH头部
6. 发送数据包
AH缺点
- 不支持NAT:修改IP头部会破坏认证
- 无加密功能:只提供认证和完整性
- 协议开销大:增加24字节开销
ESP(Encapsulating Security Payload)
ESP提供加密、认证和完整性保护,是最常用的IPSec协议。
ESP数据包结构
传输模式
┌─────────────┬──────────────┬──────────────┬──────────────┬─────────────┐
│ IP头部 │ ESP头部 │ TCP头部 │ 数据 │ ESP尾部 │
└─────────────┴──────────────┴──────────────┴──────────────┴─────────────┘
↑ ↑ ↑
加密开始 加密结束 认证开始
隧道模式
┌─────────────┬──────────────┬──────────────┬──────────────┬─────────────┐
│ 外部IP头部 │ ESP头部 │ 内部IP包 │ 加密数据 │ ESP尾部 │
└─────────────┴──────────────┴──────────────┴──────────────┴─────────────┘
↑ ↑ ↑
加密开始 加密结束 认证开始
ESP头部结构
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Security Parameters Index (SPI) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number Field |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Payload Data* (variable) |
~ ~
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Padding (0-255 bytes) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Pad Length | Next Header | Integrity Check |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Check Value-ICV (variable) |
~ ~
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
ESP处理过程
加密过程
- 数据准备:准备要加密的数据
- 添加填充:添加填充字节使其满足加密块大小要求
- 加密数据:使用选定算法加密数据
- 添加尾部:添加Pad Length和Next Header字段
- 添加头部:添加SPI和Sequence Number
- 认证计算:计算ICV(如果启用认证)
- 发送数据包
解密过程
- 接收数据包:验证ESP头部
- 认证验证:验证ICV(如果启用认证)
- 解密数据:解密加密的数据
- 去除填充:去除填充字节
- 提取数据:提取原始数据
- 向上层传递
IKE(Internet Key Exchange)
IKE是IPSec的密钥交换协议,用于协商安全关联和交换密钥。
IKE版本
- IKEv1:RFC 2409,较复杂
- IKEv2:RFC 7296,简化设计,推荐使用
IKEv2协议
IKEv2交换类型
- IKE_SA_INIT:初始交换,协商加密算法和DH密钥
- IKE_AUTH:认证交换,验证身份和建立SA
- CREATE_CHILD_SA:创建子SA
- INFORMATIONAL:通知和删除SA
IKEv2交换流程
发起者 响应者
│ │
│ IKE_SA_INIT请求 │
├───────────────────────────────────→│
│ │
│ IKE_SA_INIT响应 │
├←───────────────────────────────────┤
│ │
│ IKE_AUTH请求 │
├───────────────────────────────────→│
│ │
│ IKE_AUTH响应 │
├←───────────────────────────────────┤
│ │
IKEv2消息格式
IKEv2消息:
┌─────────────┬──────────────┬──────────────┬──────────────┬─────────────┐
│ IKE头部 │ 负载1(SA) │ 负载2(KE) │ 负载3(Ni) │ ...更多 │
└─────────────┴──────────────┴──────────────┴──────────────┴─────────────┘
安全关联(SA)
SA是IPSec中描述安全参数的逻辑连接,定义了如何保护流量。
SA参数
- SPI:安全参数索引,标识SA
- 协议:AH或ESP
- 模式:传输模式或隧道模式
- 加密算法:AES、3DES等
- 认证算法:HMAC-SHA1、HMAC-SHA256等
- 密钥:加密和认证密钥
- 生存时间:SA的有效期
- 序列号:初始序列号
SA数据库
- SAD:安全关联数据库,存储活动SA
- SPD:安全策略数据库,定义流量处理规则
SA查找过程
收到IP包 → 查找SPD → 匹配策略 → 查找SAD → 获取SA → 处理数据包
IPSec部署方式
1. 主机到主机
两台主机之间直接建立IPSec连接。
主机A ←→ IPSec ←→ 主机B
2. 站点到站点
连接两个网络,保护网络间通信。
网络A ←→ IPSec网关A ←→ 公共网络 ←→ IPSec网关B ←→ 网络B
3. 远程访问
移动用户连接到公司网络。
移动用户 ←→ IPSec客户端 ←→ 公共网络 ←→ IPSec网关 ←→ 公司网络
IPSec配置实例
Linux strongSwan配置
/etc/ipsec.conf
config setup
charondebug="ike 2, knl 2, cfg 2"
uniqueids=no
conn roadwarrior
auto=add
compress=no
type=transport
keyexchange=ikev2
authby=secret
left=%defaultroute
leftid=@vpn.example.com
leftcert=vpnHostCert.pem
leftsendcert=always
leftsubnet=0.0.0.0/0
right=%any
rightid=%any
rightauth=eap-mschapv2
rightsourceip=10.0.0.0/24
rightdns=8.8.8.8
ike=aes256-sha1-modp2048!
esp=aes256-sha1!
/etc/ipsec.secrets
: RSA vpnHostKey.pem
user : EAP "password"
Cisco路由器配置
crypto isakmp policy 10
authentication pre-share
encryption aes 256
hash sha256
group 14
lifetime 86400
crypto isakmp key shared_secret address 203.0.113.2
crypto ipsec transform-set ESP-AES256-SHA256 esp-aes 256 esp-sha256-hmac
mode tunnel
crypto map IPSEC_MAP 10 ipsec-isakmp
set peer 203.0.113.2
set transform-set ESP-AES256-SHA256
match address 101
interface GigabitEthernet0/0
crypto map IPSEC_MAP
access-list 101 permit ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255
IPSec性能优化
1. 硬件加速
- 专用网卡:支持IPSec硬件加速的网卡
- 加密芯片:专用加密处理器
- CPU指令集:AES-NI等加密指令
2. 算法选择
| 算法 | 安全性 | 性能 | 推荐场景 |
|---|---|---|---|
| AES-128 | 高 | 好 | 通用场景 |
| AES-256 | 极高 | 中等 | 高安全需求 |
| AES-GCM | 高 | 好 | 高性能需求 |
| ChaCha20 | 高 | 好 | 移动设备 |
| 3DES | 低 | 差 | 兼容需求 |
3. MTU调整
IPSec封装增加数据包大小,需要调整MTU。
MTU计算:
原始MTU - IPSec开销 = 新MTU
以太网:
1500 - (IPSec开销) = 1400左右
IPSec安全考虑
1. 加密算法
- 推荐:AES-GCM、ChaCha20-Poly1305
- 避免:DES、3DES、RC4
- 定期更新:使用最新强加密算法
2. 密钥管理
- 强密钥:使用足够长度的密钥
- 定期轮换:定期更换密钥
- 安全存储:安全存储预共享密钥
3. 防护措施
- 抗重放:启用序列号检查
- DOS防护:限制连接速率
- 日志监控:监控异常活动
IPSec与其他VPN技术比较
| 特性 | IPSec | SSL/TLS VPN | L2TP |
|---|---|---|---|
| 协议层 | 网络层 | 应用层 | 数据链路层 |
| 加密 | 端到端 | 端到端 | 端到端 |
| NAT支持 | 需要NAT-T | 原生支持 | 原生支持 |
| 客户端 | 操作系统支持 | 浏览器支持 | 需要客户端 |
| 部署复杂度 | 中等 | 简单 | 中等 |
| 灵活性 | 高 | 中等 | 中等 |
IPSec未来发展趋势
1. IKEv2优化
- 简化流程:减少握手轮次
- 移动优化:更好的移动设备支持
- 多路复用:支持多流复用
2. 后量子IPSec
- 后量子密钥交换:支持后量子密钥交换
- 混合加密:经典与量子算法结合
- 平滑迁移:向后兼容的迁移方案
3. 云网络集成
- 云IPSec:云环境IPSec优化
- 软件定义IPSec:SDN集成IPSec
- 微分段IPSec:微服务间IPSec
🔗 相关链接
最后更新:2025-01-26 维护规范:详见 笔记规范文档