IPSec
IPSec (Internet Protocol Security、互联网安全协议) 协议族是 IETF(Internet Engineering Task Force)制定的一系列协议,它为 IP 数据报提供了高质量的、可互操作的、基于密码学的安全性
IPSec 组成
- IKE (Internet Key Exchange,因特网密钥交换)
IKE 协议是一种基于 UDP 的应用层协议,为 AH、ESP 操作所需的安全关联 (SA) 提供算法、数据包和密钥参数。IKE 混合了 ISAKMP(Internet Security Association and Key Management Protocol)、Oakley 协议和 SKEME 协议这三个协议- ISAKMP 定义 IKE SA 的建立过程
- Oakley 和 SKEME 协议的核心是 DH(Diffie-Hellman)算法,主要用于在 Internet 上安全地分发密钥、验证身份,以保证数据传输的安全性。IKE SA 和 IPSec SA 需要的加密密钥和验证密钥都是通过 DH 算法生成的,它还支持密钥动态刷新
- AH (Authentication Header、认证头)
AH 协议用来对 IP 报文进行数据源认证和完整性校验,即用来保证传输的 IP 报文的来源可信和数据不被篡改,但它并不提供加密功能。AH 协议在每个数据包的标准 IP 报文头后面添加一个 AH 报文头,AH 协议对报文的完整性校验的范围是整个 IP 报文 - ESP (Encapsulating Security Payload、封装安全载荷)
ESP 协议除了对 IP 报文进行数据源认证和完整性校验以外,还能对数据进行加密。ESP 协议在每一个数据包的标准IP报头后方添加一个 ESP 报文头,并在数据包后方追加一个 ESP 尾(ESP Trailer 和 ESP Auth data)。ESP 协议在传输模式下的数据完整性校验范围不包括 IP 头,因此它不能保证 IP 报文头不被篡改
AH 和 ESP 可以单独使用,也可以同时使用。AH 和 ESP 同时使用时,报文会先进行 ESP 封装,再进行 AH 封装;IPsec 解封装时,先进行 AH 解封装,再进行 ESP 解封装
IPSec 报文
IPSec 封装分为两种模式:
- 传输模式:AH 或 ESP 被插入到 IP 头之后但在所有传输层协议之前,或所有其他 IPSec 协议之前
- 隧道模式:AH 或 ESP 插在原始 IP 头之前,另外生成一个新 IP 头放到 AH 或 ESP 之前
AH 报头
AH 报头试图保护 IP 数据报的所有字段,但在传输 IP 分组的过程中要发生变化的字段就只能被排除在外
- Next Header : 下一个头,表示认证头报头之后的下一个报头类型
- Payload Len : 载荷长度
- Reserved : 保留位
- Security Parameters Index (SPI) : 用于给报文接收端识别 SA
- Sequence Number : 序列号,每发送一个报文,计数加 1,防止重放攻击
- Integrity Check Value (ICV) : 完整性检查,长度必须为 32 比特的整数倍
ESP 报头
- Security Parameters Index (SPI) : 用于给报文接收端识别 SA
- Sequence Number : 序列号,每发送一个报文,计数加 1,防止重放攻击
- Payload data : 载荷数据
- Padding : 填充位
- Pad Length : 填充位长度
- Next Header : 下一个头,表示认证头报头之后的下一个报头类型
- Integrity Check Value (ICV) : 完整性检查,长度必须为 32 比特的整数倍
AH 和 ESP 组合
ISAKMP 报文
- IKE_AS Initiator’s SPI : 发送者用来唯一标识一个 IKE 安全联盟,该值不能设置为 0
- IKE_AS Responder’s SPI : 应答者用来唯一标识一个 IKE 安全联盟,对于 IKE 初始交互的消息该值必须为 0,其他消息不能为 0
- Next Payload : 下一个头,表示认证头报头之后的下一个报头类型
- Version : IKE 版本
- MjVer : 大版本
- MnVer : 小版本
- Exchange Type : 类型
- 0-33 : RESERVED
- 34 : IKE_SA_INIT
- 35 : IKE_AUTH
- 36 : CREATE_CHILD_SA
- 37 : INFORMATIONAL
- 38-239 : RESERVED TO IANA
- 240-255 : Reserved for private use
- Flags : 标志位
- 0-2bit : X(reserved)
- 3 bit : I(nitiator)
- 4 bit : V(ersion)
- 5 bit : R(esponse)
- 6-7 bit : X(reserved)
- Message ID : 消息标识符,用来对请求消息和呼应消息的匹配,以便控制丢弃消息的重复发送
- Length : 整个数据的长度
- Next Payload : 下一个头,表示认证头报头之后的下一个报头类型
- Critical : 如果发送者想让接收者在无法识别当前一个负载的 Next Payload 域是能够跳过此域,可将此位置 0。如果接收者能够识别负载的类型代码,则忽略此位
- Reserved : 保留位
- Payload Length : 当前负载的长度,包括通用负载的头部
IPSec 工作原理
- 识别 “感兴趣流”
发送方根据五元组等信息和 IPSec 策略判断报文是否要通过 IPSec 隧道传输,通过隧道的流量被称为 “感兴趣流” - 建立 SA (Security Association,协商安全联盟)
双方协商使用的安全协议、封装方式、加密和验证算法、密钥等。通信双方会先建立 IKE SA (用于身份验证和密钥交换),再建立 IPSec SA - 数据传输
为保证传输的安全性,会通过 AH 或 ESP 协议对数据进行加密和校验 - 隧道拆除
数据交换完成会话结束后,通信双方的隧道在空闲时间达到老化值后自动删除
注意事项
IPsec 中 IKE 协议采用 UDP 500 端口发起和响应协商,因此需要放通 UDP 500 端口。另外,在 IPsec NAT 穿越场景下,还需要放开 UDP 4500 端口
而 AH 和 ESP 属于网络层协议,需要配置安全策略放开 AH (协议号 51) 和 ESP (协议号 50) 服务