4.4.1. 安全策略数据库 (The Security Policy Database, SPD)
SA 是一种管理结构,用于对穿越 IPsec 边界的流量实施安全策略。因此,SA 处理的一个基本要素是底层的安全策略数据库 (Security Policy Database, SPD),该数据库指定要向 IP 数据报提供哪些服务以及以何种方式提供。数据库的形式及其接口不在本规范的范围内。但是,本节规定了必须提供的最低管理功能,以允许用户或系统管理员控制是否以及如何将 IPsec 应用于主机传输或接收的流量或通过安全网关传输的流量。在处理穿越 IPsec 边界的所有流量(入站和出站)(包括不受 IPsec 保护的流量)期间,必须查询 SPD 或相关缓存。这包括 IPsec 管理流量,如 IKE。
SPD 要求
IPsec 实现必须 (MUST) 至少有一个 SPD,并且如果适合 IPsec 实现运行的环境,它可以 (MAY) 支持多个 SPD。不需要按接口维护 SPD,如 RFC 2401 中所规定的那样。但是,如果实现支持多个 SPD,则它必须 (MUST) 包括一个显式的 SPD 选择函数,该函数被调用以选择适合出站流量处理的 SPD。此函数的输入是出站数据包和实现 SPD 选择函数所需的任何本地元数据(例如,数据包到达的接口)。该函数的输出是 SPD 标识符 (SPD-ID)。
有序数据库
SPD 是一个有序数据库,与防火墙、路由器等中的访问控制列表 (Access Control Lists, ACL) 或数据包过滤器的使用一致。排序要求的产生是因为条目通常会重叠,因为选择器的值存在(非平凡的)范围。因此,用户或管理员必须 (MUST) 能够对条目进行排序以表达所需的访问控制策略。由于允许对选择器值使用通配符,并且不同类型的选择器没有层次关系,因此无法对 SPD 条目强制实施通用的规范顺序。
处理选择: DISCARD、BYPASS、PROTECT
SPD 必须区分受到 IPsec 保护的流量和允许绕过 IPsec 的流量。这适用于发送方要应用的 IPsec 保护以及接收方必须存在的 IPsec 保护。对于任何出站或入站数据报,有三种可能的处理选择:DISCARD、BYPASS IPsec 或使用 IPsec PROTECT。
- DISCARD: 不允许穿越 IPsec 边界(在指定方向)的流量。
- BYPASS: 允许在没有 IPsec 保护的情况下穿越 IPsec 边界的流量。
- PROTECT: 受到 IPsec 保护的流量。对于此类流量,SPD 必须指定要使用的安全协议、其模式、安全服务选项以及要使用的加密算法。
SPD-S、SPD-I、SPD-O
SPD 在逻辑上分为三个部分:
- SPD-S (安全流量 secure traffic): 包含所有受 IPsec 保护的流量的条目。
- SPD-O (出站 outbound): 包含所有要绕过或丢弃的出站流量的条目。
- SPD-I (入站 inbound): 应用于将被绕过或丢弃的入站流量。
所有这三个都可以去关联以便于缓存。如果 IPsec 实现仅支持一个 SPD,则 SPD 由所有三个部分组成。如果支持多个 SPD,其中一些可能是部分的,例如,某些 SPD 可能仅包含 SPD-I 条目,以按接口控制入站绕过的流量。拆分允许在不必查询 SPD-S 的情况下查询 SPD-I,以处理此类流量。
由于 SPD-I 只是 SPD 的一部分,如果在 SPD-I 中查找的数据包无法与其中的条目匹配,则必须 (MUST) 丢弃该数据包。请注意,对于出站流量,如果在 SPD-S 中找不到匹配项,则必须检查 SPD-O 以查看是否应绕过流量。同样,如果首先检查 SPD-O 并且未找到匹配项,则必须检查 SPD-S。在有序的、非去关联的 SPD 中,SPD-S、SPD-I 和 SPD-O 的条目是交错的。因此在 SPD 中只有一次查找。
SPD 条目
每个 SPD 条目将数据包处置指定为 BYPASS、DISCARD 或 PROTECT。该条目由一个或多个选择器的列表键控。SPD 包含这些条目的有序列表。必需的选择器类型在第 4.4.1.1 节中定义。这些选择器用于定义响应出站数据包或响应来自对等方的提议而创建的 SA 的粒度。SPD 条目的详细结构在第 4.4.1.2 节中描述。每个 SPD 应该 (SHOULD) 有一个名义上的最终条目,该条目匹配任何其他未匹配的内容并丢弃它。
SPD 必须 (MUST) 允许用户或管理员指定策略条目如下:
-
SPD-I: 对于要绕过或丢弃的入站流量,条目由适用于要绕过或丢弃的流量的选择器值组成。
-
SPD-O: 对于要绕过或丢弃的出站流量,条目由适用于要绕过或丢弃的流量的选择器值组成。
-
SPD-S: 对于要使用 IPsec 保护的流量,条目由适用于通过 AH 或 ESP 保护的流量的选择器值、基于这些选择器创建 SA 的控制以及实现此保护所需的参数(例如,算法、模式等)组成。请注意,SPD-S 条目还包含诸如"从数据包填充" (populate from packet, PFP) 标志之类的信息,以及指示 SA 查找除了使用 SPI 之外是否还使用本地和远程 IP 地址的位。
在 SPD 条目中表示方向性
对于受 IPsec 保护的流量,SPD 条目中的本地和远程地址和端口被交换以表示方向性,与 IKE 约定一致。通常,IPsec 处理的协议具有需要具有翻转的本地/远程 IP 地址的对称 SA 的属性。但是,对于 ICMP,通常没有这样的双向授权要求。尽管如此,为了统一性和简单性,ICMP 的 SPD 条目的指定方式与其他协议相同。还要注意,对于 ICMP、移动性头部 (Mobility Header) 和非初始分段,这些数据包中没有端口字段。
OPAQUE 和 ANY
对于 SPD 条目中的每个选择器,除了定义匹配的字面值之外,还有两个特殊值:ANY 和 OPAQUE。
-
ANY: 通配符,匹配数据包相应字段中的任何值,或匹配该字段不存在或被遮蔽的数据包。
-
OPAQUE: 表示相应的选择器字段不可用于检查,因为它可能不存在于分段中,对于给定的下一层协议不存在,或者先前应用 IPsec 可能已加密该值。
ANY 值包含 OPAQUE 值。因此,仅当需要区分字段的任何允许值与字段的缺失或不可用(例如,由于加密)的情况时,才需要使用 OPAQUE。
相关章节
- 4.4.1.1. 选择器 (Selectors) - 选择器详细定义
- 4.4.1.2. 策略条目结构 (Structure of Policy Entries) - SPD 条目结构