互联网安全协议IPsec
一、IPsec基础知识
IPsec(Internet Protocol Security,缩写为IPsec,即互联网安全协议),是一个协议包,通过对IP协议的分组进行加密和认证来保护IP协议的网络传输协议族(一些相互关联的协议的集合)。
1.IPsec的安全特性主要有
不可否认性、反重播性、数据完整性以及数据可靠性。
IPsec(Internet Protocol Security)是一组协议,用于在网络层为 IP 数据包提供安全性。它通过加密和认证等技术,确保网络通信的机密性、完整性和认证等安全属性,主要用于建立虚拟专用网络(VPN),在不安全的网络(如互联网)上实现安全的通信。以下是对 IPsec 相关特性的解释:
- 不可否认性
- 含义:不可否认性是指通信的双方不能否认曾经发生过的通信行为或通信内容。在 IPsec 的环境中,它主要通过数字签名等技术来实现。
- 作用:确保通信双方无法抵赖自己发送或接收过特定的信息,从而为通信行为提供了法律上和事实上的证据。比如在电子商务、电子政务等场景中,交易双方或政务处理双方通过 IPsec 进行通信时,不可否认性可以保证双方不能事后否认自己的操作,避免出现纠纷时无法确定责任方。
- 反重播性
- 含义:反重播性是防止攻击者截取并重新发送(重播)合法的通信数据,以达到欺骗或干扰系统的目的。IPsec 通过在数据包中添加序列号等机制来实现反重播功能。
- 作用:当接收方收到一个数据包时,会检查其序列号,如果发现是已经接收过的序列号,就会丢弃该数据包,从而防止攻击者通过重播以前的合法数据包来进行攻击,如重复执行某个操作、获取非法权限等,保证了通信的真实性和有效性,防止恶意用户利用重播攻击篡改或干扰正常的通信流程。
- 数据完整性
- 含义:数据完整性是指确保数据在传输过程中没有被意外或恶意地修改、删除或插入。IPsec 使用消息认证码(MAC)等技术来验证数据的完整性。
- 作用:接收方可以通过验证 MAC 来判断接收到的数据与发送方发送的数据是否一致。如果数据在传输过程中被篡改,MAC 验证将失败,接收方就知道数据已经被破坏,从而丢弃该数据。在金融交易、文件传输等场景中,数据完整性至关重要,确保了交易数据、文件内容等的准确性和一致性,防止数据被篡改导致的错误操作或信息泄露。
- 数据可靠性
- 含义:数据可靠性是一个更广泛的概念,它涵盖了数据能够准确、完整、及时地被传输和处理的能力。在 IPsec 中,通过多种技术共同作用来实现数据可靠性,包括前面提到的保障数据完整性、加密防止数据泄露以及协议机制确保数据按顺序正确传输等。
- 作用:确保数据在各种网络环境下都能可靠地到达目的地,减少数据丢失、错误或延迟的情况。在实时通信(如视频会议、语音通话)、工业控制系统等对数据可靠性要求极高的场景中,IPsec 的数据可靠性特性能够保证通信的顺畅和系统的正常运行,避免因数据传输问题导致的业务中断、系统故障等情况。
2.IPsec主要由以下协议组成
- 认证头(AH):为 IP 数据报提供无连接数据完整性、消息认证以及防重放攻击保护;
- 封装安全载荷(ESP):提供机密性、数据源认证、无连接完整性、防重放和有限的传输流(traffic-flow)机密性;
- 安全关联(SA):提供算法和数据包,提供 AH、ESP 操作所需的参数;
- 密钥协议(IKE):提供对称密码的密钥的生存和交换。
一、认证头(AH)
- 功能详解:
- 无连接数据完整性:验证 IP 数据报在传输过程中未被篡改,通过哈希算法(如 MD5、SHA)生成校验值实现。
- 消息认证:确认数据来源可信,验证发送方身份,防止伪造数据包。
- 防重放攻击:通过序列号机制,拒绝接收重复发送的旧数据包,避免攻击者重播历史数据。
- 案例:某企业通过 IPsec VPN 连接分支办公室,AH 协议确保传输的业务数据(如财务报表、合同文件)未被篡改,且能验证数据来自合法内部节点,防止外部伪造数据混入。
二、封装安全载荷(ESP)
- 功能详解:
- 机密性:对 IP 数据报的载荷(如应用层数据)加密,防止数据被窃听,常用加密算法如 AES、DES。
- 数据源认证:验证数据发送方的身份,确保数据来自可信源。
- 无连接完整性:与 AH 类似,验证数据传输过程中未被篡改。
- 防重放:同 AH 的防重放机制,拒绝重复数据包。
- 传输流机密性:隐藏数据流量特征(如通信双方地址、数据量),防止攻击者分析通信模式。
- 案例:银行通过 IPsec 传输客户交易数据时,ESP 对交易金额、账户信息加密(机密性),同时验证数据来自银行内部系统(数据源认证),确保交易数据不被篡改(完整性),并隐藏交易双方的通信流量特征,防止黑客分析交易模式。
三、安全关联(SA)
- 功能详解:
SA 是 IPsec 通信的基础 “契约”,定义了双方通信使用的安全参数,包括加密算法(如 AES-128)、认证算法(如 SHA-256)、密钥有效期、数据包处理规则等。每一个 IPsec 连接都依赖 SA,分为输入 SA 和输出 SA,确保双方按统一规则处理数据。- 案例:两家企业通过 IPsec 建立 VPN 通道时,需先协商 SA。例如,约定使用 AES 加密数据、SHA-256 验证完整性,密钥每 24 小时更新一次。SA 就像双方约定的 “通信规则包”,确保数据加解密、认证过程一致。
四、密钥协议(IKE)
- 功能详解:
IKE 负责动态管理 IPsec 通信的密钥,包括密钥生成、交换、更新。它基于安全算法(如 Diffie-Hellman)协商对称密钥,确保密钥在不安全的网络中安全传输,同时支持密钥定时更新,降低密钥被破解的风险。- 案例:某公司 IPsec VPN 每天凌晨自动更新加密密钥,IKE 协议负责协商新密钥。即使黑客获取了旧密钥,因密钥定时更新,也无法破解新传输的数据,保障了长期通信安全。
二、XFRM框架以及策略
1.XFRM框架
IPsec 由 XFRM 框架实现,此框架源自 USAGI 项目,该项目旨在提供适用于生产环境的 IPv6 和 IPsec 协议栈。在内核栈中根据 IPsec 规则对入站或出站数据包进行变换。XFRM 框架基础设施独立于协议簇。XFRM 框架支持网络命名空间,是一种轻型的进程虚拟化,它令一个或一组进程有了自己的网络栈。每个网络命名空间(结构 net 的实例)都包含一个名为 xfrm 的成员 —— 一个 netns_xfrm 结构实例。这个对象包含很多数据结构和变量,如 XFRM 策略散列表、XFRM 状态散列表、计数器等。
核心功能
IPsec实现:XFRM框架是Linux内核中IPsec协议的基础设施,负责数据包的加密、认证等安全操作。
协议无关性:支持IPv4和IPv6,且不依赖特定网络协议(如TCP/UDP)。
网络命名空间:
每个网络命名空间(Network Namespace)是一个独立的网络栈实例,用于实现容器或虚拟化的网络隔离。
netns_xfrm
结构:存储当前命名空间的XFRM配置,包括:
策略散列表(
policy_bydst
):快速查找匹配流量的策略。状态散列表(
state_bydst
):管理活跃的安全关联(SA)。计数器(如
state_num
):统计SA数量。示例场景
假设一台主机运行两个容器(每个容器属于不同网络命名空间):
容器A的命名空间配置了IPsec策略,加密所有发往
10.0.1.0/24
的流量。容器B的命名空间未配置IPsec策略,流量明文传输。
XFRM框架确保两个容器的策略和SA完全隔离。
2.XFRM策略
安全策略是告诉 IPsec 是否要对特定流进行处理的规则,它由结构 xfrm_policy 表示,策略包含一个选择器(xfrm_selector 对象),用于指定要将策略应用到哪些流。XFRM 选择器包含源地址和目标地址、协议等段。
策略的作用
流量筛选:通过选择器(
xfrm_selector
)定义哪些流量需要应用IPsec处理。动作决策:策略可指定对匹配流量执行加密、丢弃或绕过IPsec处理。
选择器字段
字段 描述 示例值 源地址 流量的源IP地址或子网 192.168.1.0/24
目标地址 流量的目标IP地址或子网 10.0.2.5
协议 传输层协议(如TCP/UDP/ICMP) IPPROTO_TCP
源端口 流量的源端口范围 1024:65535
目标端口 流量的目标端口范围 80
策略配置示例
通过
ip xfrm policy
命令添加策略:# 加密从192.168.1.0/24到10.0.2.5的TCP流量 ip xfrm policy add src 192.168.1.0/24 dst 10.0.2.5 proto tcp dir out action allow
3.XFRM状态(安全关联)
结构 xfrm_state 表示 IPsec 安全关联,表示的是单向流量,包含加密密钥、标志、请求 ID、统计信息等。可从用户空间套接字发送请求(XFRM_MSG_NEWSA),在内核中由 xfrm_state_add () 处理。同样要删除状态,可发送 XFRM_MSG_DELSA 消息,此消息在内核中由方法 xfrm_del_sa () 处理。
安全关联的作用
单向加密通道:每个SA描述一个方向(如A→B)的加密参数,包括:
加密算法(如AES-CBC)。
认证算法(如HMAC-SHA1)。
密钥(加密密钥和认证密钥)。
生存时间(SA有效期)。
用户空间与内核交互
添加SA:
用户空间发送XFRM_MSG_NEWSA
消息,内核调用xfrm_state_add()
创建SA。// 示例代码片段(伪代码) struct xfrm_usersa_info sa_info; sa_info.family = AF_INET; sa_info.saddr = inet_addr("192.168.1.100"); sa_info.id.spi = htonl(0x12345678); // 填充加密算法和密钥... send(netlink_sock, &sa_info, sizeof(sa_info), 0);
删除SA:
用户空间发送XFRM_MSG_DELSA
消息,内核调用xfrm_del_sa()
删除SA。SA与策略的关系
策略匹配流量:策略决定是否对流量应用IPsec。
SA提供参数:匹配策略的流量使用关联的SA进行加密。
三、数据结构
1.管理一个网络命名空间内的所有IPsec专属资源的结构体netns_xfrm
一、
netns_xfrm
的作用
netns_xfrm
是 Linux 内核中网络命名空间(network namespace)的成员,专门用于管理 IPsec 相关资源。其核心作用是实现 IPsec 资源的隔离,确保不同网络命名空间(如不同容器、虚拟机或进程组)拥有独立的 IPsec 策略、安全关联(SA)等配置,避免资源冲突,让各网络空间的 IPsec 通信规则互不干扰。
二、关键字段
xfrm_policy_hash
- 作用:存储 IPsec 策略(由
xfrm_policy
结构体表示),通过哈希表快速查找和管理策略。策略定义了 IPsec 对特定数据流的处理规则(如是否加密、认证)。- 关联操作:添加 / 删除 IPsec 策略时,内核会将策略对象插入或移除该哈希表。
xfrm_state_hash
- 作用:存储 IPsec 安全关联(SA,由
xfrm_state
结构体表示),包含加密密钥、通信状态等核心信息。- 关联操作:创建 / 删除 SA 时,内核通过该哈希表管理 SA 对象,确保单向流量的安全参数正确匹配。
计数器(如
policy_count
、state_count
)
- 作用:统计当前网络命名空间中 IPsec 策略和 SA 的数量,辅助内核监控资源使用情况,避免资源泄漏或过度消耗。
三、使用方式
初始化
当创建新的网络命名空间(如通过unshare(CLONE_NEWNET)
)时,内核会初始化netns_xfrm
结构体,分配哈希表空间,为后续 IPsec 资源管理做准备。策略管理
- 添加策略:通过内核函数(如
xfrm_policy_add()
)创建xfrm_policy
对象,指定策略规则(如源 / 目标地址、协议),并插入xfrm_policy_hash
哈希表。- 查找策略:处理数据包时,内核根据数据流特征(如地址、协议)在
xfrm_policy_hash
中查找匹配的策略,决定是否执行 IPsec 操作。安全关联(SA)管理
- 创建 SA:用户空间通过套接字发送
XFRM_MSG_NEWSA
请求,内核调用xfrm_state_add()
,创建xfrm_state
对象(包含密钥、算法等),并插入xfrm_state_hash
。- 删除 SA:发送
XFRM_MSG_DELSA
消息,内核通过xfrm_del_sa()
从xfrm_state_hash
中移除对应 SA,释放资源。内核流程整合
在内核处理 IP 数据包时,若启用 IPsec,会基于netns_xfrm
中的策略和 SA 信息,对入站 / 出站数据包执行加密、认证等操作,确保网络通信安全。
2.IPsec安全策略有结构xfrm_policy表示
一、
xfrm_policy
结构体的作用
xfrm_policy
是 Linux 内核 IPsec 框架中用于定义安全策略的核心结构体,主要作用是告诉 IPsec 是否对特定数据流执行安全处理(如加密、认证)。它包含了匹配数据流的规则(如源 / 目标地址、协议)以及对应的处理动作(允许 / 禁止流量通过、应用 IPsec 安全关联等),是 IPsec 处理数据流的 “决策依据”。
二、重要字段及含义
selector
(struct xfrm_selector
)
- 作用:定义策略匹配的数据流特征,包括源地址、目标地址、协议类型、端口范围等。通过这些参数精准定位需要应用策略的流量。
- 示例:若设置源地址为
192.168.1.0/24
,目标地址为10.0.0.0/24
,协议为 TCP,则仅匹配该网段间的 TCP 流量。
lifetime
(struct xfrm_lifetime_cfg
)
- 作用:定义策略的生命周期,包括时间限制(如策略生效时长)、字节数限制(策略处理的最大数据量)。到期后策略可能失效或需要更新。
action
- 作用:指定对匹配数据流的处理动作,例如
XFRM_POLICY_ALLOW
(允许流量通过,不做 IPsec 处理)、XFRM_POLICY_BLOCK
(禁止流量通过),或关联安全关联(SA)对流量进行加密、认证等 IPsec 处理。
priority
- 作用:当存在多个策略时,通过优先级决定策略匹配的先后顺序,高优先级策略优先匹配。
family
- 作用:标识策略适用的地址族(如 IPv4 或 IPv6),确保策略正确应用于对应网络协议的流量。
三、使用方式
策略添加
- 用户空间程序(如 IPsec 配置工具)通过内核接口(如
xfrm_policy_add()
)创建xfrm_policy
实例,填充selector
、action
等字段,将策略插入内核的策略哈希表(由netns_xfrm
管理)。
策略匹配
- 当数据包进入 IPsec 处理流程时,内核遍历策略哈希表,使用数据包的地址、协议等信息与
xfrm_policy
的selector
匹配。匹配成功后,按action
执行对应操作(如调用 SA 进行加密)。策略管理
- 可通过内核函数更新策略的
lifetime
、priority
等参数,或使用xfrm_policy_del()
删除策略,释放资源。
3.XFRM状态(安全关联)结构体xfrm_state
在 Linux 内核 IPsec 协议中,
xfrm_state
结构体用于表示 IPsec 协议栈中的安全关联(Security Association,SA),它包含了单向 IPsec 流量所需的所有信息 。以下是一些关键字段及其说明:
id
:类型为xfrm_id
结构,包含了该 SA 的目的地址、安全参数索引(SPI)和协议(AH 或 ESP)。SPI 是一个重要标识,用于区分不同的安全关联。props
:表示该 SA 的其他属性,如 IPsec 模式(传输模式 Transport 或隧道模式 Tunnel)、源地址、序列号reqid
、防重放窗口replay_window
、认证算法 IDaalgo
、加密算法 IDealgo
、使用的协议family
等。这些属性共同决定了数据在传输过程中的处理方式。lft
:即xfrm_lifetime_cfg
类型,用于配置 SA 的生存时间,包括软限制和硬限制的字节数、数据包数量,以及时间限制等。到期后 SA 可能需要重新协商。aalg
:指向认证算法的结构体指针,用于数据的完整性验证和数据源认证。ealg
:指向加密算法的结构体指针,用于对数据进行加密处理,保障数据机密性。repl
:指向重放检测结构,防止攻击者通过重放旧数据包进行攻击。rtimer
:定时器,用于 SA 相关的时间管理,比如检测 SA 是否过期等。
xfrm_state
结构体的使用过程如下:
- 创建:用户态的 IPsec 进程(如 StrongSwan)通过发送
XFRM_MSG_NEWSA
请求到内核的 XFRM 框架,内核调用相关函数创建xfrm_state
结构体实例,并填充相关字段信息。- 存储与查找:每个
xfrm_state
实例会被加入到内核中的多个哈希表(如根据源地址、SPI、目的地址等构建的哈希表)中。查找时,可以使用xfrm_state_lookup()
(通过 SPI 查找)、xfrm_state_lookup_byaddr()
(通过源地址查找) 、xfrm_state_find()
(通过目的地址查找)等函数从哈希表中找到对应的 SA。- 数据处理:当有符合 IPsec 策略的数据包需要处理时,内核会根据策略找到对应的
xfrm_state
,依据其中的算法、密钥等信息对数据包进行加密、认证等操作;在接收数据包时,进行解密、验证等操作,并利用重放检测机制确保数据包的合法性。- 删除:当 SA 不再需要时(比如过期或手动删除),用户态进程发送
XFRM_MSG_DELSA
消息,内核通过相应处理函数将xfrm_state
结构体从哈希表中移除,并释放相关资源。
4.关系
netns_xfrm
是管理核心:- 属于网络命名空间,负责管理该空间内所有 IPsec 资源,包含存储
xfrm_policy
(策略)的哈希表xfrm_policy_hash
,以及存储xfrm_state
(安全关联)的哈希表xfrm_state_hash
。
- 属于网络命名空间,负责管理该空间内所有 IPsec 资源,包含存储
xfrm_policy
是策略执行者:- 定义 IPsec 对数据流的处理规则(如匹配流量、执行动作)。当数据包匹配
xfrm_policy
的规则后,需进一步调用xfrm_state
中定义的安全参数(加密算法、密钥等)处理数据。
- 定义 IPsec 对数据流的处理规则(如匹配流量、执行动作)。当数据包匹配
xfrm_state
是安全参数载体:- 存储单向流量的安全关联参数(如加密密钥、认证算法)。
xfrm_policy
匹配流量后,通过关联的xfrm_state
完成数据的加密、认证等操作。
- 存储单向流量的安全关联参数(如加密密钥、认证算法)。
四、传输模式/隧道模式、IPsec高可靠性
1.在传输模式下,AH头或ESP头被插入到IP头与传输层协议头之间,保护TCP/UDP/ICMP负载,传输模式不改变报文头。
传输模式:通信点与加密点地址相同
- 原理:传输模式用于端到端的通信保护,加密操作直接由通信双方主机执行。例如,主机 A(IP:192.168.1.10)与主机 B(IP:192.168.1.20)直接通信,主机 A 自己对数据加密,主机 B 自己解密。
- 地址特征:
- 通信点是主机 A 和 B,加密点也是这两台主机,因此通信点地址和加密点地址完全一致。
- 通信使用的 IP 地址(如 192.168.1.10、192.168.1.20)是真实的端到端可路由地址,可直接在网络中传输。
2.在隧道模式中,在源ip头部之前插入ESP/AH头部,同时生成新的ip头部。
隧道模式:通信点与加密点地址不同
- 原理:隧道模式常用于网络边界设备(如 VPN 网关),加密操作由网关执行。例如,企业内网主机 C(IP:10.0.0.10)要访问外网服务器 D,数据先发送到企业网关(IP:20.0.0.1),由网关加密后再转发。
- 地址特征:
- 通信点是主机 C 和服务器 D,但加密点是网关。通信点地址(如 10.0.0.10)与加密点地址(20.0.0.1)不同。
- 通信点地址(如企业内网 IP 10.0.0.10)可能是私网地址,在公网不可路由,需通过网关生成新的可路由 IP 头(如 20.0.0.1)进行传输,这也符合隧道模式 “隐藏原始地址,封装新 IP 头” 的特点。
3.IPsec高可靠性设计可以分为两类,一种是链路冗余,另一种是主备网络备份。其中链路冗余可以分为主备链路备份和隧道话链路备份。
一、IPsec高可靠性设计的分类
IPsec的高可靠性设计主要分为以下两类,确保网络在故障时仍能维持业务连续性:
分类 定义 子类 链路冗余 通过冗余的物理或逻辑链路实现网络连接的备份。 主备链路备份、隧道化链路备份 主备网络备份 通过部署多套独立的网络设备(如路由器、防火墙),主设备故障时切换至备用设备。 -
二、链路冗余的两种子类
链路冗余的两种实现方式及其核心特点:
子类 定义 实现方式 优缺点 主备链路备份 通过多条物理链路(如光纤、网线)实现冗余,主链路故障时切换至备用链路。 物理层/数据链路层技术(如以太网链路聚合、动态路由协议)。 优点:切换速度快(毫秒级)。
缺点:依赖物理链路,成本较高。隧道化链路备份 通过多个逻辑隧道(如IPsec隧道)实现冗余,主隧道故障时切换至备用隧道。 网络层/传输层技术(如IPsec隧道、BFD协议检测)。 优点:逻辑隔离,不受物理链路限制。
缺点:需公网IP,切换较慢(秒级)。
五、IPsec与HTTPS/TCP/UDP的区别
1.与HTTPS的比较
1. 协议层次
- IPsec:工作在网络层,对整个 IP 数据包进行加密和认证,包括 IP 头和数据部分。它可以保护网络层及以上各层的通信安全,为网络中的主机、路由器等设备之间提供安全的通信通道。
- HTTPS:基于传输层的 SSL/TLS 协议,主要对应用层的 HTTP 数据进行加密。它在应用层和传输层之间添加了一个安全层,确保 HTTP 数据在传输过程中的保密性和完整性。
2. 应用场景
- IPsec:常用于建立站点到站点的 VPN 连接,如企业总部与分支机构之间的网络互联,或者用于主机到主机之间的安全通信,保障整个网络通信的安全。它可以在网络层面实现对所有基于 IP 协议的应用的透明保护,无需应用程序进行特殊配置。
- HTTPS:主要用于 Web 应用,确保 Web 浏览器与 Web 服务器之间的数据传输安全,如网上银行、电子商务、在线支付等场景,防止用户的敏感信息(如用户名、密码、信用卡号等)在传输过程中被窃取或篡改。
3. 加密范围
- IPsec:可以对整个 IP 数据包进行加密,包括源 IP 地址、目的 IP 地址等 IP 头信息以及上层协议数据。它可以实现端到端的安全通信,保护网络中所有基于 IP 协议的应用数据。
- HTTPS:只对 HTTP 请求和响应中的数据部分进行加密,不包括 TCP 和 IP 头信息。它主要保护的是 Web 应用中的数据,对于底层网络传输的其他信息不进行加密。
4. 密钥管理
- IPsec:通常使用 Internet 密钥交换(IKE)协议来管理密钥。IKE 协议负责在通信双方之间协商、建立和更新安全关联(SA)以及密钥。它支持多种身份验证方法,如预共享密钥、数字证书等。
- HTTPS:基于 SSL/TLS 协议的密钥交换和管理机制。服务器通常会拥有数字证书,客户端通过验证服务器证书来确认服务器的身份,并与服务器协商加密算法和密钥。在一些情况下,也可以使用客户端证书进行双向认证。
5. 部署方式
- IPsec:一般需要在网络设备(如路由器、防火墙)或主机上进行配置,对整个网络或主机的 IP 通信进行加密保护。部署 IPsec 可能需要对网络基础设施进行一定的调整和配置,涉及到网络层的策略和安全设置。
- HTTPS:主要在 Web 服务器和客户端浏览器上进行配置。Web 服务器需要安装 SSL/TLS 证书,客户端浏览器通常已经内置了对 HTTPS 的支持,用户只需在访问 HTTPS 网站时,浏览器会自动进行加密连接的建立和验证。
6. 兼容性和性能
- IPsec:由于工作在网络层,可能会对网络中的一些设备和应用产生兼容性问题,特别是在穿越网络地址转换(NAT)设备时,可能需要特殊的配置和处理。在性能方面,IPsec 对整个 IP 数据包进行处理,可能会带来一定的性能开销。
- HTTPS:在兼容性方面,由于主要针对 Web 应用,与大多数现代浏览器和 Web 服务器都有良好的兼容性。在性能上,HTTPS 只对 HTTP 数据进行加密,相对 IPsec 来说,性能开销通常较小,尤其是在使用了硬件加速等技术的情况下。
2.与TCP的比较
- 连接状态维护方面
- 相似点:TCP 在通信前需要通过三次握手建立连接,通信结束后通过四次挥手释放连接,整个过程中会维护连接状态信息。SA 在建立时也需要进行一系列的协商过程,比如在 IPsec 中通过 IKE 协议来协商加密算法、密钥等参数,建立起 SA 后也会维护相关的状态信息,如安全参数索引(SPI)等,以确保数据传输的安全和有序。
- 不同点:TCP 的连接状态主要是基于传输层的端口等信息来维护,用于保证端到端的可靠数据传输。而 SA 的状态维护更多是基于安全策略和加密参数等,主要用于保障数据的安全传输,其状态信息与网络层的 IP 地址以及安全相关的参数紧密相关。
- 可靠性保证方面
- 相似点:TCP 通过序列号、确认应答、重传机制等保证数据的可靠传输,确保数据无丢失、无差错、按序到达。SA 在一定程度上也能保证数据的完整性和准确性,通过加密和认证机制防止数据在传输过程中被篡改或伪造,从而保障数据的可靠安全传输。
- 不同点:TCP 的可靠性主要是针对数据的传输过程,侧重于解决网络传输中的丢包、乱序等问题。SA 的可靠性重点在于数据的安全性,防止数据被非法访问和篡改,它并不像 TCP 那样对数据传输的顺序和重传等进行细致的控制,而是更多地关注数据在安全层面的可靠性。
3.与UDP的比较
- 无连接特性方面
- 相似点:UDP 是无连接的协议,在发送数据时不需要事先建立连接,直接将数据报发送出去。SA 在某些情况下也可以具有类似的 “无连接” 特性,比如在一些简单的安全策略应用中,可能只需要根据预先配置的 SA 参数对数据进行加密或认证处理后就直接发送,不需要像 TCP 那样建立复杂的连接过程。
- 不同点:UDP 的无连接是因为它本身设计就是为了追求快速的数据传输,不关心连接的建立和维护。而 SA 的这种 “无连接” 只是相对的,它实际上还是需要在一定的安全框架下进行配置和管理,并且在需要时还是会进行安全参数的协商和更新等操作,不像 UDP 那样完全无状态。
- 灵活性方面
- 相似点:UDP 在数据传输上比较灵活,对数据的格式和长度等限制相对较少,应用层可以根据自己的需求自由地封装和传输数据。SA 也具有一定的灵活性,它可以根据不同的安全需求和应用场景,配置不同的加密算法、认证方式等参数,以适应各种安全防护的要求。
- 不同点:UDP 的灵活性主要体现在数据传输的层面,方便应用层进行各种自定义的数据处理。SA 的灵活性则主要体现在安全策略的配置和应用上,是为了满足不同的安全目标而提供的多种安全机制和参数选择。
六、用户空间如何使用IPsec
一、通过命令行使用 IPsec
在不同的操作系统中,使用的命令和工具会有所不同,下面介绍常见系统的情况:
- Windows 系统:使用
ipseccmd
命令,该命令有动态模式、静态模式和查询模式三种模式,常使用动态模式添加规则到现有的 IPSec 策略中。例如,若要在本地计算机添加一条规则,筛选计算机Computer1
和Computer2
之间的 TCP 流量,同时指定使用预共享密钥mypassword
进行身份认证,可使用以下命令:
ipseccmd -f "Computer1+Computer2::TCP" -a preshare:"mypassword"
- Linux 系统(以基于 libreswan 为例):
- 安装
libreswan
软件包,它是 Linux 中常用的 IPsec 用户空间实现。以 Debian/Ubuntu 系统为例,可使用命令sudo apt-get install libreswan
进行安装。 - 配置 IPsec 连接,如编辑配置文件
/etc/ipsec.conf
定义 IKE 策略、IPsec 安全提议等。例如:
- 安装
config setup
protostack=netkey
interfaces=%defaultroute
conn myvpn
authby=secret
left=192.168.1.100 # 本地IP
leftsubnet=192.168.1.0/24
right=20.0.0.1 # 对端IP
rightsubnet=10.0.0.0/24
auto=start
ike=aes128-sha1;modp1024
esp=aes128-sha1
- 使用
ipsec up myvpn
命令启动名为myvpn
的 IPsec 连接 ,使用ipsec status
查看连接状态。
二、使用 ip xfrm
命令管理 IPsec 策略
ip xfrm
用于直接操作内核 IPsec 资源,涵盖策略、安全关联(SA)等管理。
1. 添加 IPsec 策略
命令分解:
# 加密从 192.168.1.0/24 到 10.0.2.0/24 的 TCP 出站流量
ip xfrm policy add \
src 192.168.1.0/24 dst 10.0.2.0/24 \ # 匹配源/目标地址段
proto tcp dir out \ # 匹配 TCP 协议,应用于出站方向
action allow \ # 允许流量并触发加密
tmpl esp mode tunnel \ # 使用 ESP 协议、隧道模式
src 192.168.1.1 dst 10.0.2.1 # 隧道模式的源/目标网关
2. 查看 IPsec 策略
ip xfrm policy list # 列出所有已配置的 IPsec 策略
执行后显示策略的匹配条件、动作、模板等详细信息。
3. 删除 IPsec 策略
需完整指定策略参数,例如删除上述策略:
ip xfrm policy del \
src 192.168.1.0/24 dst 10.0.2.0/24 \
proto tcp dir out \
action allow \
tmpl esp mode tunnel \
src 192.168.1.1 dst 10.0.2.1
4. 管理安全关联(SA)
配合策略定义加密算法、密钥等:
# 添加 SA,指定 ESP 协议、加密认证参数
ip xfrm state add \
src 192.168.1.1 dst 10.0.2.1 \ # SA 关联的源/目标地址
proto esp spi 0x12345678 \ # ESP 协议,安全参数索引(SPI)
mode tunnel \ # 隧道模式
auth sha1 0xabcdef1234567890abcdef1234567890 \ # 认证算法(SHA1)及密钥
enc aes 0x12345678123456781234567812345678 # 加密算法(AES)及密钥
三、使用 C 语言代码使用 IPsec
在 C 语言中实现 IPsec 较为复杂,涉及到加密、网络协议和系统底层操作,一般不涉及,这里不做展开。