系统管理指南:IP 服务

第 19 章 IP 安全体系结构(概述)

IP 安全体系结构 (IPsec) 为 IPv4 和 IPv6 网络包中的 IP 数据报提供加密保护。

本章包含以下信息:

有关如何在网络中实现 IPsec 的信息,请参见第 20 章。有关参考信息,请参见第 21 章

IPsec 中的新增功能

Solaris 10 4/09:从此发行版开始,服务管理工具 (Service Management Facility, SMF) 将 IPsec 作为一组服务来管理。

缺省情况下,在系统引导时,将启用以下两个 IPsec 服务:

缺省情况下,在系统引导时,将禁用以下密钥管理服务:

要在 SMF 下激活 IPsec 策略,请执行以下步骤:

  1. 将 IPsec 策略项添加到 ipsecinit.conf 文件。

  2. 配置 Internet 密钥交换 (Internet Key Exchange, IKE) 或手动配置密钥。

  3. 刷新 IPsec 策略服务。

  4. 启用密钥管理服务。

有关 SMF 的更多信息,请参见《系统管理指南:基本管理》中的第 18  章 “管理服务(概述)”。另请参见 smf(5)svcadm(1M) 手册页。

从此发行版开始,ipsecconfipseckey 命令具有 -c 选项,以用于检查它们各自配置文件的语法。另外,还提供了网络 IPsec 管理权限配置文件以用于管理 IPsec 和 IKE。

Solaris 10 7/07:从此发行版开始,IPsec 以隧道模式全面实现隧道,并且支持隧道的实用程序有所修改。

Solaris 10 1/06:从此发行版开始,IKE 与 NAT 遍历支持完全兼容,如 RFC 3947 和 RFC 3948 中所述。IKE 操作使用加密框架中的 PKCS #11 库,从而提高了性能。

加密框架为使用 metaslot 的应用程序提供了 softtoken 密钥库。IKE 使用 metaslot 时,可以选择在磁盘上、已连接的板上或在 softtoken 密钥库中存储密钥。

IPsec 介绍

IPsec 通过验证包、加密包或同时执行这两种操作来保护 IP 包。IPsec 在 IP 模块内部执行,刚好在应用层之下。因此,Internet 应用程序可以直接利用 IPsec,而不必配置自身以使用 IPsec。若使用得当,IPsec 是保证网络通信安全的有效工具。

IPsec 保护涉及五个主要组件:

IPsec 将安全机制应用于发往 IP 目标地址的 IP 数据报。接收者使用其 SADB 中的信息来检验到达的包是否合法并对其进行解密。应用程序也可以调用 IPsec,以便在每个套接字级别将安全机制应用于 IP 数据报。

请注意,套接字的行为不同于端口:

IPsec RFC

Internet 工程任务组 (Internet Engineering Task Force, IETF) 已经发布了许多介绍 IP 层安全体系结构的互联网信息文档和标准 (Requests for Comment, RFC)。所有 RFC 均受 Internet 协会版权保护。有关指向 RFC 的链接,请参见 http://www.ietf.org/。以下 RFC 列表包含更为常见的 IP 安全参考:

IPsec 术语

IPsec RFC 定义许多用于识别何时在系统上实现 IPsec 的术语。下表列出了 IPsec 术语,提供了常用的首字母缩写词并定义了每个术语。有关在密钥协商中使用的术语的列表,请参见表 22–1

表 19–1 IPsec 术语、首字母缩写词和用法

IPsec 术语 

首字母缩略词 

定义 

Security association(安全关联) 

SA 

网络中两个节点之间的唯一连接。此连接由三个元素定义: 安全协议、安全参数索引和 IP 目标。IP 目标可以是 IP 地址或套接字。 

Security associations database(安全关联数据库) 

SADB 

包含所有活动的安全关联的数据库。 

Security parameter index(安全参数索引) 

SPI 

安全关联的索引值。SPI 是可以将具有相同 IP 目标和安全协议的 SA 区分开来的 32 位的值。 

Security policy database(安全策略数据库)

SPD 

确定外发包和传入包是否具有指定的保护级别的数据库。 

Key exchange(密钥交换) 

 

生成非对称加密算法的密钥的过程。两种主要方法是 RSA 协议和 Diffie-Hellman 协议。 

Diffie-Hellman protocol(Diffie-Hellman 协议) 

DH 

一种涉及密钥生成和密钥验证的密钥交换协议。通常称为经过验证的密钥交换

RSA protocol(RSA 协议) 

RSA 

一种涉及密钥生成和密钥分发的密钥交换协议。此协议以其三个创建者 Rivest、Shamir 和 Adleman 命名。 

Internet Security Association and Key Management Protocol(Internet 安全关联和密钥管理协议) 

ISAKMP 

用于建立 SA 属性格式以及协商、修改和删除 SA 的通用框架。ISAKMP 是处理 IPsec SA 的 IETF 标准。 

IPsec 包流

图 19–1 显示了当已经在外发包上调用 IPsec 时,作为IP datagram(IP 数据报)一部分的带有 IP 地址的包如何继续传送。此流程图说明了可以对包应用验证头 (authentication header, AH) 和封装安全有效负荷 (encapsulating security payload, ESP) 实体的位置。如何应用这些实体以及如何选择算法将在后续各节中进行介绍。

图 19–2 显示了 IPsec 传入过程。

图 19–1 应用于外发包过程的 IPsec

流程图显示了外发包首先受 ESP 保护,然后受 AH 保护。然后,包转到隧道或物理接口。

图 19–2 应用于传入包过程的 IPsec

流程图显示了 IPsec 首先处理传入包中的 AH 头,然后处理 ESP 头。将丢弃未被充分保护的包。

IPsec 安全关联

IPsec 安全关联 (security association, SA) 指定由通信主机识别的安全属性。单个 SA 保护单一方向的数据,此保护针对单个主机或一组(多点传送)地址。由于多数通信为对等通信或客户机/服务器通信,因此,必须存在两个 SA 来保证两个方向的通信安全。

以下三个元素唯一地标识 IPsec SA:

SPI 是任意 32 位的值,与 AH 或 ESP 包一起传输。ipsecah(7P)ipsecesp(7P) 手册页说明了由 AH 和 ESP 提供的保护范围。完整性校验值用于验证包。如果验证失败,则会丢弃包。

安全关联存储在安全关联数据库 (security associations database, SADB) 中。基于套接字的管理引擎 PF_KEY 接口使特权应用程序可以管理数据库。例如,IKE 应用程序和 ipseckeys 命令会使用 PF_KEY 套接字接口。

IPsec 中的密钥管理

安全关联 (Security association, SA) 需要加密材料来进行验证和加密。对此加密材料的管理称为密钥管理。Internet 密钥交换 (Internet Key Exchange, IKE) 协议自动处理密钥管理。您还可以使用 ipseckey 命令手动管理密钥。

IPv4 和 IPv6 包上的 SA 可以使用任一密钥管理方法。除非您有充分的理由使用手动密钥管理,否则,请首选使用自动密钥管理。例如,与 Solaris 系统之外的系统进行交互操作可能需要手动密钥管理。

在当前发行版中,SMF 为 IPsec 提供以下密钥管理服务:

在 Solaris 10 4/09 发行版之前的发行版中,in.ikedipseckey 命令用于管理加密材料。

IPsec 保护机制

IPsec 提供了两种用于保护数据的安全协议:

AH 使用验证算法来保护数据。ESP 使用加密算法来保护数据。ESP 还可以使用验证算法来保护数据。算法的每种实现方式称为机制

验证头

authentication header(验证头)为数据报提供了数据验证、高完整性以及重放保护。AH 保护 IP 数据报的更为重要的部分。如下图所示,AH 插在 IP 数据包头和传输头之间。

图显示了 IP 数据包头和 TCP 数据包头之间的 AH 头。

传输头可以是 TCP、UDP、SCTP 或 ICMP。如果使用的是 tunnel(隧道),则传输头可以是另一个 IP 数据包头。

封装安全有效负荷

encapsulating security payload, ESP(封装安全有效负荷)模块为 ESP 所封装的内容提供了保密性。ESP 也提供 AH 提供的服务。但是,ESP 仅为 ESP 所封装的数据报部分提供保护。ESP 提供可选的验证服务以确保受保护的包的完整性。因为 ESP 使用启用了加密的技术,因此提供 ESP 的系统可能会受进出口控制法制约。

由于 ESP 封装其数据,因此 ESP 仅保护数据报中跟在其后的数据,如下图所示。

图显示了 IP 数据包头和 TCP 数据包头之间的 ESP 头。TCP 数据包头由 ESP 头进行加密。

在 TCP 包中,ESP 仅封装 TCP 数据包头及其数据。如果包是 IP-in-IP 数据报,则 ESP 会保护内部的 IP 数据报。由于每个套接字的策略允许自封装,因此,ESP 可以在需要时封装 IP 选项。

如果设置了自封装,会生成 IP 数据包头的副本来构建 IP-in-IP 数据报。例如,如果未在 TCP 套接字上设置自封装,会以下列格式发送数据报:


[ IP(a -> b) options + TCP + data ]

如果在 TCP 套接字上设置了自封装,则会以下列格式发送数据报:


[ IP(a -> b) + ESP [ IP(a -> b) options + TCP + data ] ]

有关进一步介绍,请参见IPsec 中的传输模式和隧道模式

使用 AH 和 ESP 时的安全注意事项

下表比较了由 AH 和 ESP 提供的保护。

表 19–2 由 IPsec 中的 AH 和 ESP 提供的保护

协议 

包范围 

保护 

防止的攻击 

AH 

保护包中从 IP 数据包头到传输层头的内容 

提供高完整性、数据验证: 

  • 确保接收者接收到的正是发送者发送的内容

  • 在 AH 没有启用重放保护时容易受到重放攻击影响

重放、剪贴 

ESP 

保护数据报中紧跟在 ESP 之后的包。 

使用加密选项时,对 IP 数据报进行加密。保证保密性 

窃听 

使用验证选项时,提供与 AH 相同的保护 

重放、剪贴 

同时使用两个选项时,提供高完整性、数据验证和保密性 

重放、剪贴、窃听 

IPsec 中的验证算法和加密算法

IPsec 安全协议使用两种类型的算法,即验证和加密。AH 模块使用验证算法。ESP 模块可以使用加密算法以及验证算法。您可以使用 ipsecalgs 命令获取系统上的算法及其属性的列表。有关更多信息,请参见 ipsecalgs(1M) 手册页。您也可以使用 getipsecalgbyname(3NSL) 手册页中介绍的功能来检索算法属性。

Solaris 系统上的 IPsec 利用 Solaris 加密框架来使用算法。此框架提供了一个主要的算法仓库,同时还提供了其他服务。使用此框架,IPsec 可以利用高性能的加密硬件加速器。此框架还提供了资源控制功能。例如,您可以使用此框架来限制在内核的加密操作中花费的 CPU 时间。

详细信息,请参见以下内容:

IPsec 中的验证算法

验证算法将生成完整性校验和值或基于数据和密钥的摘要。AH 模块使用验证算法。ESP 模块也可以使用验证算法。

IPsec 中的加密算法

加密算法使用密钥来加密数据。IPsec 中的 ESP 模块使用加密算法。算法以块大小为单位对数据进行操作。

不同的 Solaris 10 OS 发行版提供不同的缺省加密算法。


注意 – 注意 –

从 Solaris 10 7/07 发行版开始,将不会在您的系统中添加 Solaris 加密工具包。该工具包降低了您系统上加密的修补程序级别。此工具包与系统上的加密不兼容。


IPsec 保护策略

IPsec 保护策略可以使用任何安全机制。IPsec 策略可以在以下级别应用:

IPsec 会将系统范围的策略应用于外发数据报和传入数据报。外发数据报既可以在受保护的情况下发送,也可以在不受保护的情况下发送。如果应用了保护,则算法可能是特定的,也可能是非特定的。由于存在系统可识别的其他数据,因此可以将其他一些规则应用于外发数据报。传入数据报可以被接受或丢弃。确定丢弃还是接受传入数据报时取决于若干个条件,这些条件有时会重叠或冲突。可以通过确定首先要解析的规则来解决冲突。将自动接受通信,但是当策略项表明通信应跳过所有其他策略时除外。

可以跳过通常保护数据报的策略。您既可以在系统范围策略内指定例外,也可以在每个套接字策略中请求跳过。对于系统内的通信,将执行策略,但是不会应用实际的安全机制。相反,应用于系统内部包上的外发策略将转移到应用了那些机制的传入包。

可以使用 ipsecinit.conf 文件和 ipsecconf 命令来配置 IPsec 策略。有关详细信息和示例,请参见 ipsecconf(1M) 手册页。

IPsec 中的传输模式和隧道模式

IPsec 标准定义了 IPsec 操作的两种不同模式:传输模式隧道模式。模式不影响包的编码。在每种模式下,包受 AH、ESP,或二者的保护。如果内部包是 IP 包,这两种模式在策略应用程序方面有所不同,如下所示:

在传输模式下,外部头、下一个头以及下一个头支持的任何端口都可用于确定 IPsec 策略。实际上,IPsec 可在一个端口不同粒度的两个 IP 地址之间强制实行不同的传输模式策略。例如,如果下一个头是 TCP(支持端口),则可为外部 IP 地址的 TCP 端口设置 IPsec 策略。类似地,如果下一个头是 IP 数据包头,外部头和内部 IP 数据包头可用于决定 IPsec 策略。

隧道模式仅适用于 IP-in-IP 数据报。如果在家中的计算机用户要连接到中心计算机位置,以隧道模式进行隧道连接将会很有用。在隧道模式下,IPsec 策略强制实施于内部 IP 数据报的内容中。可针对不同的内部 IP 地址强制实施不同的 IPsec 策略。也就是说,内部 IP 数据包头、其下一个头及下一个头支持的端口,可以强制实施策略。与传输模式不同,在隧道模式下,外部 IP 数据包头不指示其内部 IP 数据报的策略。

因此,在隧道模式下,可为路由器后面的 LAN 的子网和这些子网上的端口指定 IPsec 策略。也可在这些子网上为特定的 IP 地址(即主机)指定 IPsec 策略。这些主机的端口也可以具有特定的 IPsec 策略。但是,如果有动态路由协议在隧道上运行,请勿使用子网选择或地址选择,因为对等网络上的网络拓扑的视图可能会更改。更改可能使静态 IPsec 策略失效。有关包括配置静态路由的隧道设置过程示例,请参见使用 IPsec 保护 VPN

在 Solaris OS 中,可以只在一个 IP 隧道网络接口上强制执行隧道模式。ipsecconf 命令提供 tunnel 关键字来选择 IP 隧道网络接口。当规则中出现 tunnel 关键字时,在此规则中指定的所有选定器都应用到内部包中。

在传输模式下,ESP、AH、或二者可以保护该数据报。

下图显示了不受保护的 TCP 包的 IP 数据包头。

图 19–3 携带 TCP 信息的不受保护的 IP 包

图显示了后跟 TCP 数据包头的 IP 数据包头。TCP 数据包头不受保护。

在传输模式下,ESP 按下图所示的方式保护数据。阴影部分表示包的加密部分。

图 19–4 携带 TCP 信息的受保护的 IP 包

图显示了 IP 数据包头和 TCP 数据包头之间的 ESP 头。TCP 数据包头由 ESP 头进行加密。

在传输模式下,AH 按下图所示的方式保护数据。

图 19–5 由验证头保护的包

图显示了 IP 数据包头和 TCP 数据包头之间的 AH 头。

实际上,在数据出现在数据报中之前,AH 便已包含数据。因此,即使在传输模式下,AH 提供的保护也会包含一些 IP 数据包头。

在隧道模式下,整个数据报处于 IPsec 数据包头的保护之内图 19–3 中的数据报由外部 IPsec 数据包头(在此示例中为 ESP)以隧道模式保护,如下图所示。

图 19–6 以隧道模式保护的 IPsec 包

图显示了在一个 IP 数据包头之后,另一个 IP 数据包头和 TCP 数据包头之前的 ESP 头。最后 2 个头受加密保护。

ipsecconf 命令包括用于将隧道设置为隧道模式或传输模式的关键字。

虚拟专用网络和 IPsec

已配置的隧道是点对点接口。使用隧道,可以将一个 IP 包封装到另一个 IP 包中。正确配置的隧道同时要求隧道源和隧道目标。有关更多信息,请参见 tun(7M) 手册页和针对 IPv6 支持配置隧道

隧道可创建明显的 IP physical interface(物理接口)。物理链接的完整性取决于基础安全协议。如果您安全地设置了安全关联 (security association, SA),则可以信任隧道。退出隧道的包必须源于隧道目标中指定的对等设备。如果此信任存在,则可以使用按接口 IP 转发来创建 virtual private network, VPN(虚拟专用网络)

您可以使用 IPsec 来构造 VPN。IPsec 保证连接安全。例如,使用 VPN 技术将办公室与独立网络连接的组织可以部署 IPsec 来保证两个办公室之间的通信安全。

下图说明了两个办公室如何使用 Internet 来形成其网络系统上部署有 IPsec 的 VPN。

图 19–7 虚拟专用网络

图显示了办公室 1 和 2 使用 hme0 接口来相互通信。每个办公室都使用 hme1 进行内部通信。

有关设置过程的详细示例,请参见如何使用通过 IPv4 实现的处于隧道模式的 IPsec 隧道保护 VPN

有关使用 IPv6 地址的类似示例,请参见如何使用通过 Ipv6 实现的处于隧道模式的 IPsec 隧道保护 VPN

IPsec 和 NAT 遍历

IKE 可以通过 NAT 盒 (NAT box) 来协商 IPsec SA。此功能使系统可以从远程网络安全地连接,即使当系统位于 NAT 设备之后也可如此。例如,在家工作或从会议地点登录的雇员可以使用 IPsec 保护其通信。

NAT 表示网络地址转换。NAT 盒 (NAT box) 用于将专用内部地址转换为唯一的 Internet 地址。NAT 常见于 Internet 的公共访问点,例如宾馆。有关更全面的论述,请参见使用 Oracle Solaris : IP 过滤器的 NAT 功能

当 NAT 盒 (NAT box) 位于通信系统之间时使用 IKE 的能力称为 NAT 遍历,即 NAT-T。在 Solaris 10 发行版中,NAT-T 具有以下限制:

以下 RFC 介绍了 NAT 的功能和 NAT-T 的限制。可以从 http://www.rfc-editor.org 中检索这些 RFC 的副本。

有关如何通过 NAT 使用 IPsec 的信息,请参见为移动系统配置 IKE(任务列表)

IPsec 和 SCTP

Solaris OS 支持流控制传输协议 (Streams Control Transmission Protocol, SCTP)。支持使用 SCTP 协议和 SCTP 端口号来指定 IPsec 策略,但是这种方法不可靠。RFC 3554 中指定的 SCTP 的 IPsec 扩展尚未实现。这些限制可能会使为 SCTP 创建 IPsec 策略的过程更为复杂。

SCTP 可以在单个 SCTP 关联的上下文中使用多个源地址和目标地址。当 IPsec 策略应用于单个源地址或目标地址时,通信可能会在 SCTP 切换此关联的源地址或目标地址时失败。IPsec 策略仅识别初始地址。有关 SCTP 的信息,请参阅 RFC 和SCTP 协议

IPsec 和 Solaris Zones

对于共享 IP 区域,IPsec 是在全局区域中配置的。IPsec 策略配置文件 ipsecinit.conf 仅存在于全局区域中。该文件既可具有应用到非全局区域的项,又可具有应用到全局区域的项。

对于专用 IP 区域,IPsec 是在非全局区域中配置的。

有关如何在区域上使用 IPsec 的信息,请参见使用 IPsec 保护通信。有关区域的信息,请参见《系统管理指南:Oracle Solaris Containers-资源管理和 Oracle Solaris Zones》中的第 16  章 “Solaris Zones 介绍”

IPsec 和逻辑域

IPsec 与逻辑域一同工作。逻辑域必须运行包含 IPsec 的 Solaris OS 版本,如 Solaris 10 发行版。

要创建逻辑域,必须使用 SPARC 的 Oracle VM Server,之前它被称为 Logical Domains。有关如何配置逻辑域的信息,请参见《Logical Domains 1.2 Administration Guide》或《Oracle VM Server for SPARC 2.0 Administration Guide》。

IPsec 实用程序和文件

表 19–3 介绍了用于配置和管理 IPsec 的文件、命令和服务标识符。为了体现完整性,此表包括密钥管理文件、套接字接口和命令。

从 Solaris 10 4/09 发行版开始,IPsec 由 SMF 来管理。有关服务标识符的更多信息,请参见《系统管理指南:基本管理》中的第 18  章 “管理服务(概述)”

表 19–3 所选 IPsec 实用程序和文件的列表

IPsec 实用程序、文件或服务 

说明 

手册页 

svc:/network/ipsec/ipsecalgs

在当前发行版中,为管理 IPsec 算法的 SMF 服务。 

smf(5)ipsecalgs(1M)

svc:/network/ipsec/manual-key

在当前发行版中,为管理手动安全关联 (security association, SA) 的 SMF 服务。 

smf(5)ipseckey(1M)

svc:/network/ipsec/policy

在当前发行版中,为管理 IPsec 策略的 SMF 服务。

smf(5)ipsecconf(1M)

svc:/network/ipsec/ike

在当前发行版中,为自动管理 IPsec SA 的 SMF 服务。 

smf(5)in.iked(1M)

/etc/inet/ipsecinit.conf 文件

IPsec 策略文件。在 Solaris 10 4/09 发行版之前的发行版中,如果此文件存在,则会在引导时激活 IPsec。

在当前发行版中,SMF policy 服务在系统引导时使用此文件配置 IPsec 策略。

ipsecconf(1M)

ipsecconf 命令

IPsec 策略命令。用于查看和修改当前的 IPsec 策略,以及进行测试。在 Solaris 10 4/09 发行版之前的发行版中,引导脚本使用 ipsecconf 来读取 /etc/inet/ipsecinit.conf 文件并激活 IPsec。

在当前发行版中,ipsecconf 由 SMF policy 服务使用以在系统引导时配置 IPsec 策略。

ipsecconf(1M)

PF_KEY 套接字接口

安全关联数据库 (security associations database, SADB) 的接口。处理手动密钥管理和自动密钥管理。

pf_key(7P)

ipseckey 命令

IPsec SA 加密命令。ipseckeyPF_KEY 接口的命令行前端。ipseckey 可以创建、销毁或修改 SA。

ipseckey(1M)

/etc/inet/secret/ipseckeys 文件

IPsec SA 的密钥。在 Solaris 10 4/09 发行版之前的发行版中,如果 ipsecinit.conf 文件存在,则会在引导时自动读取 ipseckeys 文件。

在当前发行版中,ipseckeys 由 SMF manual-key 服务使用以在系统引导时手动配置 SA。

 

ipsecalgs 命令

IPsec 算法命令。可用于查看和修改 IPsec 算法及其属性的列表。

在当前发行版中,由 SMF ipsecalgs 服务使用以在系统引导时使已知 IPsec 算法与内核同步。

ipsecalgs(1M)

/etc/inet/ipsecalgs 文件

包含已配置的 IPsec 协议和算法定义。此文件由 ipsecalgs 命令管理,并且决不能手动编辑。

 

/etc/inet/ike/config 文件

IKE 配置和策略文件。缺省情况下,此文件不存在。在 Solaris 10 4/09 发行版之前的发行版中,如果此文件存在,IKE 守护进程 in.iked 会提供自动密钥管理。该管理基于 /etc/inet/ike/config 文件中的规则和全局参数。请参见IKE 实用程序和文件

在当前发行版中,如果此文件存在,svc:/network/ipsec/ike 服务会启动 IKE 守护进程 in.iked 来提供自动密钥管理。

ike.config(4)

Solaris 10 发行版中 IPsec 的更改

有关 Solaris 新增功能的完整列表和 Solaris 发行版的说明,请参见《Oracle Solaris 10 9/10 新增功能》。自 Solaris 9 发行版以来,IPsec 包括以下功能: