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服务

  1. 数据源认证:验证发送者身份
  2. 数据完整性:确保数据未被篡改
  3. 机密性:加密数据内容
  4. 抗重放攻击:防止数据包重放
  5. 有限流量机密性:隐藏流量特征

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处理过程

加密过程

  1. 数据准备:准备要加密的数据
  2. 添加填充:添加填充字节使其满足加密块大小要求
  3. 加密数据:使用选定算法加密数据
  4. 添加尾部:添加Pad Length和Next Header字段
  5. 添加头部:添加SPI和Sequence Number
  6. 认证计算:计算ICV(如果启用认证)
  7. 发送数据包

解密过程

  1. 接收数据包:验证ESP头部
  2. 认证验证:验证ICV(如果启用认证)
  3. 解密数据:解密加密的数据
  4. 去除填充:去除填充字节
  5. 提取数据:提取原始数据
  6. 向上层传递

IKE(Internet Key Exchange)

IKE是IPSec的密钥交换协议,用于协商安全关联和交换密钥。

IKE版本

  • IKEv1:RFC 2409,较复杂
  • IKEv2:RFC 7296,简化设计,推荐使用

IKEv2协议

IKEv2交换类型

  1. IKE_SA_INIT:初始交换,协商加密算法和DH密钥
  2. IKE_AUTH:认证交换,验证身份和建立SA
  3. CREATE_CHILD_SA:创建子SA
  4. 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技术比较

特性IPSecSSL/TLS VPNL2TP
协议层网络层应用层数据链路层
加密端到端端到端端到端
NAT支持需要NAT-T原生支持原生支持
客户端操作系统支持浏览器支持需要客户端
部署复杂度中等简单中等
灵活性中等中等

IPSec未来发展趋势

1. IKEv2优化

  • 简化流程:减少握手轮次
  • 移动优化:更好的移动设备支持
  • 多路复用:支持多流复用

2. 后量子IPSec

  • 后量子密钥交换:支持后量子密钥交换
  • 混合加密:经典与量子算法结合
  • 平滑迁移:向后兼容的迁移方案

3. 云网络集成

  • 云IPSec:云环境IPSec优化
  • 软件定义IPSec:SDN集成IPSec
  • 微分段IPSec:微服务间IPSec

🔗 相关链接


最后更新:2025-01-26 维护规范:详见 笔记规范文档

IPSec VPN 网络安全 加密 IKE