系统管理指南:IP 服务

第 4 部分 IP 安全性

本部分重点介绍网络安全性。IP 安全体系结构 (IPsec) 在包级别保护网络。Internet 密钥管理 (IKE) 管理 IPsec 的密钥。由 Oracle Solaris : 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 包括以下功能:

第 20 章 配置 IPsec(任务)

本章提供了在网络中实现 IPsec 的过程。以下任务列表中介绍了这些过程:

有关 IPsec 的概述信息,请参见第 19 章。有关 IPsec 的参考信息,请参见第 21 章

使用 IPsec 保护通信(任务列表)

以下任务列表提供了指向在一个或多个系统之间设置 IPsec 的过程的链接。ipsecconf(1M)ipseckey(1M)ifconfig(1M) 手册页也在各自的“示例”部分中介绍了有用的过程。

任务 

说明 

参考 

保证两个系统之间的通信安全。 

确保系统间传送的包的安全。 

如何使用 IPsec 保证两个系统之间的通信安全

使用 IPsec 策略保证 Web 服务器的安全。 

要求非 Web 通信使用 IPsec。Web 客户机由特定端口识别,这些端口将跳过 IPsec 检查。 

如何使用 IPsec 保护 Web 服务器使之免受非 Web 通信影响

显示 IPsec 策略。 

按照执行的顺序显示当前正在执行的 IPsec 策略。 

如何显示 IPsec 策略

生成随机数。 

为手动创建的安全关联生成加密材料的随机数。 

如何在 Solaris 系统上生成随机数

《System Administration Guide: Security Services》中的“How to Generate a Symmetric Key by Using the pktool Command”

手动创建或替换安全关联。 

为安全关联提供原始数据: 

  • IPsec 算法名称和加密材料

  • 安全参数索引的密钥

  • IP 源地址和目标地址

如何手动创建 IPsec 安全关联

检查 IPsec 是否正在保护包。 

检查 snoop 输出以了解指示如何保护 IP 数据报的特定头。

如何检验包是否受 IPsec 保护

(可选)创建网络安全角色。 

创建可以设置安全网络,但权限级别低于超级用户的角色。 

如何配置网络安全角色

将 IPsec 和加密材料作为一组 SMF 服务来管理。 

介绍何时以及如何使用相应命令来启用、禁用、刷新和重新启动服务。此外,还介绍了用于更改服务的属性值的命令。 

如何管理 IKE 和 IPsec 服务

设置安全的虚拟专用网络 (virtual private network, VPN)。 

在由 Internet 分隔的两个系统之间设置 IPsec。 

使用 IPsec 保护 VPN(任务列表)

使用 IPsec 保护通信

本节提供保证两个系统之间的通信安全以及保证 Web 服务器的安全的过程。要保护 VPN,请参见使用 IPsec 保护 VPN(任务列表) 。其他过程提供加密材料和安全关联并检验 IPsec 是否按照配置工作。

以下信息适用于所有的 IPsec 配置任务:

Procedure如何使用 IPsec 保证两个系统之间的通信安全

假设此过程具有以下设置:

开始之前

必须位于全局区域中才能为系统或共享 IP 区域配置 IPsec 策略。对于专用 IP 区域,请在非全局区域中配置 IPsec 策略。

  1. 在系统控制台上,承担主管理员角色或成为超级用户。

    主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”


    注 –

    远程登录会使安全关键型通信易于遭到窃听。即使以某种方式保护远程登录,系统的安全性也会降至远程登录会话的安全性。请使用 ssh 命令进行安全的远程登录。有关示例,请参见示例 20–1


  2. 在每个系统上,检查主机项。

    在当前发行版中,将主机项添加到 /etc/inet/hosts 文件。

    在运行 Solaris 10 7/07 之前的发行版的系统上,将 IPv4 和 IPv6 项添加到 /etc/inet/ipnodes 文件中。一个系统的项在文件中必须是连续的。有关系统配置文件的更多信息,请参见TCP/IP 配置文件第 11 章

    如果您仅连接具有 IPv4 地址的系统,则需要修改 /etc/inet/hosts 文件。在此示例中,连接的系统运行的是早期的 Solaris 发行版并且使用的是 IPv6 地址。

    1. 在名为 enigma 的系统上,将以下内容键入到 hostsipnodes 文件中:


      # Secure communication with partym
      192.168.13.213 partym
      2001::eeee:3333:3333 partym
    2. 在名为 partym 的系统上,将以下内容键入到 hostsipnodes 文件中:


      # Secure communication with enigma
      192.168.116.16 enigma
      2001::aaaa:6666:6666 enigma

    将名称服务用于符号名称是不安全的。

  3. 在每个系统上,创建 IPsec 策略文件。

    该文件名为 /etc/inet/ipsecinit.conf。有关示例,请参见 /etc/inet/ipsecinit.sample 文件。

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

    1. enigma 系统上添加以下策略:


      {laddr enigma raddr partym} ipsec {encr_algs aes encr_auth_algs sha1 sa shared}
    2. partym 系统上添加相同的策略:


      {laddr partym raddr enigma} ipsec {encr_algs aes encr_auth_algs sha1 sa shared}

      有关 IPsec 策略项的语法,请参见 ipsecconf(1M) 手册页。

  5. 在每个系统上,添加两个系统之间的一对 IPsec SA。

    您可以配置 Internet 密钥交换 (Internet Key Exchange, IKE) 来自动创建 SA,也可以手动添加 SA。


    注 –

    您应该使用 IKE,除非您有充分的理由手动生成和维护密钥。IKE 密钥管理比手动密钥管理更为安全。


  6. 启用 IPsec 策略。

    • 如果您运行的是 Solaris 10 4/09 发行版之前的发行版,请重新引导系统。


      # init 6
      

      然后,转至如何检验包是否受 IPsec 保护

    • 从 Solaris 10 4/09 发行版开始,请刷新 IPsec 服务并启用密钥管理服务。

      完成步骤 7步骤 10

  7. 检验 IPsec 策略文件的语法。


    # ipsecconf -c -f /etc/inet/ipsecinit.conf
    

    修复任何错误、检验文件的语法,然后继续。

  8. 刷新 IPsec 策略。


    # svcadm refresh svc:/network/ipsec/policy:default
    

    IPsec 策略缺省情况下处于启用状态,因此要对其进行刷新。如果您已禁用了 IPsec 策略,请将其启用。


    # svcadm enable svc:/network/ipsec/policy:default
    
  9. 激活 IPsec 的密钥。

    • 如果在步骤 5 中配置了 IKE,请执行以下操作之一:

      • 如果未启用 ike 服务,请将其启用。


        # svcadm enable svc:/network/ipsec/ike:default
        
      • 如果已启用 ike 服务,请重新启动此服务。


        # svcadm restart svc:/network/ipsec/ike:default
        
    • 如果在步骤 5 中手动配置了密钥,请执行以下操作之一:

      • 如果未启用 manual-key 服务,请将其启用。


        # svcadm enable svc:/network/ipsec/manual-key:default
        
      • 如果已启用 manual-key 服务,请刷新此服务。


        # svcadm refresh svc:/network/ipsec/manual-key:default
        
  10. 验证是否对包进行了保护。

    有关过程,请参见如何检验包是否受 IPsec 保护


示例 20–1 使用 ssh 连接时添加 IPsc 策略

在此示例中,管理员作为超级用户通过使用 ssh 命令访问第二个系统,在两个系统上配置 IPsc 策略和密钥。有关更多信息,请参见 ssh(1) 手册页。

下次这两个系统进行通信(包括使用 ssh 连接)时,此通信将会受 IPsec 保护。



示例 20–2 在不重新引导的情况下使用 IPsec 保证通信安全

以下示例适用于运行 Solaris 10 4/09 发行版之前的发行版的情况。即,在您的发行版中,不将 IPsec 作为服务来管理。此示例介绍了如何在测试环境中实现 IPsec。在生产环境中,重新引导比运行 ipsecconf 命令更为安全。有关安全注意事项,请参见此示例的结尾。

选择以下选项之一,而不是在步骤 6 进行重新引导:

安全注意事项-请在执行 ipsecconf 命令时阅读警告。已锁定的套接字(即已使用的套接字)提供了通向系统的不安全的后门。有关更广泛的讨论,请参见ipsecinit.confipsecconf 的安全注意事项


Procedure如何使用 IPsec 保护 Web 服务器使之免受非 Web 通信影响

安全的 Web 服务器允许 Web 客户机与 Web 服务对话。在安全的 Web 服务器上,不属于 Web 通信的通信必须通过安全检查。以下过程会跳过 Web 通信。此外,此 Web 服务器可以发出不安全的 DNS 客户机请求。所有其他通信都需要使用 AES 和 SHA-1 算法的 ESP。

开始之前

必须位于全局区域中才能配置 IPsec 策略。对于专用 IP 区域,请在非全局区域中配置 IPsec 策略。您已完成了如何使用 IPsec 保证两个系统之间的通信安全,因此实际环境符合以下状况:

  1. 在系统控制台上,承担主管理员角色或成为超级用户。

    主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”


    注 –

    远程登录会使安全关键型通信易于遭到窃听。即使以某种方式保护远程登录,系统的安全性也会降至远程登录会话的安全性。请使用 ssh 命令进行安全的远程登录。


  2. 确定哪些服务需要跳过安全策略检查。

    对于 Web 服务器,这些服务包括 TCP 端口 80 (HTTP) 和 443 (安全 HTTP)。如果 Web 服务器提供 DNS(域名系统)名称查找,则服务器还可能需要针对 TCP(传输控制协议)和 UDP(用户数据报协议)包括端口 53。

  3. 为 Web 服务器创建 IPsec 策略,并将其启用。

    对于所有 Solaris 发行版,步骤 12 均是可选的。

  4. 将 Web 服务器策略添加到 IPsec 策略文件。

    将以下行添加到 /etc/inet/ipsecinit.conf 文件:


    # Web traffic that web server should bypass.
    {lport  80 ulp tcp dir both} bypass {}
    {lport 443 ulp tcp dir both} bypass {}
    
    # Outbound DNS lookups should also be bypassed.
    {rport 53 dir both} bypass {}
    
    # Require all other traffic to use ESP with AES and SHA-1.
    # Use a unique SA for outbound traffic from the port
    {} ipsec {encr_algs aes encr_auth_algs sha1 sa shared}

    此配置仅允许安全通信访问系统,跳过检查的例外情况在步骤 4 中进行了介绍。

  5. 检验 IPsec 策略文件的语法。


    # ipsecconf -c -f /etc/inet/ipsecinit.conf
    
  6. 刷新 IPsec 策略。


    # svcadm refresh svc:/network/ipsec/policy:default
    
  7. 刷新 IPsec 的密钥。

    您的设置已完成。(可选)您可以执行步骤 12

  8. /etc/inet 目录中为 Web 服务器策略创建一个文件。


    注 –

    以下步骤用于配置运行 Solaris 10 4/09 发行版之前的发行版的 Web 服务器。


    为此文件指定一个表明其用途的名称,例如 IPsecWebInitFile。在此文件中键入以下行:


    # Web traffic that web server should bypass.
    {lport  80 ulp tcp dir both} bypass {}
    {lport 443 ulp tcp dir both} bypass {}
    
    # Outbound DNS lookups should also be bypassed.
    {rport 53 dir both} bypass {}
    
    # Require all other traffic to use ESP with AES and SHA-1.
    # Use a unique SA for outbound traffic from the port
    {} ipsec {encr_algs aes encr_auth_algs sha1 sa shared}

    此配置仅允许安全通信访问系统,跳过检查的例外情况在步骤 4 中进行了介绍。

  9. 将您在步骤 8 中创建的文件的内容复制到 /etc/inet/ipsecinit.conf 文件中。

  10. 使用只读权限保护 IPsecWebInitFile 文件。


    # chmod 400 IPsecWebInitFile
    
  11. 在不重新引导的情况下保证 Web 服务器的安全。

    选择以下选项之一:

    • 如果您使用 IKE 管理密钥,请停止并重新启动 in.iked 守护进程。


      # pkill in.iked
      # /usr/lib/inet/in.iked
      
    • 如果您手动管理密钥,请使用 ipseckeyipsecconf 命令。

      请使用 IPsecWebInitFile 作为 ipsecconf 命令的参数。如果您使用 ipsecinit.conf 文件作为参数,则当文件中的策略已经在系统上实现时,ipsecconf 命令会生成错误。


      # ipseckey -c -f /etc/inet/secret/ipseckeys 
      # ipsecconf -a /etc/inet/IPsecWebInitFile 
      

    注意 – 注意 –

    在执行 ipsecconf 命令时应阅读警告。已锁定的套接字(即已使用的套接字)提供了通向系统的不安全的后门。有关更广泛的讨论,请参见ipsecinit.confipsecconf 的安全注意事项。该警告也适用于重新启动 in.iked 守护进程。


    您也可以重新引导。重新引导可确保 IPsec 策略在所有 TCP 连接上都有效。重新引导时,TCP 连接使用 IPsec 策略文件中的策略。

  12. (可选的)使远程系统与 Web 服务器进行非 Web 通信。

    在远程系统的 ipsecinit.conf 文件中键入以下策略:


    # Communicate with web server about nonweb stuff
    #
    {laddr webserver} ipsec {encr_algs aes encr_auth_algs sha1 sa shared}

    仅当系统的 IPsec 策略匹配时,远程系统才能与 Web 服务器安全地进行非 Web 通信。

Procedure如何显示 IPsec 策略

当您发出不带任何参数的 ipsecconf 命令时,便可以查看在系统中配置的策略。

开始之前

必须在全局区域中运行 ipsecconf 命令。对于专用 IP 区域,请在非全局区域中运行 ipsecconf 命令。

  1. 承担拥有网络 IPsec 管理配置文件的角色或成为超级用户。

    如果您运行的是 Solaris 10 4/09 发行版之前的发行版,则网络 IPsec 管理配置文件不可用。请使用网络安全配置文件。

    有关如何创建拥有网络安全配置文件的角色并将该角色指定给用户的信息,请参见如何配置网络安全角色

  2. 显示 IPsec 策略。

    1. 按照全局 IPsec 策略项的添加顺序显示这些项。


      $ ipsecconf
      

      此命令将每项显示为后面跟有一个数字的索引

    2. 按照匹配项出现的顺序显示 IPsec 策略项。


      $ ipsecconf -l
      
    3. 按照匹配项出现的顺序显示 IPsec 策略项,包括每个隧道的项。


      $ ipsecconf -L
      

Procedure如何在 Solaris 系统上生成随机数

如果您要手动指定密钥,则加密材料必须是随机的。对于 Solaris 系统,其加密材料的格式是十六进制的。其他操作系统可能需要 ASCII 加密材料。如果要为 Solaris 系统生成加密材料,而且此系统与需要 ASCII 的操作系统通信,请参见示例 23–1

如果站点具有随机数生成器,请使用该生成器。否则,可以使用 od 命令,并将 /dev/random Solaris 设备作为输入。有关更多信息,请参见 od(1) 手册页。

在 Solaris 10 4/09 发行版中,您也可以使用 pktool 命令。该命令的语法比 od 命令的语法更为简单。有关详细信息,请参见《System Administration Guide: Security Services》中的“How to Generate a Symmetric Key by Using the pktool Command”

  1. 生成十六进制格式的随机数。


    % od -x|-X -A n file | head -n
    
    -x

    显示十六进制格式的八进制转储。十六进制格式对加密材料有用。十六进制以 4 个字符的块显示。

    -X

    显示十六进制格式的八进制转储。十六进制以 8 个字符的块显示。

    -A n

    从显示中删除输入偏移基址。

    file

    作为随机数的源。

    head -n

    将显示限制在输出的前 n 行中。

  2. 合并输出以创建适当长度的密钥。

    删除一行上的数字之间的空格,来创建 32 字符的密钥。一个 32 字符的密钥为 128 位。对于安全参数索引 (security parameter index, SPI),您应该使用 8 字符的密钥。密钥应该使用 0x 前缀。


示例 20–3 生成 IPsec 的加密材料

以下示例显示两行八个十六进制字符为一组的密钥。


% od -X -A n /dev/random | head -2
         d54d1536 4a3e0352 0faf93bd 24fd6cad
         8ecc2670 f3447465 20db0b0c c83f5a4b

通过合并第一行上的四个数字,可以创建一个 32 字符的密钥。以 0x 开头的 8 字符数提供了合适的 SPI 值,如 0xf3447465

以下示例显示两行四个十六进制字符为一组的密钥。


% od -x -A n /dev/random | head -2
         34ce 56b2 8b1b 3677 9231 42e9 80b0 c673
         2f74 2817 8026 df68 12f4 905a db3d ef27

通过合并第一行上的八个数字,可以创建一个 32 字符的密钥。


Procedure如何手动创建 IPsec 安全关联

以下过程提供了如何使用 IPsec 保证两个系统之间的通信安全过程的加密材料。您要为两个系统(partymenigma)生成密钥。您在一个系统上生成密钥,然后在两个系统中使用在第一个系统中生成的密钥。

开始之前

必须位于全局区域中才能手动管理共享 IP 区域的加密材料。

  1. 为 SA 生成加密材料。

    您需要将三个十六进制随机数用于外发通信,三个十六进制随机数用于传入通信。

    因此,一个系统需要生成以下数字:

    • 两个作为 spi 关键字值的十六进制随机数。一个数字用于外发通信,一个数字用于传入通信。每个数字的长度最大可以为八个字符。

    • 两个用于验证的 SHA1 算法的十六进制随机数。对于 160 位密钥,每个数字的长度必须为 40 个字符。一个数字用于 dst enigma,另一个数字用于 dst partym

    • 两个用于 ESP 加密的 AES 算法的十六进制随机数。对于 256 位密钥,每个数字的长度必须为 64 个字符。一个数字用于 dst enigma,另一个数字用于 dst partym

    如果您的站点上有随机数生成器,请使用此生成器。您也可以使用 od 命令。有关过程,请参见如何在 Solaris 系统上生成随机数

  2. 在其中一个系统的系统控制台上,承担主管理员角色或成为超级用户。

    主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”


    注 –

    远程登录会使安全关键型通信易于遭到窃听。即使以某种方式保护远程登录,系统的安全性也会降至远程登录会话的安全性。请使用 ssh 命令进行安全的远程登录。


  3. 创建 SA。

  4. 启用 ipseckey 命令模式。


    # ipseckey
    
    >

    > 提示符指明您处于 ipseckey 命令模式下。

  5. 如果您要替换现有的 SA,请刷新当前的 SA。


    > flush
    > 

    为防止入侵者有时间破坏您的 SA,您需要替换加密材料。


    注 –

    您必须在通信系统上协调密钥替换。当您在一个系统上替换 SA 时,也必须在远程系统上替换此 SA。


  6. 要创建 SA,请键入以下命令。


    > add protocol spi random-hex-string \
    src addr dst addr2 \
    protocol-prefix_alg protocol-algorithm  \
    protocol-prefixkey random-hex-string-of-algorithm-specified-length
    

    也可使用此语法来替换已刷新的 SA。

    protocol

    指定 espah

    random-hex-string

    以十六进制格式指定最多包含八个字符的随机数。字符以 0x 开头。如果输入多于安全参数索引 (security parameter index, SPI) 所能接受的数字,系统会忽略多余的数字。如果输入少于 SPI 可接受的数字,系统对您的输入进行填充。

    addr

    指定一个系统的 IP 地址。

    addr2

    指定 addr 的同级系统的 IP 地址。

    protocol-prefix

    指定 encrauth 中的一个。encr 前缀与 esp 协议一起使用。auth 前缀与 ah 协议一起使用,用于验证 esp 协议。

    protocol-algorithm

    为 ESP 或 AH 指定算法。每种算法都需要具有特定长度的密钥。

    验证算法包括 MD5 和 SHA1。从 Solaris 10 4/09 发行版开始,支持 SHA256 和 SHA512。加密算法包括 DES、3DES、AES 和 Blowfish。

    random-hex-string-of-algorithm-specified-length

    指定具有算法所要求长度的随机十六进制数。例如,MD5 算法要求其 128 位密钥使用 32 个字符的字符串。3DES 算法要求其 192 位密钥使用 48 个字符的字符串。

    1. 例如,在 enigma 系统上,保护外发的包。

      使用在步骤 1 中生成的随机数。

      对于 Solaris 10 1/06:


      > add esp spi 0x8bcd1407 \
      src 192.168.116.16 dst 192.168.13.213 \
      encr_alg aes \
      auth_alg sha1 \
      encrkey c0c65b888c2ee301c84245c3da63127e92b2676105d5330e85327c1442f37d49 \
      authkey 6fab07fec4f2895445500ed992ab48835b9286ff
      >

      注 –

      同级系统必须使用相同的加密材料和相同的 SPI。


    2. enigma 系统上,仍使用 ipseckey 命令模式保护传入的包。

      键入以下命令来保护包:


      > add esp spi 0x122a43e4 \
      src 192.168.13.213 dst 192.168.116.16 \
      encr_alg aes \
      auth_alg sha1 \
      encrkey a2ea934cd62ca7fa14907cb2ad189b68e4d18c976c14f22b30829e4b1ea4d2ae \
      authkey c80984bc4733cc0b7c228b9b74b988d2b7467745
      >

      注 –

      对于每个 SA,密钥和 SPI 可以不同。您应该为每个 SA 指定不同的密钥和不同的 SPI。


  7. 要退出 ipseckey 命令模式,请按 Ctrl-D 组合键或键入 quit

  8. 将加密材料添加到 /etc/inet/secret/ipseckeys 文件。

    在 Solaris 10 4/09 发行版之前的发行版中,此步骤可确保在重新引导时这些加密材料可用于 IPsec。

    /etc/inet/secret/ipseckeys 文件中的行与 ipseckey 命令行语言完全相同。

    1. 例如,enigma 系统上的 /etc/inet/secret/ipseckeys 文件的显示与以下内容类似:


      # ipseckeys - This file takes the file format documented in 
      #   ipseckey(1m).
      #   Note that naming services might not be available when this file
      #   loads, just like ipsecinit.conf.
      #
      # for outbound packets on enigma
      add esp spi 0x8bcd1407 \
         src 192.168.116.16 dst 192.168.13.213  \
         encr_alg aes \
         auth_alg sha1  \
         encrkey  c0c65b888c2ee301c84245c3da63127e92b2676105d5330e85327c1442f37d49 \
         authkey  6fab07fec4f2895445500ed992ab48835b9286ff
      #
      # for inbound packets
      add esp spi 0x122a43e4 \
         src 192.168.13.213 dst 192.168.116.16 \
         encr_alg aes \
         auth_alg sha1  \
         encrkey a2ea934cd62ca7fa14907cb2ad189b68e4d18c976c14f22b30829e4b1ea4d2ae \
         authkey c80984bc4733cc0b7c228b9b74b988d2b7467745
    2. 使用只读权限保护该文件。


      # chmod 400 /etc/inet/secret/ipseckeys
      
  9. partym 系统上重复该过程。

    使用 enigma 上使用的相同加密材料。

    两个系统上的加密材料必须完全相同。如以下示例所示,只有 ipseckeys 文件中的注释不同。注释不同是因为 dst enigmaenigma 系统上为传入,在 partym 系统上为外发。


    # partym ipseckeys file
    #
    # for inbound packets
    add esp spi 0x8bcd1407 \
       src 192.168.116.16 dst 192.168.13.213  \
       encr_alg aes \
       auth_alg sha1  \
       encrkey  c0c65b888c2ee301c84245c3da63127e92b2676105d5330e85327c1442f37d49 \
       authkey  6fab07fec4f2895445500ed992ab48835b9286ff
    #
    # for outbound packets
    add esp spi 0x122a43e4 \
       src 192.168.13.213 dst 192.168.116.16 \
       encr_alg aes \
       auth_alg sha1  \
       encrkey a2ea934cd62ca7fa14907cb2ad189b68e4d18c976c14f22b30829e4b1ea4d2ae \
       authkey c80984bc4733cc0b7c228b9b74b988d2b7467745
  10. 启用 manual-key 服务。


    # svcadm enable svc:/network/ipsec/manual-key
    

    要在当前发行版中替换密钥,请参见示例 20–4


示例 20–4 替换 IPsec SA

在此示例中,管理员要配置运行当前 Solaris 10 发行版的系统。管理员生成新密钥,更改 ipseckeys 文件中的加密信息,然后重新启动服务。


Procedure如何检验包是否受 IPsec 保护

要检验包是否受到保护,请使用 snoop 命令来测试连接。以下前缀可以在 snoop 输出中显示:

开始之前

您必须是超级用户或承担等效角色,才能创建 snoop 输出。必须可以同时访问两个系统才能测试连接。

  1. 在一个系统(如 partym)上,成为超级用户。


    % su -
    Password: Type root password
    # 
  2. partym 系统上,准备从远程系统搜寻包。

    partym 上的一个终端窗口中,从 enigma 系统搜寻包。


    # snoop -v enigma
    Using device /dev/hme (promiscuous mode)
  3. 从远程系统发送包。

    在另一个终端窗口中,远程登录到 enigma 系统。提供您的口令。然后,成为超级用户并将包从 enigma 系统发送到 partym 系统。包应该由 snoop -v enigma 命令捕获。


    % ssh enigma
    Password: Type your password
    % su -
    Password: Type root password
    # ping partym
    
  4. 检查 snoop 输出。

    partym 系统上,您应该看到在初始 IP 头信息之后显示 AHESP 信息的输出。类似以下内容的 AHESP 信息表明包正在受到保护:


    IP:   Time to live = 64 seconds/hops
    IP:   Protocol = 51 (AH)
    IP:   Header checksum = 4e0e
    IP:   Source address = 192.168.116.16, enigma
    IP:   Destination address = 192.168.13.213, partym
    IP:   No options
    IP:
    AH:  ----- Authentication Header -----
    AH:
    AH:  Next header = 50 (ESP)
    AH:  AH length = 4 (24 bytes)
    AH:  <Reserved field = 0x0>
    AH:  SPI = 0xb3a8d714
    AH:  Replay = 52
    AH:  ICV = c653901433ef5a7d77c76eaa
    AH:
    ESP:  ----- Encapsulating Security Payload -----
    ESP:
    ESP:  SPI = 0xd4f40a61
    ESP:  Replay = 52
    ESP:     ....ENCRYPTED DATA....
    
    ETHER:  ----- Ether Header -----
    ...

Procedure如何配置网络安全角色

如果您要使用基于角色的访问控制 (role-based access control, RBAC) 来管理系统,请使用此过程提供网络管理角色或网络安全角色。

  1. 在本地 prof_attr 数据库中查找网络权限配置文件。

    在当前发行版中,输出会显示类似于以下内容的信息:


    % cd /etc/security
    % grep Network prof_attr
    Network IPsec Management:::Manage IPsec and IKE...
    Network Link Security:::Manage network link security...
    Network Management:::Manage the host and network configuration...
    Network Security:::Manage network and host security...
    Network Wifi Management:::Manage wifi network configuration...
    Network Wifi Security:::Manage wifi network security...

    如果您运行的是 Solaris 10 4/09 发行版之前的发行版,输出会显示类似于以下内容的信息:


    % cd /etc/security
    % grep Network prof_attr
    Network Management:::Manage the host and network configuration  
    Network Security:::Manage network and host security  
    System Administrator::: Network Management 

    网络管理配置文件是系统管理员配置文件的补充配置文件。如果您将系统管理员权限配置文件纳入角色,则此角色可以执行网络管理配置文件中的命令。

  2. 确定网络管理权限配置文件中具有的命令。


    % grep "Network Management" /etc/security/exec_attr
    Network Management:solaris:cmd:::/usr/sbin/ifconfig:privs=sys_net_config
    …
    Network Management:suser:cmd:::/usr/sbin/snoop:uid=0

    使用权限 (privs=sys_net_config) 可以运行 solaris 策略命令。以超级用户 (uid=0) 身份可以运行 suser 策略命令。

  3. 确定网络安全角色在站点中的作用范围。

    使用步骤 1 中的权限配置文件定义指导您做出决定。

    • 要创建处理所有网络安全的角色,请使用网络安全权限配置文件。

    • 在当前发行版中,要创建只处理 IPsec 和 IKE 的角色,请使用网络 IPsec 管理权限配置文件。

  4. 创建拥有网络管理权限配置文件的网络安全角色。

    对于拥有除网络管理配置文件外还拥有网络安全或网络 IPsec 管理权限配置文件的角色,除了可执行其他命令外,还可按相应的权限执行 ifconfigsnoopipsecconfipseckey 命令。

    要创建该角色、将该角色指定给用户以及使用名称服务注册更改,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”


示例 20–5 在角色之间划分网络安全职责

在此示例中,管理员要在两个角色之间划分网络安全职责。其中一个角色负责管理 wifi 和链路安全,另一个角色负责管理 IPsec 和 IKE。为每个角色指定三个人,一人一班。

管理员创建的角色如下:


Procedure如何管理 IKE 和 IPsec 服务

以下步骤提供了最有可能针对 IPsec、IKE 和手动密钥管理使用 SMF 服务的情况。缺省情况下,policyipsecalgs 服务处于启用状态,而 ikemanual-key 服务处于禁用状态。

  1. 要管理 IPsec 策略,请执行以下操作之一:

    • 将新策略添加到 ipsecinit.conf 文件后,刷新 policy 服务。


      # svcadm refresh svc:/network/ipsec/policy
      
    • 更改服务属性的值后,查看属性值,然后刷新并重新启动 policy 服务。


      # svccfg -s policy setprop config/config_file=/etc/inet/MyIpsecinit.conf
      # svcprop -p config/config_file policy
      /etc/inet/MyIpsecinit.conf
      # svcadm refresh svc:/network/ipsec/policy
      # svcadm restart svc:/network/ipsec/policy
      
  2. 要自动管理密钥,请执行以下操作之一:

    • 将项添加到 /etc/inet/ike/config 文件后,启用 ike 服务。


      # svcadm enable svc:/network/ipsec/ike
      
    • 更改 /etc/inet/ike/config 文件中的项后,刷新 ike 服务。


      # svcadm refresh svc:/network/ipsec/ike
      
    • 更改服务属性的值后,查看属性值,然后刷新并重新启动服务。


      # svccfg -s ike setprop config/admin_privilege=modkeys
      # svcprop -p config/admin_privilege ike
      modkeys
      # svcadm refresh svc:/network/ipsec/ike
      # svcadm restart svc:/network/ipsec/ike
      
    • 要停止 ike 服务,请将其禁用。


      # svcadm disable svc:/network/ipsec/ike
      
  3. 要手动管理密钥,请执行以下操作之一:

    • 将项添加到 /etc/inet/secret/ipseckeys 文件后,启用 manual-key 服务。


      # svcadm enable svc:/network/ipsec/manual-key
      
    • 更改 ipseckeys 文件后,刷新服务。


      # svcadm refresh manual-key
      
    • 更改服务属性的值后,查看属性值,然后刷新并重新启动服务。


      # svccfg -s manual-key setprop config/config_file=/etc/inet/secret/MyIpseckeyfile
      # svcprop -p config/config_file manual-key
      /etc/inet/secret/MyIpseckeyfile
      # svcadm refresh svc:/network/ipsec/manual-key
      # svcadm restart svc:/network/ipsec/manual-key
      
    • 要阻止手动密钥管理,请禁用 manual-key 服务。


      # svcadm disable svc:/network/ipsec/manual-key
      
  4. 如果修改 IPsec 协议和算法表,请刷新 ipsecalgs 服务。


    # svcadm refresh svc:/network/ipsec/ipsecalgs
    
故障排除

使用 svcs service 命令找到服务的状态。如果服务处于 maintenance 模式,请遵循 svcs -x service 命令输出的调试建议。

使用 IPsec 保护 VPN

IPsec 隧道可以保护 VPN。在 Solaris 10 7/07 发行版中,隧道可以处于隧道模式或传输模式下。隧道模式可与其他供应商的 IPsec 实现交互使用。传输模式可与 Solaris OS 的早期版本交互使用。有关隧道模式的讨论,请参见IPsec 中的传输模式和隧道模式

处于隧道模式的隧道可提供对通信的更精细控制。在隧道模式中,对于内部 IP 地址,可以为单个端口指定所需的特定保护。

使用 IPsec 保护 VPN 的示例(使用处于隧道模式的隧道)

图 20–1 IPsec 隧道示意图

图中显示了一个连接着两个 LAN 的 VPN。每个 LAN 具有四个子网。

以下示例假设这些 LAN 的所有子网都配置了隧道:


## Tunnel configuration ##
# Tunnel name is ip.tun0
# Intranet point for the source is 10.1.2.1
# Intranet point for the destination is 10.2.3.1
# Tunnel source is 192.168.1.10
# Tunnel destination is 192.168.2.10

示例 20–6 创建一个所有子网都可以使用的隧道

在此示例中,来自图 20–1 中的中心 LAN 的本地 LAN 的所有通信都可以通过隧道从路由器 1 传送到路由器 2,然后再传送到国外 LAN 的所有本地 LAN。通信使用 AES 进行加密。


## IPsec policy ##
{tunnel ip.tun0 negotiate tunnel} 
 ipsec {encr_algs aes encr_auth_algs sha1 sa shared}


示例 20–7 创建一个仅连接两个子网的隧道

在此示例中,仅为中心 LAN 的子网 10.1.2.0/24 和国外 LAN 的子网 10.2.3.0/24 之间的通信建立了隧道并对通信进行了加密。在中心 LAN 没有其他 IPsec 策略的情况下,如果中心 LAN 尝试通过此隧道路由其他 LAN 的任何通信,则通信会在路由器 1 处被丢弃。


## IPsec policy ##
{tunnel ip.tun0 negotiate tunnel laddr 10.1.2.0/24 raddr 10.2.3.0/24} 
 ipsec {encr_algs aes encr_auth_algs md5 sha1 shared}


示例 20–8 仅在两个子网之间为电子邮件通信创建隧道

在此示例中,仅为电子邮件通信创建隧道。通信从中心 LAN 的子网 10.1.2.0/24 传送到国外 LAN 的子网 10.2.3.0/24 上的电子邮件服务器。电子邮件使用 Blowfish 进行加密。这些策略可应用于远程电子邮件端口和本地电子邮件端口。rport 策略可保护从中心 LAN 发送到国外 LAN 远程电子邮件端口的电子邮件。lport 策略可以保护中心 LAN 在本地端口 25 接收到的来自国外 LAN 的电子邮件。


## IPsec policy for email from Central to Overseas ##
{tunnel ip.tun0 negotiate tunnel ulp tcp rport 25 
 laddr 10.1.2.0/24 raddr 10.2.3.0/24} 
 ipsec {encr_algs blowfish encr_auth_algs sha1 sa shared}

## IPsec policy for email from Overseas to Central ##
{tunnel ip.tun0 negotiate tunnel ulp tcp lport 25 
 laddr 10.1.2.0/24 raddr 10.2.3.0/24} 
 ipsec {encr_algs blowfish encr_auth_algs sha1 sa shared}


示例 20–9 为所有子网的 FTP 通信创建隧道

在此示例中,IPsec 策略使用 AES 保护图 20–1 中用于从中心 LAN 的所有子网向国外 LAN 的所有子网传输数据的 FTP 端口。此配置适用于 FTP 的主动模式。


## IPsec policy for outbound FTP from Central to Overseas ##
{tunnel ip.tun0 negotiate tunnel ulp tcp rport 21} 
  ipsec {encr_algs aes encr_auth_algs sha1 sa shared}
{tunnel ip.tun0 negotiate tunnel ulp tcp lport 20} 
  ipsec {encr_algs aes encr_auth_algs sha1 sa shared}

## IPsec policy for inbound FTP from Central to Overseas ##
{tunnel ip.tun0 negotiate tunnel ulp tcp lport 21} 
  ipsec {encr_algs aes encr_auth_algs sha1 sa shared}
{tunnel ip.tun0 negotiate tunnel ulp tcp rport 20} 
  ipsec {encr_algs aes encr_auth_algs sha1 sa shared}

使用 IPsec 保护 VPN(任务列表)

以下任务列表列出了配置 IPsec 以保护 Internet 上的通信的相关过程的参考链接。可使用这些过程在由 Internet 分隔的两个系统之间设置安全的虚拟专用网络 (virtual private network, VPN)。该技术的一种常见用途是确保在家里办公的员工与其公司办公室之间的通信安全。

任务 

说明 

参考 

保护通过 IPv4 进行的处于隧道模式的隧道通信。 

保护两个 Solaris 10 系统之间、两个 Oracle Solaris : 系统之间或 Solaris 10 系统与 Oracle Solaris Express 系统之间处于隧道模式的通信。Solaris 10 系统必须在 Solaris 10 7/07 发行版或更高版本上运行。 

此外,还保护 Solaris 10 系统或 Oracle Solaris : Express 系统与在其他平台上运行的系统之间处于隧道模式的通信。Solaris 10 系统必须在 Solaris 10 7/07 发行版或更高版本上运行。 

如何使用通过 IPv4 实现的处于隧道模式的 IPsec 隧道保护 VPN

保护通过 Ipv6 进行的处于隧道模式的隧道通信。 

保护两个使用 IPv6 协议的 Oracle Solaris : 系统之间处于隧道模式的通信。 

如何使用通过 Ipv6 实现的处于隧道模式的 IPsec 隧道保护 VPN

保护通过 IPv4 进行的处于传输模式的隧道通信。 

保护两个 Solaris 10 系统之间、两个 Solaris 系统之间或 Solaris 10 系统与 Oracle Solaris 系统之间处于传输模式的通信。Solaris 10 系统必须在 Solaris 10 7/07 发行版或更高版本上运行。 

此外,还保护运行 Solaris OS 的早期版本的系统与 Solaris 10 或 Oracle Solaris : 系统之间处于传输模式的通信。Solaris 10 系统必须在 Solaris 10 7/07 发行版或更高版本上运行。 

如何使用通过 IPv4 实现的处于传输模式的 IPsec 隧道保护 VPN

通过使用旧的、过时的语法来保护通信。在与运行 Solaris OS 的早期版本的系统进行通信时,此方法很有用。此方法简化了两个系统上的配置文件之间的对比。 

示例 20–11

示例 20–16

保护通过 Ipv6 进行的处于传输模式的隧道通信。 

保护两个使用 IPv6 协议的 Oracle Solaris : 系统之间处于传输模式的通信。 

如何使用通过 Ipv6 实现的处于传输模式的 IPsec 隧道保护 VPN

防止 IP 电子欺骗。 

创建 SMF 服务,以防止系统在没有对包进行解密的情况下通过 VPN 转发包。 

如何防止 IP 电子欺骗

用于保护 VPN 的 IPsec 任务的网络拓扑说明

本节中的过程假设您已经进行了以下设置。有关此网络的描述,请参见图 20–2

图 20–2 由 Internet 分隔的办公室之间的 VPN 样例

显示欧洲办事处和加利福尼亚办事处之间的 VPN 的详细信息的图。

如前面的说明所示,IPv4 网络过程使用以下配置参数。

参数 

欧洲 

加利福尼亚 

系统名称 


enigma

partym

系统内联网接口 


hme1

hme1

系统内联网地址,也是步骤 7 中的 -point 地址


10.16.16.6

10.1.3.3

系统 Internet 接口 


hme0

hme0

系统 Internet 地址,也是步骤 7 中的 tsrc 地址


192.168.116.16

192.168.13.213

Internet 路由器名称 


router-E

router-C

Internet 路由器地址 


192.168.116.4

192.168.13.5

隧道名称 


ip.tun0

ip.tun0

下面的 IPv6 地址在过程中使用。隧道名称相同。

参数 

欧洲 

加利福尼亚 

系统内联网地址 


6000:6666::aaaa:1116

6000:3333::eeee:1113

系统 Internet 地址 


2001::aaaa:6666:6666

2001::eeee:3333:3333

Internet 路由器地址 


2001::aaaa:0:4

2001::eeee:0:1

Procedure如何使用通过 IPv4 实现的处于隧道模式的 IPsec 隧道保护 VPN

在隧道模式下,内部 IP 包决定保护其内容的 IPsec 策略。

此过程扩展了如何使用 IPsec 保证两个系统之间的通信安全过程。用于保护 VPN 的 IPsec 任务的网络拓扑说明介绍了具体设置。


注 –

在两个系统中执行此过程中的步骤。


除了连接两个系统之外,还要连接两个连接到这两个系统的内联网。此过程中的系统作为网关使用。

开始之前

必须位于全局区域中才能为系统或共享 IP 区域配置 IPsec 策略。对于专用 IP 区域,请在非全局区域中配置 IPsec 策略。

  1. 在系统控制台上,承担主管理员角色或成为超级用户。

    主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”


    注 –

    远程登录会使安全关键型通信易于遭到窃听。即使以某种方式保护远程登录,系统的安全性也会降至远程登录会话的安全性。请使用 ssh 命令进行安全的远程登录。


  2. 在配置 IPsec 之前控制包流。

    1. 确保 IP 转发和 IP 动态路由功能均处于禁用状态。


      # routeadm
      Configuration       Current         Current
             Option       Configuration  System State
      --------------------------------------------------
      IPv4 forwarding     disabled           disabled
         IPv4 routing     default (enabled)   enabled
      …

      如果已启用 IP 转发和 IP 动态路由功能,您可以通过键入以下内容来禁用它们:


      # routeadm -d ipv4-routing -d ipv4-forwarding
      # routeadm -u
      

      关闭 IP 转发功能可阻止包通过此系统从一个网络转发到另一个网络。有关 routeadm 命令的说明,请参见 routeadm(1M) 手册页。

    2. 打开 IP 严格目标多宿主。


      # ndd -set /dev/ip ip_strict_dst_multihoming 1
      

      打开 IP 严格目标多宿主可确保发往系统的目标地址之一的包到达正确的目标地址。

      启用严格目标多宿主时,到达特定接口的包必须传送到此接口的本地 IP 地址之一。所有其他包,甚至是传送到系统其他本地地址的包,均被丢弃。


      注意 – 注意 –

      系统启动时多宿主值会恢复为缺省值。要使更改的值具有持久性,请参见如何防止 IP 电子欺骗


    3. 禁用多数网络服务,也可能会禁用所有网络服务。


      注 –

      如果系统中安装了“受限制的”SMF 配置文件,则可以跳过此步骤。将禁用网络服务(Solaris 安全 Shell 除外)。


      禁用网络服务可防止 IP 包危害系统。例如,可以采用 SNMP 守护进程、telnet 连接或 rlogin 连接。

      选择以下选项之一:

      • 如果运行的是 Solaris 10 11/06 发行版或更高版本,请运行“受限制的”SMF 配置文件。


        # netservices limited
        
      • 否则,单独禁用网络服务。


        # svcadm disable network/ftp:default
        # svcadm disable network/finger:default
        # svcadm disable network/login:rlogin
        # svcadm disable network/nfs/server:default
        # svcadm disable network/rpc/rstat:default
        # svcadm disable network/smtp:sendmail
        # svcadm disable network/telnet:default
        
    4. 检验是否已禁用大多数网络服务。

      检验回送挂载和 ssh 服务是否正在运行。


      # svcs | grep network
      online         Aug_02   svc:/network/loopback:default
      …
      online         Aug_09   svc:/network/ssh:default
  3. 在两个系统间添加一对 SA。

    选择以下选项之一:

  4. 添加 IPsec 策略。

    编辑 /etc/inet/ipsecinit.conf 文件来为 VPN 添加 IPsec 策略。要增强策略,请参见示例 20–12。有关其他示例,请参见使用 IPsec 保护 VPN 的示例(使用处于隧道模式的隧道)

    在此策略中,本地 LAN 上的系统与网关的内部 IP 地址之间不需要 IPsec 保护,因此将添加 bypass 语句。

    1. enigma 系统上,将以下项键入到 ipsecinit.conf 文件中:


      # LAN traffic to and from this host can bypass IPsec.
      {laddr 10.16.16.6 dir both} bypass {}
      
      # WAN traffic uses ESP with AES and SHA-1.
      {tunnel ip.tun0 negotiate tunnel} 
       ipsec {encr_algs aes encr_auth_algs sha1 sa shared}
    2. partym 系统上,将以下项键入到 ipsecinit.conf 文件中:


      # LAN traffic to and from this host can bypass IPsec.
      {laddr 10.1.3.3 dir both} bypass {}
      
      # WAN traffic uses ESP with AES and SHA-1.
      {tunnel ip.tun0 negotiate tunnel} 
       ipsec {encr_algs aes encr_auth_algs sha1 sa shared}
  5. (可选的)检验 IPsec 策略文件的语法。


    # ipsecconf -c -f /etc/inet/ipsecinit.conf
    
  6. 要配置隧道并使用 IPsec 对其加以保护,请根据 Solaris 发行版执行相应步骤:

  7. etc/hostname.ip.tun0 文件中配置隧道 ip.tun0

    此文件的语法如下所示:


    system1-point system2-point tsrc system1-taddr tdst system2-taddr router up
    1. enigma 系统上,向 hostname.ip.tun0 文件添加以下项:


      10.16.16.6 10.1.3.3 tsrc 192.168.116.16 tdst 192.168.13.213 router up
    2. partym 系统上,向 hostname.ip.tun0 文件添加以下项:


      10.1.3.3 10.16.16.6 tsrc 192.168.13.213 tdst 192.168.116.16 router up
  8. 使用创建的 IPsec 策略保护隧道。


    # svcadm refresh svc:/network/ipsec/policy:default
    
  9. 要将隧道配置文件的内容读入内核,请重新启动网络服务。


    # svcadm restart svc:/network/initial:default
    
  10. hme1 接口打开 IP 转发功能。

    1. enigma 系统上,将路由器项添加到 /etc/hostname.hme1 文件。


      192.168.116.16 router
    2. partym 系统上,将路由器项添加到 /etc/hostname.hme1 文件。


      192.168.13.213 router

    IP 转发指可以转发来自其他位置的包。IP 转发也指由此接口发出的包可能源于其他位置。要成功转发包,必须打开接收接口和传送接口的 IP 转发功能。

    因为 hme1 接口在内联网内部,所以必须打开 hme1 的 IP 转发功能。因为 ip.tun0 通过 Internet 连接两个系统,所以必须打开 ip.tun0 的 IP 转发功能。

    hme0 接口已关闭其 IP 转发功能以阻止外部入侵者向受保护的内联网中注入包。外部是指 Internet。

  11. 确保路由协议不在内联网内通告缺省的路由。

    1. enigma 系统上,将 private 标志添加到 /etc/hostname.hme0 文件。


      10.16.16.6 private
    2. partym 系统上,将 private 标志添加到 /etc/hostname.hme0 文件。


      10.1.3.3 private

    即使 hme0 关闭 IP 转发功能,路由协议实现仍会通告接口。例如,in.routed 协议仍会通告 hme0 可将包转发到内联网中的对等接口。可以通过设置接口的专用标志,阻止这些通告。

  12. 手动添加通过 hme0 接口实现的缺省路由。

    缺省路由必须是可以直接访问 Internet 的路由器。

    1. enigma 系统上,添加以下路由:


      # route add default 192.168.116.4
      
    2. partym 系统上,添加以下路由:


      # route add default 192.168.13.5
      

      即使 hme0 接口不是内联网的一部分,hme0 也需要通过 Internet 访问其同级系统。要找到其同级系统,hme0 需要有关 Internet 路由的信息。对于 Internet 的其他部分来说,VPN 系统像是一台主机,而不是路由器。因此,您可以使用缺省的路由器或运行路由器搜索协议来查找同级系统。有关更多信息,请参见 route(1M)in.routed(1M) 手册页。

  13. 要完成该过程,请转至步骤 22 运行路由协议。

  14. 配置隧道 ip.tun0


    注 –

    以下步骤用于在运行 Solaris 10 4/09 发行版之前的发行版的系统中配置隧道。


    使用 ifconfig 命令创建点对点接口:


    # ifconfig ip.tun0 plumb
    
    # ifconfig ip.tun0 system1-point system2-point \
    tsrc system1-taddr tdst system2-taddr
    
    1. enigma 系统上键入以下命令:


      # ifconfig ip.tun0 plumb
      
      # ifconfig ip.tun0 10.16.16.6 10.1.3.3 \
      tsrc 192.168.116.16 tdst 192.168.13.213
      
    2. partym 系统上键入以下命令:


      # ifconfig ip.tun0 plumb
      
      # ifconfig ip.tun0 10.1.3.3 10.16.16.6  \
      tsrc 192.168.13.213 tdst 192.168.116.16
      
  15. 使用创建的 IPsec 策略保护隧道。


    # ipsecconf
    
  16. 初启隧道的路由器。


    # ifconfig ip.tun0 router up
    
  17. hme1 接口打开 IP 转发功能。


    # ifconfig hme1 router
    

    IP 转发指可以转发来自其他位置的包。IP 转发也指由此接口发出的包可能源于其他位置。要成功转发包,必须打开接收接口和传送接口的 IP 转发功能。

    因为 hme1 接口在内联网内部,所以必须打开 hme1 的 IP 转发功能。因为 ip.tun0 通过 Internet 连接两个系统,所以必须打开 ip.tun0 的 IP 转发功能。

    hme0 接口已关闭其 IP 转发功能以阻止外部入侵者向受保护的内联网中注入包。外部是指 Internet。

  18. 确保路由协议不在内联网内通告缺省的路由。


    # ifconfig hme0 private
    

    即使 hme0 关闭 IP 转发功能,路由协议实现仍会通告接口。例如,in.routed 协议仍会通告 hme0 可将包转发到内联网中的对等接口。可以通过设置接口的专用标志,阻止这些通告。

  19. 手动添加通过 hme0 实现的缺省路由。

    缺省路由必须是可以直接访问 Internet 的路由器。

    1. enigma 系统上,添加以下路由:


      # route add default 192.168.116.4
      
    2. partym 系统上,添加以下路由:


      # route add default 192.168.13.5
      

      即使 hme0 接口不是内联网的一部分,hme0 也需要通过 Internet 访问其同级系统。要找到其同级系统,hme0 需要有关 Internet 路由的信息。对于 Internet 的其他部分来说,VPN 系统像是一台主机,而不是路由器。因此,您可以使用缺省的路由器或运行路由器搜索协议来查找同级系统。有关更多信息,请参见 route(1M)in.routed(1M) 手册页。

  20. 通过向 /etc/hostname.ip.tun0 文件中添加项来确保 VPN 在系统重新引导后启动。


    system1-point system2-point tsrc system1-taddr tdst system2-taddr router up
    1. enigma 系统上,向 hostname.ip.tun0 文件添加以下项:


      10.16.16.6 10.1.3.3 tsrc 192.168.116.16 tdst 192.168.13.213 router up
    2. partym 系统上,向 hostname.ip.tun0 文件添加以下项:


      10.1.3.3 10.16.16.6 tsrc 192.168.13.213 tdst 192.168.116.16 router up
  21. 将接口文件配置为将正确的参数传送到路由选择守护进程。

    1. enigma 系统上,修改 /etc/hostname.interface 文件。


      # cat /etc/hostname.hme0
      ## enigma
      10.16.16.6 private

      # cat /etc/hostname.hme1
      ## enigma
      192.168.116.16 router
    2. partym 系统上,修改 /etc/hostname.interface 文件。


      # cat /etc/hostname.hme0
      ## partym
      10.1.3.3 private

      # cat /etc/hostname.hme1
      ## partym
      192.168.13.213 router
  22. 运行路由协议。


    # routeadm -e ipv4-routing
    # routeadm -u
    

    您可能需要在运行路由协议之前先配置路由协议。有关更多信息,请参见Oracle Solaris : 中的路由协议。有关过程,请参见如何配置 IPv4 路由器


示例 20–10 测试时创建临时隧道

在此示例中,管理员在 Solaris 10 4/09 系统中测试隧道的创建情况。稍后,管理员将使用如何使用通过 IPv4 实现的处于隧道模式的 IPsec 隧道保护 VPN过程使隧道成为永久隧道。在测试过程中,管理员在系统 system1system2 上执行以下一系列步骤:



示例 20–11 使用命令行为早期版本的 Solaris 系统创建隧道

在 Solaris 10 7/07 发行版中,简化了 ifconfig 命令的语法。在此示例中,管理员将针对运行 Solaris 10 7/07 发行版之前的 Solaris 版本的系统测试隧道创建情况。通过使用 ifconfig 命令的原始语法,管理员可以在两个通信系统中使用完全相同的命令。稍后,管理员将使用如何使用通过 IPv4 实现的处于隧道模式的 IPsec 隧道保护 VPN使隧道成为永久隧道。

在测试过程中,管理员在系统 system1system2 上执行以下步骤:



示例 20–12 在 LAN 中所有系统中要求 IPsec 策略

在此示例中,管理员注释掉了在步骤 4 中配置的 bypass 策略,从而加强了保护。通过此策略配置,LAN 中的每个系统都必须激活 IPsec 以便与路由器通信。


# LAN traffic must implement IPsec.
# {laddr 10.1.3.3 dir both} bypass {}

# WAN traffic uses ESP with AES and SHA-1.
{tunnel ip.tun0 negotiate tunnel} ipsec {encr_algs aes encr_auth_algs sha1}


示例 20–13 使用 IPsec 保护 Telnet 通信以及使用 IPsec 保护 SMTP 通信(二者不同)

在此示例中,第一条规则使用 Blowfish 和 SHA-1 保护端口 23 上的 telnet 通信。第二条规则使用 AES 和 MD5 保护端口 25 上的 SMTP 通信。


{laddr 10.1.3.3 ulp tcp dport 23 dir both} 
  ipsec {encr_algs blowfish encr_auth_algs sha1 sa unique}
{laddr 10.1.3.3 ulp tcp dport 25 dir both} 
 ipsec {encr_algs aes encr_auth_algs md5 sa unique}


示例 20–14 使用处于隧道模式的 IPsec 隧道保护子网通信以及使用处于隧道模式的 IPsec 隧道保护其他网络通信(二者不同)

以下隧道配置保护子网 10.1.3.0/24 在隧道上的所有通信:


{tunnel ip.tun0 negotiate tunnel laddr 10.1.3.0/24} 
  ipsec {encr_algs aes encr_auth_algs sha1 sa shared}

以下隧道配置保护子网 10.1.3.0/24 在隧道上与不同子网的通信。以 10.2.x.x 开头的子网要经由隧道。


{tunnel ip.tun0 negotiate tunnel laddr 10.1.3.0/24 raddr 10.2.1.0/24} 
  ipsec {encr_algs blowfish encr_auth_algs sha1 sa shared}

{tunnel ip.tun0 negotiate tunnel laddr 10.1.3.0/24 raddr 10.2.2.0/24} 
  ipsec {encr_algs blowfish encr_auth_algs sha1 sa shared}

{tunnel ip.tun0 negotiate tunnel laddr 10.1.3.0/24 raddr 10.2.3.0/24} 
  ipsec {encr_algs aes encr_auth_algs sha1 sa shared}

Procedure如何使用通过 Ipv6 实现的处于隧道模式的 IPsec 隧道保护 VPN

要在 IPv6 网络中设置 VPN,您需要执行与针对 IPv4 网络执行的步骤相同的步骤。但是,命令的语法稍有不同。有关运行特定命令的更详尽的原因说明,请参见如何使用通过 IPv4 实现的处于隧道模式的 IPsec 隧道保护 VPN中的相应步骤。


注 –

在两个系统中执行此过程中的步骤。


此过程使用以下配置参数。

参数 

欧洲 

加利福尼亚 

系统名称 


enigma

partym

系统内联网接口 


hme1

hme1

系统 Internet 接口 


hme0

hme0

系统内联网地址 


6000:6666::aaaa:1116

6000:3333::eeee:1113

系统 Internet 地址 


2001::aaaa:6666:6666

2001::eeee:3333:3333

Internet 路由器名称 


router-E

router-C

Internet 路由器地址 


2001::aaaa:0:4

2001::eeee:0:1

隧道名称 


ip6.tun0

ip6.tun0

  1. 在系统控制台上,承担主管理员角色或成为超级用户。

    主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”


    注 –

    远程登录会使安全关键型通信易于遭到窃听。即使以某种方式保护远程登录,系统的安全性也会降至远程登录会话的安全性。请使用 ssh 命令进行安全的远程登录。


  2. 在配置 IPsec 之前控制包流。

    有关这些命令的作用,请参见步骤 2中的如何使用通过 IPv4 实现的处于隧道模式的 IPsec 隧道保护 VPN

    1. 确保 IP 转发和 IP 动态路由功能均处于禁用状态。


      # routeadm
      Configuration       Current         Current
             Option       Configuration  System State
      --------------------------------------------------
      …
      IPv6 forwarding     disabled          disabled
         IPv6 routing     disabled          disabled

      如果已启用 IP 转发和 IP 动态路由功能,您可以通过键入以下内容来禁用它们:


      # routeadm -d ipv6-forwarding -d ipv6-routing
      # routeadm -u
      
    2. 打开 IP 严格目标多宿主。


      # ndd -set /dev/ip ip6_strict_dst_multihoming 1
      

      注意 – 注意 –

      系统引导时,会将 ip6_strict_dst_multihoming 的值恢复为缺省值。要使更改的值具有持久性,请参见如何防止 IP 电子欺骗


    3. 禁用多数网络服务,也可能会禁用所有网络服务。


      注 –

      如果系统中安装了“受限制的”SMF 配置文件,则可以跳过此步骤。将禁用网络服务(Solaris 安全 Shell 除外)。


      禁用网络服务可防止 IP 包危害系统。例如,可以采用 SNMP 守护进程、telnet 连接或 rlogin 连接。

      选择以下选项之一:

      • 如果运行的是 Solaris 10 11/06 发行版或更高版本,请运行“受限制的”SMF 配置文件。


        # netservices limited
        
      • 否则,单独禁用网络服务。


        # svcadm disable network/ftp:default
        # svcadm disable network/finger:default
        # svcadm disable network/login:rlogin
        # svcadm disable network/nfs/server:default
        # svcadm disable network/rpc/rstat:default
        # svcadm disable network/smtp:sendmail
        # svcadm disable network/telnet:default 
    4. 检验是否已禁用大多数网络服务。

      检验回送挂载和 ssh 服务是否正在运行。


      # svcs | grep network
      online         Aug_02   svc:/network/loopback:default
      ...
      online         Aug_09   svc:/network/ssh:default
  3. 在两个系统间添加一对 SA。

    选择以下选项之一:

  4. 为 VPN 添加 IPsec 策略。

    编辑 /etc/inet/ipsecinit.conf 文件来为 VPN 添加 IPsec 策略。

    1. enigma 系统上,将以下项键入到 ipsecinit.conf 文件中:


      # IPv6 Neighbor Discovery messages bypass IPsec.
      {ulp ipv6-icmp type 133-137 dir both} pass {}
      
      # LAN traffic to and from this host can bypass IPsec.
      {laddr 6000:6666::aaaa:1116 dir both} bypass {}
      
      # WAN traffic uses ESP with AES and SHA-1.
      {tunnel ip6.tun0 negotiate tunnel} 
        ipsec {encr_algs aes encr_auth_algs sha1 sa shared}
    2. partym 系统上,将以下项键入到 ipsecinit.conf 文件中:


      # IPv6 Neighbor Discovery messages bypass IPsec.
      {ulp ipv6-icmp type 133-137 dir both} pass {}
      
      # LAN traffic to and from this host can bypass IPsec.
      {laddr 6000:3333::eeee:1113 dir both} bypass {}
      
      # WAN traffic uses ESP with AES and SHA-1.
      {tunnel ip6.tun0 negotiate tunnel} 
        ipsec {encr_algs aes encr_auth_algs sha1 sa shared}
  5. (可选的)检验 IPsec 策略文件的语法。


    # ipsecconf -c -f /etc/inet/ipsecinit.conf
    
  6. 要配置隧道并使用 IPsec 对其加以保护,请根据 Solaris 发行版执行相应步骤:

  7. /etc/hostname.ip6.tun0 文件中配置隧道 ip6.tun0

    1. enigma 系统上,向 hostname.ip6.tun0 文件添加以下项:


      6000:6666::aaaa:1116 6000:3333::eeee:1113 tsrc 2001::aaaa:6666:6666 tdst 2001::eeee:3333:3333 router up
    2. partym 系统上,向 hostname.ip6.tun0 文件添加以下项:


      6000:3333::eeee:1113  6000:6666::aaaa:1116 tsrc 2001::eeee:3333:3333 tdst 2001::aaaa:6666:6666 router up
  8. 使用创建的 IPsec 策略保护隧道。


    # svcadm refresh svc:/network/ipsec/policy:default
    
  9. 要将隧道配置文件的内容读入内核,请重新启动网络服务。


    # svcadm restart svc:/network/initial:default
    
  10. hme1 接口打开 IP 转发功能。

    1. enigma 系统上,将路由器项添加到 /etc/hostname6.hme1 文件。


      2001::aaaa:6666:6666 inet6 router
    2. partym 系统上,将路由器项添加到 /etc/hostname6.hme1 文件。


      2001::eeee:3333:3333 inet6 router
  11. 确保路由协议不在内联网内通告缺省的路由。

    1. enigma 系统上,将 private 标志添加到 /etc/hostname6.hme0 文件。


      6000:6666::aaaa:1116 inet6 private
    2. partym 系统上,将 private 标志添加到 /etc/hostname6.hme0 文件。


      6000:3333::eeee:1113 inet6 private
  12. 手动添加通过 hme0 实现的缺省路由。

    1. enigma 系统上,添加以下路由:


      # route add -inet6 default 2001::aaaa:0:4
      
    2. partym 系统上,添加以下路由:


      # route add -inet6 default 2001::eeee:0:1
      
  13. 要完成该过程,请转至步骤 22 运行路由协议。

  14. 配置安全隧道 ip6.tun0


    注 –

    以下步骤用于在运行 Solaris 10 4/09 发行版之前的发行版的系统中配置隧道。


    1. enigma 系统上键入以下命令:


      # ifconfig ip6.tun0 inet6 plumb
      
      # ifconfig ip6.tun0 inet6 6000:6666::aaaa:1116 6000:3333::eeee:1113 \
      tsrc 2001::aaaa:6666:6666   tdst 2001::eeee:3333:3333
      
    2. partym 系统上键入以下命令:


      # ifconfig ip6.tun0 inet6 plumb
      
      # ifconfig ip6.tun0 inet6 6000:3333::eeee:1113 6000:6666::aaaa:1116 \
      tsrc 2001::eeee:3333:3333   tdst 2001::aaaa:6666:6666
      
  15. 使用创建的 IPsec 策略保护隧道。


    # ipsecconf
    
  16. 初启隧道的路由器。


    # ifconfig ip6.tun0 router up
    
  17. 在每个系统上,为 hme1 接口打开 IP 转发功能。


    # ifconfig hme1 router
    
  18. 确保路由协议不在内联网内通告缺省的路由。


    # ifconfig hme0 private
    
  19. 手动添加通过 hme0 实现的缺省路由。

    缺省路由必须是可以直接访问 Internet 的路由器。

    1. enigma 系统上,添加以下路由:


      # route add -inet6 default 2001::aaaa:0:4
      
    2. partym 系统上,添加以下路由:


      # route add -inet6 default 2001::eeee:0:1
      
  20. 通过向 /etc/hostname6.ip6.tun0 文件中添加项来确保 VPN 在系统重新引导后启动。

    该项复制在步骤 14 中传递到 ifconfig 命令的参数。

    1. enigma 系统上,向 hostname6.ip6.tun0 文件添加以下项:


      6000:6666::aaaa:1116 6000:3333::eeee:1113 \
      tsrc 2001::aaaa:6666:6666  tdst 2001::eeee:3333:3333 router up
    2. partym 系统上,向 hostname6.ip6.tun0 文件添加以下项:


      6000:3333::eeee:1113 6000:6666::aaaa:1116 \
      tsrc 2001::eeee:3333:3333   tdst 2001::aaaa:6666:6666  router up
  21. 在每个系统上,将接口文件配置为将正确的参数传送到路由选择守护进程。

    1. enigma 系统上,修改 /etc/hostname6. interface 文件。


      # cat /etc/hostname6.hme0
      ## enigma
      6000:6666::aaaa:1116 inet6 private

      #  cat /etc/hostname6.hme1
      ## enigma
      2001::aaaa:6666:6666 inet6 router
    2. partym 系统上,修改 /etc/hostname6. interface 文件。


      # cat /etc/hostname6.hme0
      ## partym
      6000:3333::eeee:1113 inet6 private

      # cat /etc/hostname6.hme1
      ## partym
      2001::eeee:3333:3333 inet6 router
  22. 运行路由协议。


    # routeadm -e ipv6-routing
    # routeadm -u
    

    您可能需要在运行路由协议之前先配置路由协议。有关更多信息,请参见Oracle Solaris : 中的路由协议。有关过程,请参见配置 IPv6 路由器

Procedure如何使用通过 IPv4 实现的处于传输模式的 IPsec 隧道保护 VPN

在传输模式下,外部头决定保护内部 IP 包的 IPsec 策略。

此过程扩展了如何使用 IPsec 保证两个系统之间的通信安全过程。除了连接两个系统之外,还要连接两个连接到这两个系统的内联网。此过程中的系统作为网关使用。

此过程使用用于保护 VPN 的 IPsec 任务的网络拓扑说明中介绍的设置。有关运行特定命令的更详尽的原因说明,请参见如何使用通过 IPv4 实现的处于隧道模式的 IPsec 隧道保护 VPN中的相应步骤。


注 –

在两个系统中执行此过程中的步骤。


  1. 在系统控制台上,承担主管理员角色或成为超级用户。

    主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”


    注 –

    远程登录会使安全关键型通信易于遭到窃听。即使以某种方式保护远程登录,系统的安全性也会降至远程登录会话的安全性。请使用 ssh 命令进行安全的远程登录。


  2. 在配置 IPsec 之前控制包流。

    1. 确保 IP 转发和 IP 动态路由功能均处于禁用状态。


      # routeadm
      Configuration       Current         Current
             Option       Configuration  System State
      --------------------------------------------------
      IPv4 forwarding     disabled           disabled
         IPv4 routing     default (enabled)   enabled
      …

      如果已启用 IP 转发和 IP 动态路由功能,您可以通过键入以下内容来禁用它们:


      # routeadm -d ipv4-routing -d ipv4-forwarding
      # routeadm -u
      
    2. 打开 IP 严格目标多宿主。


      # ndd -set /dev/ip ip_strict_dst_multihoming 1
      

      注意 – 注意 –

      系统引导时,会将 ip_strict_dst_multihoming 的值恢复为缺省值。要使更改的值具有持久性,请参见如何防止 IP 电子欺骗


    3. 禁用多数网络服务,也可能会禁用所有网络服务。


      注 –

      如果系统中安装了“受限制的”SMF 配置文件,则可以跳过此步骤。将禁用网络服务(Solaris 安全 Shell 除外)。


      禁用网络服务可防止 IP 包危害系统。例如,可以采用 SNMP 守护进程、telnet 连接或 rlogin 连接。

      选择以下选项之一:

      • 如果运行的是 Solaris 10 11/06 发行版或更高版本,请运行“受限制的”SMF 配置文件。


        # netservices limited
        
      • 否则,单独禁用网络服务。


        # svcadm disable network/ftp:default
        # svcadm disable network/finger:default
        # svcadm disable network/login:rlogin
        # svcadm disable network/nfs/server:default
        # svcadm disable network/rpc/rstat:default
        # svcadm disable network/smtp:sendmail
        # svcadm disable network/telnet:default 
    4. 检验是否已禁用大多数网络服务。

      检验回送挂载和 ssh 服务是否正在运行。


      # svcs | grep network
      online         Aug_02   svc:/network/loopback:default
      …
      online         Aug_09   svc:/network/ssh:default
  3. 在两个系统间添加一对 SA。

    选择以下选项之一:

  4. 添加 IPsec 策略。

    编辑 /etc/inet/ipsecinit.conf 文件来为 VPN 添加 IPsec 策略。要增强策略,请参见示例 20–15

    1. enigma 系统上,将以下项键入到 ipsecinit.conf 文件中:


      # LAN traffic to and from this host can bypass IPsec.
      {laddr 10.16.16.6 dir both} bypass {}
      
      # WAN traffic uses ESP with AES and SHA-1.
      {tunnel ip.tun0 negotiate transport} 
       ipsec {encr_algs aes encr_auth_algs sha1 sa shared}
    2. partym 系统上,将以下项键入到 ipsecinit.conf 文件中:


      # LAN traffic to and from this host can bypass IPsec.
      {laddr 10.1.3.3 dir both} bypass {}
      
      # WAN traffic uses ESP with AES and SHA-1.
      {tunnel ip.tun0 negotiate transport} 
       ipsec {encr_algs aes encr_auth_algs sha1 sa shared}
  5. (可选的)检验 IPsec 策略文件的语法。


    # ipsecconf -c -f /etc/inet/ipsecinit.conf
    
  6. 要配置隧道并使用 IPsec 对其加以保护,请根据 Solaris 发行版执行相应步骤:

  7. /etc/hostname.ip.tun0 文件中配置隧道 ip.tun0

    1. enigma 系统上,向 hostname.ip.tun0 文件添加以下项:


      10.16.16.6 10.1.3.3 tsrc 192.168.116.16 tdst 192.168.13.213 router up
    2. partym 系统上,向 hostname.ip.tun0 文件添加以下项:


      10.1.3.3 10.16.16.6 tsrc 192.168.13.213 tdst 192.168.116.16 router up
  8. 使用创建的 IPsec 策略保护隧道。


    # svcadm refresh svc:/network/ipsec/policy:default
    
  9. 要将 hostname.ip.tun0 文件的内容读入内核,请重新启动网络服务。


    # svcadm restart svc:/network/initial:default
    
  10. hme1 接口打开 IP 转发功能。

    1. enigma 系统上,将路由器项添加到 /etc/hostname.hme1 文件。


      192.168.116.16 router
    2. partym 系统上,将路由器项添加到 /etc/hostname.hme1 文件。


      192.168.13.213 router
  11. 确保路由协议不在内联网内通告缺省的路由。

    1. enigma 系统上,将 private 标志添加到 /etc/hostname.hme0 文件。


      10.16.16.6 private
    2. partym 系统上,将 private 标志添加到 /etc/hostname.hme0 文件。


      10.1.3.3 private
  12. 手动添加通过 hme0 实现的缺省路由。

    1. enigma 系统上,添加以下路由:


      # route add default 192.168.116.4
      
    2. partym 系统上,添加以下路由:


      # route add default 192.168.13.5
      
  13. 要完成该过程,请转至步骤 22 运行路由协议。

  14. 配置隧道 ip.tun0


    注 –

    以下步骤用于在运行 Solaris 10 4/09 发行版之前的发行版的系统中配置隧道。


    使用 ifconfig 命令创建点对点接口:


    # ifconfig ip.tun0 plumb
    
    # ifconfig ip.tun0 system1-point system2-point \
    tsrc system1-taddr tdst system2-taddr
    
    1. enigma 系统上键入以下命令:


      # ifconfig ip.tun0 plumb
      
      # ifconfig ip.tun0 10.16.16.6 10.1.3.3 \
      tsrc 192.168.116.16 tdst 192.168.13.213
      
    2. partym 系统上键入以下命令:


      # ifconfig ip.tun0 plumb
      
      # ifconfig ip.tun0 10.1.3.3 10.16.16.6  \
      tsrc 192.168.13.213 tdst 192.168.116.16
      
  15. 使用创建的 IPsec 策略保护隧道。


    # ipsecconf
    
  16. 初启隧道的路由器。


    # ifconfig ip.tun0 router up
    
  17. hme1 接口打开 IP 转发功能。


    # ifconfig hme1 router
    
  18. 确保路由协议不在内联网内通告缺省的路由。


    # ifconfig hme0 private
    
  19. 手动添加通过 hme0 实现的缺省路由。

    缺省路由必须是可以直接访问 Internet 的路由器。


    # route add default router-on-hme0-subnet
    
    1. enigma 系统上,添加以下路由:


      # route add default 192.168.116.4
      
    2. partym 系统上,添加以下路由:


      # route add default 192.168.13.5
      
  20. 通过向 /etc/hostname.ip.tun0 文件中添加项来确保 VPN 在系统重新引导后启动。


    system1-point system2-point tsrc system1-taddr \
    tdst system2-taddr encr_algs aes encr_auth_algs sha1 router up
    1. enigma 系统上,向 hostname.ip.tun0 文件添加以下项:


      10.16.16.6 10.1.3.3 tsrc 192.168.116.16 \
      tdst 192.168.13.213 router up
    2. partym 系统上,向 hostname.ip.tun0 文件添加以下项:


      10.1.3.3 10.16.16.6 tsrc 192.168.13.213 \
      tdst 192.168.116.16 router up
  21. 将接口文件配置为将正确的参数传送到路由选择守护进程。

    1. enigma 系统上,修改 /etc/hostname.interface 文件。


      # cat /etc/hostname.hme0
      ## enigma
      10.16.16.6 private

      # cat /etc/hostname.hme1
      ## enigma
      192.168.116.16 router
    2. partym 系统上,修改 /etc/hostname.interface 文件。


      # cat /etc/hostname.hme0
      ## partym
      10.1.3.3 private

      # cat /etc/hostname.hme1
      ## partym
      192.168.13.213 router
  22. 运行路由协议。


    # routeadm -e ipv4-routing
    # routeadm -u
    

示例 20–15 在所有处于传输模式的系统上要求 IPsec 策略

在此示例中,管理员注释掉了在步骤 4 中配置的 bypass 策略,从而加强了保护。通过此策略配置,LAN 中的每个系统都必须激活 IPsec 以便与路由器通信。


# LAN traffic must implement IPsec.
# {laddr 10.1.3.3 dir both} bypass {}

# WAN traffic uses ESP with AES and SHA-1.
{tunnel ip.tun0 negotiate transport} ipsec {encr_algs aes encr_auth_algs sha1}


示例 20–16 使用过时的语法配置处于传输模式的 IPsec 隧道

在此示例中,管理员将 Solaris 10 7/07 系统与运行 Solaris 10 发行版的系统连接在一起。因此,管理员在配置文件中使用 Solaris 10 语法,并在 ifconfig 命令中包含 IPsec 算法。

管理员按照如何使用通过 IPv4 实现的处于传输模式的 IPsec 隧道保护 VPN过程进行操作,但在语法上进行了以下更改。


Procedure如何使用通过 Ipv6 实现的处于传输模式的 IPsec 隧道保护 VPN

要在 IPv6 网络中设置 VPN,您需要执行与针对 IPv4 网络执行的步骤相同的步骤。但是,命令的语法稍有不同。有关运行特定命令的更详尽的原因说明,请参见如何使用通过 IPv4 实现的处于隧道模式的 IPsec 隧道保护 VPN中的相应步骤。


注 –

在两个系统中执行此过程中的步骤。


此过程使用以下配置参数。

参数 

欧洲 

加利福尼亚 

系统名称 


enigma

partym

系统内联网接口 


hme1

hme1

系统 Internet 接口 


hme0

hme0

系统内联网地址 


6000:6666::aaaa:1116

6000:3333::eeee:1113

系统 Internet 地址 


2001::aaaa:6666:6666

2001::eeee:3333:3333

Internet 路由器名称 


router-E

router-C

Internet 路由器地址 


2001::aaaa:0:4

2001::eeee:0:1

隧道名称 


ip6.tun0

ip6.tun0

  1. 在系统控制台上,承担主管理员角色或成为超级用户。

    主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”


    注 –

    远程登录会使安全关键型通信易于遭到窃听。即使以某种方式保护远程登录,系统的安全性也会降至远程登录会话的安全性。请使用 ssh 命令进行安全的远程登录。


  2. 在配置 IPsec 之前控制包流。

    1. 确保 IP 转发和 IP 动态路由功能均处于禁用状态。


      # routeadm
      Configuration       Current         Current
             Option       Configuration  System State
      --------------------------------------------------
      …
      IPv6 forwarding     disabled          disabled
         IPv6 routing     disabled          disabled

      如果已启用 IP 转发和 IP 动态路由功能,您可以通过键入以下内容来禁用它们:


      # routeadm -d ipv6-forwarding -d ipv6-routing
      # routeadm -u
      
    2. 打开 IP 严格目标多宿主。


      # ndd -set /dev/ip ip6_strict_dst_multihoming 1
      

      注意 – 注意 –

      系统引导时,会将 ip6_strict_dst_multihoming 的值恢复为缺省值。要使更改的值具有持久性,请参见如何防止 IP 电子欺骗


    3. 检验是否已禁用大多数网络服务。

      检验回送挂载和 ssh 服务是否正在运行。


      # svcs | grep network
      online         Aug_02   svc:/network/loopback:default
      …
      online         Aug_09   svc:/network/ssh:default
  3. 在两个系统间添加一对 SA。

    选择以下选项之一:

  4. 添加 IPsec 策略。

    编辑 /etc/inet/ipsecinit.conf 文件来为 VPN 添加 IPsec 策略。

    1. enigma 系统上,将以下项键入到 ipsecinit.conf 文件中:


      # IPv6 Neighbor Discovery messages bypass IPsec.
      {ulp ipv6-icmp type 133-137 dir both} pass {}
      
      # LAN traffic can bypass IPsec.
      {laddr 6000:6666::aaaa:1116 dir both} bypass {}
      
      # WAN traffic uses ESP with AES and SHA-1.
      {tunnel ip6.tun0 negotiate transport} 
       ipsec {encr_algs aes encr_auth_algs sha1}
    2. partym 系统上,将以下项键入到 ipsecinit.conf 文件中:


      # IPv6 Neighbor Discovery messages bypass IPsec.
      {ulp ipv6-icmp type 133-137 dir both} pass {}
      
      # LAN traffic can bypass IPsec.
      {laddr 6000:3333::eeee:1113 dir both} bypass {}
      
      # WAN traffic uses ESP with AES and SHA-1.
      {tunnel ip6.tun0 negotiate transport} 
       ipsec {encr_algs aes encr_auth_algs sha1}
  5. (可选的)检验 IPsec 策略文件的语法。


    # ipsecconf -c -f /etc/inet/ipsecinit.conf
    
  6. 要配置隧道并使用 IPsec 对其加以保护,请根据 Solaris 发行版执行相应步骤:

  7. /etc/hostname.ip6.tun0 文件中配置隧道 ip6.tun0

    1. enigma 系统上,向 hostname.ip6.tun0 文件添加以下项:


      6000:6666::aaaa:1116 6000:3333::eeee:1113 tsrc 2001::aaaa:6666:6666 tdst 2001::eeee:3333:3333 router up
    2. partym 系统上,向 hostname.ip6.tun0 文件添加以下项:


      6000:3333::eeee:1113  6000:6666::aaaa:1116 tsrc 2001::eeee:3333:3333 tdst 2001::aaaa:6666:6666 router up
  8. 使用创建的 IPsec 策略保护隧道。


    # svcadm refresh svc:/network/ipsec/policy:default
    
  9. 要将 hostname.ip6.tun0 文件的内容读入内核,请重新启动网络服务。


    # svcadm restart svc:/network/initial:default
    
  10. hme1 接口打开 IP 转发功能。

    1. enigma 系统上,将路由器项添加到 /etc/hostname6.hme1 文件。


      2001::aaaa:6666:6666 inet6 router
    2. partym 系统上,将路由器项添加到 /etc/hostname6.hme1 文件。


      2001::eeee:3333:3333 inet6 router
  11. 确保路由协议不在内联网内通告缺省的路由。

    1. enigma 系统上,将 private 标志添加到 /etc/hostname6.hme0 文件。


      6000:6666::aaaa:1116 inet6 private
    2. partym 系统上,将 private 标志添加到 /etc/hostname6.hme0 文件。


      6000:3333::eeee:1113 inet6 private
  12. 手动添加通过 hme0 实现的缺省路由。

    1. enigma 系统上,添加以下路由:


      # route add -inet6 default 2001::aaaa:0:4
      
    2. partym 系统上,添加以下路由:


      # route add -inet6 default 2001::eeee:0:1
      
  13. 要完成该过程,请转至步骤 22 运行路由协议。

  14. 配置安全隧道 ip6.tun0


    注 –

    以下步骤用于在运行 Solaris 10 4/09 发行版之前的发行版的系统中配置隧道。


    1. enigma 系统上键入以下命令:


      # ifconfig ip6.tun0 inet6 plumb
      
      # ifconfig ip6.tun0 inet6 6000:6666::aaaa:1116 6000:3333::eeee:1113 \
      tsrc 2001::aaaa:6666:6666   tdst 2001::eeee:3333:3333
      
    2. partym 系统上键入以下命令:


      # ifconfig ip6.tun0 inet6 plumb
      
      # ifconfig ip6.tun0 inet6  6000:3333::eeee:1113  6000:6666::aaaa:1116 \
      tsrc 2001::eeee:3333:3333   tdst 2001::aaaa:6666:6666
      
  15. 使用创建的 IPsec 策略保护隧道。


    # ipsecconf
    
  16. 初启隧道的路由器。


    # ifconfig ip6.tun0 router up
    
  17. hme1 接口打开 IP 转发功能。


    # ifconfig hme1 router
    
  18. 确保路由协议不在内联网内通告缺省的路由。


    # ifconfig hme0 private
    
  19. 在每个系统上手动添加通过 hme0 实现的缺省路由。

    缺省路由必须是可以直接访问 Internet 的路由器。

    1. enigma 系统上,添加以下路由:


      # route add -inet6 default 2001::aaaa:0:4
      
    2. partym 系统上,添加以下路由:


      # route add -inet6 default 2001::eeee:0:1
      
  20. 在每个系统上,通过向 /etc/hostname6.ip6.tun0 文件中添加项来确保 VPN 在系统重新引导后启动。

    该项复制在步骤 14 中传递到 ifconfig 命令的参数。

    1. enigma 系统上,向 hostname6.ip6.tun0 文件添加以下项:


      6000:6666::aaaa:1116  6000:3333::eeee:1113 \
      tsrc 2001::aaaa:6666:6666   tdst 2001::eeee:3333:3333  router up
    2. partym 系统上,向 hostname6.ip6.tun0 文件添加以下项:


      6000:3333::eeee:1113  6000:6666::aaaa:1116 \
      tsrc 2001::eeee:3333:3333   tdst 2001::aaaa:6666:6666  router up
  21. 将接口文件配置为将正确的参数传送到路由选择守护进程。

    1. enigma 系统上,修改 /etc/hostname6. interface 文件。


      # cat /etc/hostname6.hme0
      ## enigma
      6000:6666::aaaa:1116 inet6 private

      #  cat /etc/hostname6.hme1
      ## enigma
      2001::aaaa:6666:6666 inet6 router
    2. partym 系统上,修改 /etc/hostname6. interface 文件。


      # cat /etc/hostname6.hme0
      ## partym
      6000:3333::eeee:1113 inet6 private

      # cat /etc/hostname6.hme1
      ## 
      partym2001::eeee:3333:3333 inet6 router
  22. 运行路由协议。


    # routeadm -e ipv6-routing
    # routeadm -u
    

示例 20–17 使用过时的语法配置通过 IPv6 实现的处于传输模式的 IPsec

在此示例中,管理员将 Solaris 10 7/07 系统与运行 Solaris 10 发行版的系统连接在一起。因此,管理员在配置文件中使用 Solaris 10 语法,并在 ifconfig 命令中包含 IPsec 算法。

管理员按照如何使用通过 Ipv6 实现的处于传输模式的 IPsec 隧道保护 VPN过程进行操作,但在语法上进行了以下更改。


Procedure如何防止 IP 电子欺骗

要防止系统在未尝试对包进行解密的情况下将包转发至另一个接口,系统需要检查 IP 电子欺骗。一种预防方法是使用 ndd 命令设置 IP 严格目标多宿主参数。在 SMF 清单中设置了此参数时,系统重新引导时就会设置此参数。


注 –

在两个系统中执行此过程中的步骤。


  1. 在系统控制台上,承担主管理员角色或成为超级用户。

    主管理员角色拥有主管理员配置文件。要创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 创建用于检查 IP 电子欺骗的站点专用 SMF 清单。

    使用以下样例脚本 /var/svc/manifest/site/spoof_check.xml

    <?xml version="1.0"?>
    <!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
    
    <service_bundle type='manifest' name='Custom:ip_spoof_checking'>
    
    <!--    This is a custom smf(5) manifest for this system. Place this
            file in /var/svc/manifest/site, the directory for local
            system customizations. The exec method uses an unstable
            interface to provide a degree of protection against IP
            spoofing attacks when this system is acting as a router.
    
            IP spoof protection can also be achieved by using ipfilter(5).
            If ipfilter is configured, this service can be disabled.
    
            Note: Unstable interfaces might be removed in later
            releases.  See attributes(5).
    -->
    
    <service
            name='site/ip_spoofcheck'
            type='service'
            version='1'>
    
            <create_default_instance enabled='false' />
            <single_instance />
    
            <!--    Don't enable spoof protection until the
                    network is up.
            -->
            <dependency
                    name='basic_network'
                    grouping='require_all'
                    restart_on='none'
                    type='service'>
            <service_fmri value='svc:/milestone/network' />
            </dependency>
    
            <exec_method
                    type='method'
                    name='start'
                    exec='/usr/sbin/ndd -set /dev/ip ip_strict_dst_multihoming 1'
    <!--    
         For an IPv6 network, use the IPv6 version of this command, as in:
                    exec='/usr/sbin/ndd -set /dev/ip ip6_strict_dst_multihoming 1
    -->
                    timeout_seconds='60'
            />
    
            <exec_method
                    type='method'
                    name='stop'
                    exec=':true'
                    timeout_seconds='3'
            />
    
            <property_group name='startd' type='framework'>
                    <propval
                            name='duration'
                            type='astring'
                            value='transient'
                    />
            </property_group>
    
            <stability value='Unstable' />
    
    </service>
    </service_bundle>
  3. 将此清单导入到 SMF 系统信息库。


    # svccfg import /var/svc/manifest/site/spoof_check.xml
    
  4. 启用 ip_spoofcheck 服务。

    使用在清单中定义的名称 /site/ip_spoofcheck


    # svcadm enable /site/ip_spoofcheck
    
  5. 检验 ip_spoofcheck 服务是否联机。


    # svcs /site/ip_spoofcheck
    

第 21 章 IP 安全体系结构(参考)

本章包含以下参考信息:

有关如何在网络中实现 IPsec 的说明,请参见第 20 章。有关 IPsec 的概述,请参见第 19 章

IPsec 服务管理工具

服务管理工具 (service management facility, SMF) 为 IPsec 提供以下服务:

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

ipsecconf 命令

您可以使用 ipsecconf 命令为主机配置 IPsec 策略。当运行此命令来配置策略时,系统会在内核中创建 IPsec 策略项。系统使用这些项来检查所有传入和外发 IP 数据报的策略。转发的数据报不受使用此命令添加的策略检查的约束。ipsecconf 命令也可配置安全策略数据库 (security policy database, SPD)。

您必须成为超级用户或承担等效角色,才能调用 ipsecconf 命令。此命令接受保护双向通信的项,同时也接受仅保护单向通信的项。

具有本地地址和远程地址格式的策略项可以借助单个策略项保护双向通信。例如,如果没有为指定的主机指定方向,则包含模式 laddr host1raddr host2 的项会保护双向通信。因此,对于每台主机,只需一个策略项。

具有源地址到目标地址格式的策略项仅保护单向通信。例如,模式为 saddr host1 daddr host2 的策略项只保护传入通信或外发通信,不同时保护这两个方向的通信。因此,要保护双向通信,需要向 ipsecconf 命令传递另一个项,即 saddr host2 daddr host1

要确保 IPsec 策略在引导计算机时处于活动状态,可以创建一个 IPsec 策略文件 /etc/inet/ipsecinit.conf。此文件在网络服务启动时读取。有关如何创建 IPsec 策略文件的说明,请参见使用 IPsec 保护通信(任务列表)

从 Solaris 10 4/09 发行版开始,借助 -c 选项,ipsecconf 命令可检查作为参数提供的 IPsec 策略文件的语法。

ipsecconf 命令添加的策略项在系统重新引导后不会保留。要确保 IPsec 策略在系统引导时保持活动状态,请将策略项添加到 /etc/inet/ipsecinit.conf 文件。在当前发行版中,请刷新或启用 policy 服务。在 Solaris 10 4/09 发行版之前的发行版中,请重新引导或使用 ipsecconf 命令。例如,请参见使用 IPsec 保护通信(任务列表)

ipsecinit.conf 文件

要在启动 Solaris 操作系统 (Solaris Operating System, Solaris OS) 时调用 IPsec 安全策略,请创建一个配置文件以通过特定的 IPsec 策略项来初始化 IPsec。此文件的缺省名称为 /etc/inet/ipsecinit.conf。有关策略项及其格式的详细信息,请参见 ipsecconf(1M) 手册页。配置策略之后,您可以使用 ipsecconf 命令来查看或修改现有配置。从 Solaris 10 4/09 发行版开始,可刷新 policy 服务来修改现有配置。

ipsecinit.conf 文件样例

Solaris 软件包含一个 IPsec 策略文件样例 ipsecinit.sample。您可以使用此文件作为模板来创建自己的 ipsecinit.conf 文件。ipsecinit.sample 文件包含以下示例:


#
# For example,
#
#	 {rport 23} ipsec {encr_algs des encr_auth_algs md5}
#
# will protect the telnet traffic originating from the host with ESP using
# DES and MD5. Also:
#
#	 {raddr 10.5.5.0/24} ipsec {auth_algs any}
#
# will protect traffic to or from the 10.5.5.0 subnet with AH 
# using any available algorithm.
#
#
# To do basic filtering, a drop rule may be used. For example:
#
#	 {lport 23 dir in} drop {}
#	 {lport 23 dir out} drop {}
# will disallow any remote system from telnetting in.
#
# If you are using IPv6, it may be useful to bypass neighbor discovery
# to allow in.iked to work properly with on-link neighbors. To do that,
# add the following lines:
#
#        {ulp ipv6-icmp type 133-137 dir both } pass { }
#
# This will allow neighbor discovery to work normally.

ipsecinit.confipsecconf 的安全注意事项

在网络中传输 ipsecinit.conf 文件副本时请格外小心。入侵者可能会在系统读取网络挂载的文件时也读取此文件。例如,在从 NFS 挂载的文件系统中访问或复制 /etc/inet/ipsecinit.conf 文件时,入侵者可能会更改此文件中包含的策略。

请确保在启动任何通信之前已设置了 IPsec 策略,因为新添加的策略项可能会影响现有连接。同样,不要在通信期间更改策略。

特别要指出的是,不能针对在其上发出 connect()accept() 函数调用的 SCTP、TCP 或 UDP 套接字更改 IPsec 策略。其策略不能更改的套接字称为锁定的套接字。新策略项不保护已锁定的套接字。有关更多信息,请参见 connect(3SOCKET)accept(3SOCKET) 手册页。

保护您的名称系统。如果发生以下两种情况,则您的主机名不再值得信任:

安全漏洞通常是由工具使用不当造成的,而并非由工具本身引起。应慎用 ipsecconf 命令。请将控制台或其他硬连接的 TTY 用作最安全的操作模式。

ipsecalgs 命令

Solaris 加密框架为 IPsec 提供验证和加密算法。ipsecalgs 命令可以列出每个 IPsec 协议支持的算法。ipsecalgs 配置存储在 /etc/inet/ipsecalgs 文件中。通常,不需要修改此文件。但是,如果需要修改此文件,请使用 ipsecalgs 命令。决不能直接编辑此文件。在当前发行版中,系统引导时会通过 svc:/network/ipsec/ipsecalgs:default 服务使支持的算法与内核同步。

有效的 IPsec 协议和算法由 RFC 2407 中介绍的 ISAKMP domain of interpretation, DOI(解释域)进行说明。通常,DOI(解释域)定义数据格式、网络通信交换类型,以及命名安全相关信息的约定。安全策略、加密算法和加密模式都属于安全相关信息。

具体而言,ISAKMP DOI 为有效的 IPsec 算法及其协议(PROTO_IPSEC_AHPROTO_IPSEC_ESP)定义命名约定和编号约定。每个算法都仅与一项协议相关联。这些 ISAKMP DOI 定义位于 /etc/inet/ipsecalgs 文件中。算法和协议编号由 Internet 编号分配机构 (Internet Assigned Numbers Authority, IANA) 定义。使用 ipsecalgs 命令,可以针对 IPsec 扩展算法列表。

有关算法的更多信息,请参阅 ipsecalgs(1M) 手册页。有关 Solaris 加密框架的更多信息,请参见《系统管理指南:安全性服务》中的第 13  章 “Solaris 加密框架(概述)”

IPsec 的安全关联数据库

有关 IPsec 安全服务加密材料的信息保留在安全关联数据库 (SADB) 中。安全关联 (security association, SA) 保护传入包和外发包。SADB 可能由某个用户进程维护,也可能由多个协作进程(以特定类的套接字发送消息)维护。这种维护 SADB 的方法类似于 route(7P) 手册页中介绍的方法。只有超级用户或承担等效角色的用户才能访问此数据库。

in.iked 守护进程和 ipseckey 命令使用 PF_KEY 套接字接口维护 SADB。有关 SADB 如何处理请求和消息的更多信息,请参见 pf_key(7P) 手册页。

用于在 IPsec 中生成密钥的实用程序

IKE(Internet 密钥交换)协议提供自动执行的 IPv4 和 IPv6 地址密钥管理。有关如何设置 IKE 的说明,请参见第 23 章。手动加密实用程序是 ipseckey 命令,在 ipseckey(1M) 手册页中对其进行了介绍。

可使用 ipseckey 命令手动填充安全关联数据库 (security associations database, SADB)。通常,由于某种原因而无法使用 IKE 时,会使用手动 SA 生成。但是,如果 SPI 值是唯一的,可以同时使用手动 SA 生成和 IKE。

ipseckey 命令可用于查看系统识别的所有 SA,无论密钥是手动添加的还是由 IKE 添加的。从 Solaris 10 4/09 发行版开始,借助 -c 选项,ipseckey 命令可检查作为参数提供的密钥文件的语法。

ipseckey 命令添加的 IPsec SA 在系统重新引导后不会保留。在当前发行版中,要在系统引导时启用手动添加的 SA,请将相应的项添加到 /etc/inet/secret/ipseckeys 文件,然后启用 svc:/network/ipsec/manual-key:default 服务。有关过程,请参见如何手动创建 IPsec 安全关联

虽然 ipseckey 命令只有有限的常规选项,但是此命令支持丰富的命令语言。您可以指定使用专用于手动加密的程序接口发送请求。有关其他信息,请参见 pf_key(7P) 手册页。

ipseckey 的安全注意事项

超级用户或拥有网络安全或网络 IPsec 管理权限配置文件的角色可以使用 ipseckey 命令输入敏感的密钥加密信息。如果入侵者获得对此文件的访问权,便会威胁 IPsec 通信的安全。

当处理加密材料和使用 ipseckey 命令时,您应该考虑以下问题:

安全漏洞通常是由工具使用不当造成的,而并非由工具本身引起。应慎用 ipseckey 命令。请将控制台或其他硬连接的 TTY 用作最安全的操作模式。

其他实用程序的 IPsec 扩展

ifconfig 命令具有用来管理隧道接口上的 IPsec 策略的选项。snoop 命令可以解析 AH 头和 ESP 头。

ifconfig 命令和 IPsec

在 Solaris 10、Solaris 10 7/05、Solaris 10 1/06 和 Solaris 10 11/06 发行版中: 为了支持 IPsec,ifconfig 命令提供以下安全选项。在 Solaris 10 7/07 发行版中,这些安全选项由 ipsecconf 命令处理。

必须在一次调用中为隧道指定所有 IPsec 安全选项。例如,如果只使用 ESP 保护通信,则一次使用两个安全选项配置隧道 ip.tun0,如下所示:


# ifconfig ip.tun0 encr_algs aes encr_auth_algs md5

同样,ipsecinit.conf 项将使用两个安全选项一次性配置隧道,如下所示:


# WAN traffic uses ESP with AES and MD5.
   {} ipsec {encr_algs aes encr_auth_algs md5}

auth_algs 安全选项

此选项使用指定的验证算法为隧道启用 IPsec AH。auth_algs 选项的格式如下所示:


auth_algs authentication-algorithm

对于算法,您可以通过指定一个数字或一个算法名称(包括参数 any)来表示没有特定的算法首选项。要禁用隧道安全性,请指定以下选项:


auth_algs none

要获得可用验证算法的列表,请运行 ipsecalgs 命令。


注 –

auth_algs 选项不能用于 NAT 遍历。有关更多信息,请参见IPsec 和 NAT 遍历


encr_auth_algs 安全选项

此选项使用指定的验证算法为隧道启用 IPsec ESP。encr_auth_algs 选项的格式如下所示:


encr_auth_algs authentication-algorithm

对于算法,您可以通过指定一个数字或一个算法名称(包括参数 any)来表示没有特定的算法首选项。如果指定一个 ESP 加密算法,但是未指定验证算法,则 ESP 验证算法的缺省值为参数 any

要获得可用验证算法的列表,请运行 ipsecalgs 命令。

encr_algs 安全选项

此选项使用指定的加密算法为隧道启用 IPsec ESP。encr_algs 选项的格式如下所示:


encr_algs encryption-algorithm

对于算法,您可以指定一个数字或一个算法名称。要禁用隧道安全性,请指定以下选项:


encr_algs none

如果指定一个 ESP 验证算法,但是未指定加密算法,则 ESP 加密算法的缺省值为参数 null

要获得可用加密算法的列表,请运行 ipsecalgs 命令。

snoop 命令和 IPsec

snoop 命令可以解析 AH 头和 ESP 头。由于 ESP 对自己的数据进行加密,因此,snoop 命令不能查看受 ESP 保护的加密头。AH 不会对数据进行加密。因此,可以使用 snoop 命令来检查受 AH 保护的通信。此命令的 -V 选项显示何时对包使用 AH。有关更多详细信息,请参见 snoop(1M) 手册页。

有关受保护包中的详细 snoop 输出样例,请参见如何检验包是否受 IPsec 保护

第 22 章 Internet 密钥交换(概述)

Internet 密钥交换 (Internet Key Exchange, IKE) 自动进行 IPsec(Internet 协议安全)的密钥管理。本章包含有关 IKE 的以下信息:

有关实现 IKE 的说明,请参见第 23 章。有关参考信息,请参见第 24 章。有关 IPsec 的概述信息,请参见第 19 章

IKE 中的新增功能

Solaris 10 4/09:从此发行版开始,服务管理工具 (Service Management Facility, SMF) 将 IKE 做为一种服务来管理。缺省情况下,会禁用 svc:/network/ipsec/ike:default 服务。而且,在此发行版中,还提供了网络 IPsec 管理权限配置文件以用于管理 IPsec 和 IKE。

Solaris 10 7/07:从此发行版开始,IKE 可使用 AES 算法,并可在全局区域中进行配置以便在非全局区域中使用。

使用 IKE 进行密钥管理

对 IPsec 安全关联 (security association, SA) 的加密材料进行的管理称为密钥管理。自动密钥管理需要用于创建、验证和交换密钥的安全通信通道。Solaris 操作系统使用 Internet 密钥交换 (Internet Key Exchange, IKE) 自动进行密钥管理。IKE 可轻松扩展以便为大量通信提供安全通道。IPv4 和 IPv6 包中的 IPsec SA 可以利用 IKE。

在装有 Sun Crypto Accelerator 1000 板或 Sun Crypto Accelerator 4000 或 Sun Crypto Accelerator 6000 板的系统上使用 IKE 时,可以将公钥操作转移到加速器上。操作系统资源不用于公钥操作。在装有 Sun Crypto Accelerator 4000 或 Sun Crypto Accelerator 6000 板的系统上使用 IKE 时,可以将证书、公钥和私钥存储在该板上。脱离系统的密钥存储提供了进一步的保护。

IKE 密钥协商

IKE 守护进程 in.iked 以受保护方式协商和验证 SA 的加密材料。该守护进程使用来自 Solaris 操作系统提供的内部函数的随机密钥种子。IKE 提供完全正向保密 (perfect forward secrecy, PFS)。在 PFS 中,不能使用保护数据传输的密钥派生其他密钥。此外,不重新使用用于创建数据传输密钥的种子。请参见 in.iked(1M) 手册页。

当 IKE 守护进程搜索到远程系统的公共加密密钥时,本地系统就可以使用该密钥。该系统使用远程系统的公钥对消息进行加密。消息只能由该远程系统读取。IKE 守护进程分两个阶段执行作业。这两个阶段称为交换

IKE 密钥术语

下表列出在密钥协商中使用的术语,提供其常用的首字母缩略词,并给出每个术语的定义和用法。

表 22–1 密钥协商术语及其首字母缩略词和用法

密钥协商术语 

首字母缩略词 

定义和用法 

Key exchange(密钥交换) 

 

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

Diffie-Hellman protocol(Diffie-Hellman 协议) 

DH 

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

RSA protocol(RSA 协议) 

RSA 

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

Perfect forward secrecy(完全正向保密)

PFS 

仅适用于经过验证的密钥交换。PFS 确保密钥的长期保密材料不会影响来自以前通信的已交换密钥的保密性。  

在 PFS 中,不能使用保护数据传输的密钥派生其他密钥。此外,也不能使用保护数据传输的密钥的源派生其他密钥。 

Oakley method(Oakley 方法) 

 

一种以安全方式为阶段 2 建立密钥的方法。此协议类似于密钥交换的 Diffie-Hellman 方法。与 Diffie-Hellman 类似,Oakley 组密钥交换涉及密钥生成和密钥验证。Oakley 方法用于协商 PFS。 

IKE 阶段 1 交换

阶段 1 交换称为主模式。在阶段 1 交换中,IKE 使用公钥加密方法向对等 IKE 实体进行自我验证。结果是 Internet 安全关联和密钥管理协议 (Internet Security Association and Key Management Protocol, ISAKMP) 安全关联 (security association, SA)。ISAKMP SA 是 IKE 用于协商 IP 数据报的加密材料的安全通道。与 IPsec SA 不同,ISAKMP SA 是双向的,因此只需要一个安全关联。

IKE 在阶段 1 交换中协商加密材料的方式是可配置的。IKE 从 /etc/inet/ike/config 文件读取配置信息。配置信息包括:

两种验证方法是预先共享的密钥和公钥证书。公钥证书可以自签名。或者,证书可以由来自公钥基础结构 (public key infrastructure, PKI) 组织的 certificate authority, CA(证书颁发机构)颁发。这样的组织包括 beTrusted、Entrust、GeoTrust、RSA Security 和 Verisign。

IKE 阶段 2 交换

阶段 2 交换称为快速模式。在阶段 2 交换中,IKE 在运行 IKE 守护进程的系统之间创建和管理 IPsec SA。IKE 使用在阶段 1 交换中创建的安全通道保护加密材料的传输。IKE 守护进程使用 /dev/random 设备从随机数生成器创建密钥。该守护进程按可配置的速率刷新密钥。加密材料可供在 IPsec 策略的配置文件 ipsecinit.conf 中指定的算法使用。

IKE 配置选择

/etc/inet/ike/config 配置文件包含 IKE 策略项。为了使两个 IKE 守护进程相互验证,这些项必须是有效的。此外,加密材料必须可用。配置文件中的项确定使用加密材料验证阶段 1 交换的方法。可以选择预先共享的密钥或公钥证书。

auth_method preshared 指示使用预先共享的密钥。除 preshared 之外的 auth_method 值指示要使用公钥证书。公钥证书可以自签名,也可以从 PKI 组织安装。有关更多信息,请参见 ike.config(4) 手册页。

IKE,使用预先共享的密钥

预先共享的密钥由一个系统上的管理员创建。然后与远程系统的管理员在带外共享这些密钥。创建较大的随机密钥和保护文件及带外传输时应谨慎。这些密钥放置在每个系统上的 /etc/inet/secret/ike.preshared 文件中。ike.preshared 文件用于 IKE,而 ipseckeys 文件用于 IPsec。ike.preshared 文件中密钥的任何泄露都将泄露从该文件中的密钥派生的所有密钥。

系统的预先共享的密钥必须与其远端系统的密钥相同。这些密钥与特定的 IP 地址相关联。由一个管理员控制通信系统时,密钥是最安全的。有关更多信息,请参见 ike.preshared(4) 手册页。

IKE,使用公钥证书

使用公钥证书,通信系统就无需在带外共享秘密的加密材料。公钥使用 Diffie-Hellman protocol(Diffie-Hellman 协议)(DH) 来验证和协商密钥。公钥证书有两种类型。这些证书可以自签名,也可以由 certificate authority, CA(证书颁发机构)认证。

自签名的公钥证书由管理员创建。ikecert certlocal -ks 命令为系统创建公钥/私钥对的私钥部分。然后,从远程系统获取 X.509 格式的自签名证书输出。远程系统的证书是用于创建密钥对的公钥部分的 ikecert certdb 命令的输入。在通信系统上,自签名的证书驻留在 /etc/inet/ike/publickeys 目录中。使用 -T 选项时,证书驻留在连接的硬件上。

自签名的证书介于预先共享的密钥和 CA 中间。与预先共享的密钥不同,自签名的证书可以在移动机器或可能重新编号的系统上使用。要为没有固定编号的系统对证书自行签名,请使用 DNS (www.example.org) 或 email (root@domain.org) 替换名称。

公钥可以由 PKI 或 CA 组织提供。在 /etc/inet/ike/publickeys 目录中安装公钥及其相应的 CA。使用 -T 选项时,证书驻留在连接的硬件上。供应商还发布证书撤销列表 (certificate revocation list, CRL)。除安装密钥和 CA 以外,您还负责在 /etc/inet/ike/crls 目录中安装 CRL。

CA 的优势在于由外部组织而不是由站点管理员认证。在某种意义上,CA 是经过确认的证书。与自签名的证书一样,CA 可以在移动机器或可能重新编号的系统上使用。与自签名的证书不同的是,CA 可以非常容易地扩展以保护大量的通信系统。

IKE 和硬件加速

IKE 算法的计算开销很大,尤其是在阶段 1 交换中。处理大量交换的系统可以使用 Sun Crypto Accelerator 1000 板处理公钥操作。Sun Crypto Accelerator 6000 和 Sun Crypto Accelerator 4000 板也可用来处理开销很大的阶段 1 计算。

有关如何配置 IKE 以将其计算转移到加速器板的信息,请参见如何将 IKE 配置为查找 Sun Crypto Accelerator 1000 板。有关如何存储密钥的信息,请参见如何将 IKE 配置为查找 Sun Crypto Accelerator 4000 板cryptoadm(1M) 手册页。

IKE 和硬件存储

公钥证书、私钥和公钥可以存储在 Sun Crypto Accelerator 6000 或 Sun Crypto Accelerator 4000 板上。对于 RSA 加密,Sun Crypto Accelerator 4000 板最多支持 2048 位的密钥。对于 DSA 加密,该板最多支持 1024 位的密钥。Sun Crypto Accelerator 6000 板支持 SHA-512 和 ECC 算法。

有关如何配置 IKE 以访问该板的信息,请参见如何将 IKE 配置为查找 Sun Crypto Accelerator 1000 板。有关如何向该板添加证书和公钥的信息,请参见如何在硬件上生成和存储公钥证书

IKE 实用程序和文件

下表概述了 IKE 策略的配置文件、IKE 密钥的存储位置以及实现 IKE 的各种命令和服务。有关服务的更多信息,请参见《系统管理指南:基本管理》中的第 18  章 “管理服务(概述)”

表 22–2 IKE 配置文件、密钥存储位置、命令和服务

文件、位置、命令或服务 

说明 

更多信息 

svc:/network/ipsec/ike

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

smf(5)

/usr/lib/inet/in.iked 守护进程

Internet 密钥交换 (Internet Key Exchange, IKE) 守护进程。激活自动密钥管理。在当前发行版中,ike 服务会启用此守护进程。在早期发行版中,会使用 in.iked 命令。

in.iked(1M)

/usr/sbin/ikeadm 命令

用于查看和修改 IKE 策略的 IKE 管理命令。

ikeadm(1M)

/usr/sbin/ikecert 命令

用于处理包含公钥证书的本地数据库的证书数据库管理命 令。这些数据库也可以存储在连接的 Sun Crypto Accelerator 4000 板上。

ikecert(1M)

/etc/inet/ike/config 文件

/etc/inet 目录中 IKE 策略的缺省配置文件。包含用于匹配传入 IKE 请求和准备外发 IKE 请求的站点规则。

在当前发行版中,如果此文件存在,在启用 ike 服务时,in.iked 守护进程会启动。可以使用 svccfg 命令更改此文件的位置。

ike.config(4)

ike.preshared 文件

/etc/inet/secret 目录中的预先共享密钥文件。包含用于阶段 1 交换中验证的秘密加密材料。在用预先共享的密钥配置 IKE 时使用。

ike.preshared(4)

ike.privatekeys 目录

/etc/inet/secret 目录中的私钥目录。包含公钥/私钥对的私钥部分。

ikecert(1M)

publickeys 目录

/etc/inet/ike 目录中包含公钥和证书文件的目录。包含公钥/私钥对的公钥部分。

ikecert(1M)

crls 目录

/etc/inet/ike 目录中包含公钥和证书文件的撤销列表的目录。

ikecert(1M)

Sun Crypto Accelerator 1000 板 

通过从操作系统转移操作来加速公钥操作的硬件。 

ikecert(1M)

Sun Crypto Accelerator 4000 板 

通过从操作系统转移操作来加速公钥操作的硬件。该板还存储公钥、私钥和公钥证书。 

ikecert(1M)

Solaris 10 发行版对 IKE 的更改

从 Solaris 9 发行版开始,IKE 包括以下功能:

第 23 章 配置 IKE(任务)

本章介绍如何为系统配置 Internet 密钥交换 (Internet Key Exchange, IKE)。配置 IKE 后,它将自动为网络上的 IPsec 生成加密材料。本章包含以下信息:

有关 IKE 的概述信息,请参见第 22 章。有关 IKE 的参考信息,请参见第 24 章。有关更多过程,请参见 ikeadm(1M)ikecert(1M)ike.config(4) 手册页的示例部分。

配置 IKE(任务列表)

可以使用预先共享的密钥、自签名证书和证书颁发机构 (Certificate Authority, CA) 所颁发的证书来验证 IKE。规则将特定的 IKE 验证方法与受保护的端点相关联。因此,可以在系统上使用一种或所有 IKE 验证方法。利用指向 PKCS #11 库的指针,证书可以使用连接的硬件加速器。

配置 IKE 后,完成使用 IKE 配置的 IPsec 任务。下表提供了着重说明特定 IKE 配置的任务列表。

任务 

说明 

参考 

使用预先共享的密钥配置 IKE 

通过使两个系统共享一个密钥来保护它们之间的通信。 

使用预先共享的密钥配置 IKE(任务列表)

使用公钥证书配置 IKE 

使用公钥证书保护通信。这些证书可以是自签名的,也可以由 PKI 组织认证。 

使用公钥证书配置 IKE(任务列表)

跨 NAT 边界 

将 IPsec 和 IKE 配置为与移动系统进行通信 

为移动系统配置 IKE(任务列表)

将 IKE 配置为在连接的硬件上生成和存储公钥证书 

使 Sun Crypto Accelerator 1000 板或 Sun Crypto Accelerator 4000 板可以加快 IKE 操作。此外,使 Sun Crypto Accelerator 4000 板可以存储公钥证书。 

将 IKE 配置为查找连接的硬件(任务列表)

调整阶段 1 密钥协商参数 

更改 IKE 密钥协商的时间安排。 

更改 IKE 传输参数(任务列表)

使用预先共享的密钥配置 IKE(任务列表)

下表包含使用预先共享的密钥配置和维护 IKE 的过程的链接。

任务 

说明 

参考 

使用预先共享的密钥配置 IKE 

创建 IKE 策略文件和要共享的一个密钥。 

如何使用预先共享的密钥配置 IKE

在正运行的 IKE 系统上刷新预先共享的密钥 

在通信系统上为 IKE 添加新的加密材料。 

如何刷新 IKE 预先共享密钥

将预先共享的密钥添加到正运行的 IKE 系统 

将新的 IKE 策略项和新的加密材料添加到当前实施 IKE 策略的系统。 

如何为 ipsecinit.conf 中的新策略项添加 IKE 预先共享密钥

检查预先共享的密钥是否完全相同 

在两个系统上显示预先共享的密钥,以查看它们是否完全相同。 

如何检验 IKE 预先共享密钥是否完全相同

使用预先共享的密钥配置 IKE

使用预先共享的密钥是验证 IKE 的最简单方法。如果要将两个系统配置为使用 IKE,而且您是这两个系统的管理员,则使用预先共享的密钥是一个良好的选择。但是,与公钥证书不同,预先共享的密钥与特定的 IP 地址相关联。预先共享的密钥不能用于移动系统或可能重新编号的系统。此外,在使用预先共享的密钥时,不能将 IKE 计算转移到连接的硬件。

Procedure如何使用预先共享的密钥配置 IKE

IKE 实现提供了采用可变密钥长度的算法。所选的密钥长度是由站点安全性确定的。通常,密钥越长,提供的安全性就越高。

以下过程使用系统名称 enigmapartym。请用您的系统名称替换名称 enigmapartym

  1. 在系统控制台上,承担主管理员角色或成为超级用户。

    主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”


    注 –

    远程登录会使安全关键型通信易于遭到窃听。即使以某种方式保护远程登录,系统的安全性也会降至远程登录会话的安全性。请使用 ssh 命令进行安全的远程登录。


  2. 在每个系统上,将文件 /etc/inet/ike/config.sample 复制到文件 /etc/inet/ike/config

  3. 在每个系统上的 ike/config 文件中输入规则和全局参数。

    此文件中的规则和全局参数应该允许系统的 ipsecinit.conf 文件中的 IPsec 策略可以成功实施。以下是与如何使用 IPsec 保证两个系统之间的通信安全中的 ipsecinit.conf 示例配合使用的 ike/config 示例。

    1. 例如,在 enigma 系统上修改 /etc/inet/ike/config 文件:


      ### ike/config file on enigma, 192.168.116.16
      
      ## Global parameters
      #
      ## Phase 1 transform defaults
      p1_lifetime_secs 14400
      p1_nonce_len 40
      #
      ## Defaults that individual rules can override.
      p1_xform
        { auth_method preshared oakley_group 5 auth_alg sha encr_alg des }
      p2_pfs 2
      #
      ## The rule to communicate with partym
      #  Label must be unique
      { label "enigma-partym"
        local_addr 192.168.116.16
        remote_addr 192.168.13.213
        p1_xform
         { auth_method preshared oakley_group 5 auth_alg sha1 encr_alg aes }
        p2_pfs 5
      }
      

      注 –

      auth_method 参数的所有变量都必须在同一行上。


    2. partym 系统上修改 /etc/inet/ike/config 文件:


      ### ike/config file on partym, 192.168.13.213
      ## Global Parameters
      #
      p1_lifetime_secs 14400
      p1_nonce_len 40
      #
      p1_xform
        { auth_method preshared oakley_group 5 auth_alg sha encr_alg des }
      p2_pfs 2
      
      ## The rule to communicate with enigma
      #  Label must be unique
      { label "partym-enigma"
        local_addr 192.168.13.213
        remote_addr 192.168.116.16
      p1_xform
         { auth_method preshared oakley_group 5 auth_alg sha1 encr_alg aes }
      p2_pfs 5
      }
      
  4. 在每个系统上,检验该文件的语法。


    # /usr/lib/inet/in.iked -c -f /etc/inet/ike/config
    
  5. 生成随机数以用作加密材料。

    如果站点具有随机数生成器,请使用该生成器。在 Solaris 系统上,可以使用 od 命令。例如,以下命令列显两行十六进制数:


    % od -X -A n /dev/random | head -2
             f47cb0f4 32e14480 951095f8 2b735ba8
             0a9467d0 8f92c880 68b6a40e 0efe067d

    有关 od 命令的说明,请参见如何在 Solaris 系统上生成随机数od(1) 手册页。


    注 –

    其他操作系统可能需要 ASCII 加密材料。要以十六进制格式和 ASCII 格式生成相同的密钥,请参见示例 23–1


  6. 利用步骤 5 的输出构造一个密钥。


    f47cb0f432e14480951095f82b735ba80a9467d08f92c88068b6a40e

    此过程中的验证算法是 SHA–1,如步骤 3 所示。散列的大小(即验证算法输出的大小)确定预先共享密钥的最小建议大小。SHA–1 算法的输出是 160 位或 40 个字符。示例密钥的长度是 56 个字符,这将提供其他加密材料供 IKE 使用。

  7. 在每个系统上创建文件 /etc/inet/secret/ike.preshared

    在每个文件中放置预先共享的密钥。

    1. 例如,在 enigma 系统上,ike.preshared 文件的显示与以下信息类似:


      # ike.preshared on enigma, 192.168.116.16
      #…
      { localidtype IP
      	localid 192.168.116.16
      	remoteidtype IP
      	remoteid 192.168.13.213
      	# enigma and partym's shared key in hex (192 bits)
      	key f47cb0f432e14480951095f82b735ba80a9467d08f92c88068b6a40e
      	}
    2. partym 系统上,ike.preshared 文件的显示与以下信息类似:


      # ike.preshared on partym, 192.168.13.213
      #…
      { localidtype IP
      	localid 192.168.13.213
      	remoteidtype IP
      	remoteid 192.168.116.16
      	# partym and enigma's shared key in hex (192 bits)
      	key f47cb0f432e14480951095f82b735ba80a9467d08f92c88068b6a40e
      	}

    注 –

    每个系统上的预先共享密钥必须完全相同。



示例 23–1 为运行不同操作系统的两个系统生成相同的加密材料

Solaris IPsec 可与其他操作系统交互操作。如果您的系统与需要 ASCII 预先共享密钥的系统通信,则需要以两种格式(十六进制格式和 ASCII 格式)生成一个密钥。

在此示例中,Solaris 系统管理员需要 56 个字符的加密材料。该管理员使用以下命令从 ASCII 口令短语中生成十六进制的密钥。在所有 Solaris 系统中,-tx1 选项每次输出一个字节。


# /bin/echo "papiermache with cashews and\c" | od -tx1 | cut -c 8-55 | \
tr -d '\n' | tr -d ' ' | awk '{print}'
7061706965726d616368652077697468206361736865777320616e64

通过删除偏移和串联十六进制输出,Solaris 系统的十六进制密钥为 7061706965726d616368652077697468206361736865777320616e64。管理员可以将该值放在 Solaris 系统上的 ike.preshared 文件中。


# Shared key in hex (192 bits)
key 7061706965726d616368652077697468206361736865777320616e64

在需要 ASCII 预先共享密钥的系统中,口令短语就是预先共享的密钥。Solaris 系统管理员使用口令短语 papiermache with cashews and 给其他管理员打电话。


Procedure如何刷新 IKE 预先共享密钥

此过程假定您希望按固定的时间间隔替换现有的预先共享密钥。

  1. 在系统控制台上,承担主管理员角色或成为超级用户。

    主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”


    注 –

    远程登录会使安全关键型通信易于遭到窃听。即使以某种方式保护远程登录,系统的安全性也会降至远程登录会话的安全性。请使用 ssh 命令进行安全的远程登录。


  2. 生成随机数,并构造适当长度的密钥。

    有关详细信息,请参见如何在 Solaris 系统上生成随机数。如果要为 Solaris 系统生成预先共享的密钥,而且此系统与需要 ASCII 的操作系统通信,请参见示例 23–1

  3. 将当前密钥替换为新密钥。

    例如,在主机 enigmapartym 上,将 /etc/inet/secret/ike.preshared 文件中 key 的值替换为一个相同长度的新数值。

  4. 将新密钥读入内核。

    • 从 Solaris 10 4/09 发行版开始,请刷新 ike 服务。


      # svcadm refresh ike
      
    • 如果您运行的是 Solaris 10 4/09 发行版之前的发行版,请中止并重新启动 in.iked 守护进程。

      1. 检查 in.iked 守护进程的权限级别。


        # /usr/sbin/ikeadm get priv
        Current privilege level is 0x0, base privileges enabled

        如果该命令返回权限级别 0x10x2,则您可以更改加密材料。级别 0x0 不允许执行修改或查看加密材料的操作。缺省情况下,in.iked 守护进程按权限级别 0x0 运行。

      2. 如果权限级别是 0x0,请先中止再重新启动该守护进程。

        守护进程重新启动时,它将读取新版本的 ike.preshared 文件。


        # pkill in.iked
        # /usr/lib/inet/in.iked
        
      3. 如果权限级别是 0x10x2,则读入新版本的 ike.preshared 文件。


        # ikeadm read preshared
        

Procedure如何查看 IKE 预先共享密钥

缺省情况下,ikeadm 命令会阻止您在阶段 1 SA 的转储中查看实际密钥。在调试期间查看密钥很有用。

要查看实际密钥,您必须提高守护进程的权限级别。有关权限级别的说明,请参见IKE 管理命令


注 –

要在 Solaris 10 4/09 发行版之前的发行版中执行此过程,请参见示例 23–2


开始之前

已配置 IKE,并且 ike 服务正在运行。

  1. 查看 IKE 预先共享密钥。


    # ikeadm
    ikeadm> dump preshared
    
  2. 如果出现错误,请提高 in.iked 守护进程的权限级别。

    1. 提高 SMF 系统信息库中 in.iked 守护进程的权限级别。


      # svcprop -p config/admin_privilege ike
      base
      # svccfg -s ike setprop config/admin_privilege=keymat
      
    2. 提高正在运行的 in.iked 守护进程的权限级别。


      # svcadm refresh ike ; svcadm restart ike
      
    3. (可选的)确认权限级别为 keymat


      # svcprop -p config/admin_privilege ike
      keymat
    4. 通过再次运行步骤 1 查看密钥。

  3. 将 IKE 守护进程恢复为 base 权限级别。

    1. 查看密钥后,将权限级别恢复为缺省级别。


      # svccfg -s ike setprop config/admin_privilege=base
      
    2. 刷新 IKE,然后再重新启动 IKE。


      # svcadm refresh ike ; svcadm restart ike
      

示例 23–2 在 Solaris 10 4/09 发行版之前的发行版中检验 IKE 预先共享密钥

在以下示例中,管理员要在运行的不是当前 Solaris 发行版的 Solaris 系统中查看密钥。管理员想要检验该系统中的密钥是否与通信系统中的密钥完全相同。检验两个系统中的密钥是否完全相同后,管理员将权限级别恢复为 0。


Procedure如何为 ipsecinit.conf 中的新策略项添加 IKE 预先共享密钥

如果在 IPsec 和 IKE 正在运行时添加 IPsec 策略项,则必须将新的策略和 IKE 规则读入内核。从 Solaris 10 4/09 发行版开始,添加新密钥后,要重新启动 policy 服务并刷新 ike 服务。


注 –

要在 Solaris 10 4/09 发行版之前的发行版中执行此过程,请参见示例 23–3


开始之前

此过程将假定以下内容:

  1. 在系统控制台上,承担主管理员角色或成为超级用户。

    主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”


    注 –

    远程登录会使安全关键型通信易于遭到窃听。即使以某种方式保护远程登录,系统的安全性也会降至远程登录会话的安全性。请使用 ssh 命令进行安全的远程登录。


  2. 在此系统中,生成随机数,并构造一个 64 位到 448 位的密钥。

    有关详细信息,请参见如何在 Solaris 系统上生成随机数。如果要为 Solaris 系统生成预先共享的密钥,而且此系统与需要 ASCII 的操作系统通信,请参见示例 23–1

  3. 以某种方法将密钥发送给远程系统的管理员。

    需要同时添加相同的预先共享密钥。密钥的安全性仅与传输机制的安全性相同。带外机制(如已注册的邮件或受保护的传真机)是最佳的。您也可以使用 ssh 会话管理这两个系统。

  4. 为 IKE 创建一个规则以管理 enigmaada 的密钥。

    1. enigma 系统上,将以下规则添加到 /etc/inet/ike/config 文件:


      ### ike/config file on enigma, 192.168.116.16
       
      ## The rule to communicate with ada
      
      {label "enigma-to-ada"
       local_addr 192.168.116.16
       remote_addr 192.168.15.7
       p1_xform
       {auth_method preshared oakley_group 5 auth_alg sha1 encr_alg blowfish}
       p2_pfs 5
      	}
    2. ada 系统上,添加以下规则:


      ### ike/config file on ada, 192.168.15.7
       
      ## The rule to communicate with enigma
      
      {label "ada-to-enigma"
       local_addr 192.168.15.7
       remote_addr 192.168.116.16
       p1_xform
       {auth_method preshared oakley_group 5 auth_alg sha1 encr_alg blowfish}
       p2_pfs 5
      }
  5. 确保 IKE 预先共享密钥在重新引导时是可用的。

    1. enigma 系统上,将以下信息添加到 /etc/inet/secret/ike.preshared 文件:


      # ike.preshared on enigma for the ada interface
      # 
      { localidtype IP
        localid 192.168.116.16
        remoteidtype IP
        remoteid 192.168.15.7
        # enigma and ada's shared key in hex (32 - 448 bits required)
        key 8d1fb4ee500e2bea071deb2e781cb48374411af5a9671714672bb1749ad9364d
      }
    2. ada 系统上,将以下信息添加到 ike.preshared 文件:


      # ike.preshared on ada for the enigma interface
      # 
      { localidtype IP
        localid 192.168.15.7
        remoteidtype IP
        remoteid 192.168.116.16
        # ada and enigma's shared key in hex (32 - 448 bits required)
        key 8d1fb4ee500e2bea071deb2e781cb48374411af5a9671714672bb1749ad9364d
      }
  6. 在每个系统上,重新启动 IPsec 策略服务以保证所添加的接口的安全。


    # svcadm restart policy
    
  7. 在每个系统上,刷新 ike 服务。


    # svcadm refresh ike
    
  8. 检验系统是否可以进行通信。

    请参见如何检验 IKE 预先共享密钥是否完全相同


示例 23–3 为新的 IPsec 策略项添加 IKE 预先共享密钥

在以下示例中,管理员要将预先共享密钥添加到运行的不是当前 Solaris 发行版的 Solaris 系统。管理员遵循前面的过程来修改 ike/configike.preshared 文件,然后生成密钥并联系远程系统。管理员使用不同的命令将新的 IPsec 策略和 IKE 规则读入内核。


Procedure如何检验 IKE 预先共享密钥是否完全相同

如果通信系统上的预先共享密钥不是完全相同的,则系统无法进行验证。

开始之前

在要测试的两个系统之间已配置并启用 IPsec。您运行的是当前 Solaris 10 发行版。


注 –

要在 Solaris 10 4/09 发行版之前的发行版中执行此过程,请参见示例 23–2


  1. 在系统控制台上,承担主管理员角色或成为超级用户。

    主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”


    注 –

    远程登录会使安全关键型通信易于遭到窃听。即使以某种方式保护远程登录,系统的安全性也会降至远程登录会话的安全性。请使用 ssh 命令进行安全的远程登录。


  2. 在每个系统上,检查 in.iked 守护进程的权限级别。


    # svcprop -p config/admin_privilege ike
    base
    • 如果权限级别为 keymat,请继续执行步骤 3

    • 如果权限级别为 basemodkeys,请提高权限级别。

      然后,刷新并重新启动 ike 服务。


      # svccfg -s ike setprop config/admin_privilege=keymat
      # svcadm refresh ike ; svcadm restart ike
      # svcprop -p config/admin_privilege ike
      keymat
  3. 在每个系统上,查看预先共享密钥的信息。


    # ikeadm dump preshared
    PSKEY: Preshared key (24 bytes): f47cb…/192
    LOCIP: AF_INET: port 0, 192.168.116.16 (enigma).
    REMIP: AF_INET: port 0, 192.168.13.213 (partym).
  4. 比较两个转储。

    如果预先共享的密钥不是完全相同的,则在 /etc/inet/secret/ike.preshared 文件中将一个密钥替换为另一个密钥。

  5. 检验完成后,在每个系统中将权限级别恢复为缺省级别。


    # svccfg -s ike setprop config/admin_privilege=base
    # svcadm restart ike
    

使用公钥证书配置 IKE(任务列表)

下表提供了为 IKE 创建公钥证书的过程的链接。这些过程包括如何在连接的硬件上加速和存储证书。

任务 

说明 

参考 

使用自签名的公钥证书配置 IKE 

在每个系统上创建并放置两个证书: 

  • 自签名证书

  • 来自远程系统的公钥证书

如何使用自签名的公钥证书配置 IKE

通过 PKI 证书颁发机构配置 IKE 

创建证书请求,然后在每个系统上放置三个证书: 

  • 证书颁发机构 (Certificate Authority, CA) 根据您的请求创建的证书

  • 来自 CA 的公钥证书

  • 来自 CA 的 CRL

如何使用 CA 签名的证书配置 IKE

在本地硬件上配置公钥证书 

涉及以下操作之一:  

  • 在本地硬件上生成自签名证书,然后将公钥从远程系统添加到硬件。

  • 在本地硬件上生成证书请求,然后将公钥证书从 CA 添加到硬件。

如何在硬件上生成和存储公钥证书

更新来自 PKI 的证书撤销列表 (certificate revocation list, CRL) 

从中心分发点访问 CRL。 

如何处理证书撤销列表

使用公钥证书配置 IKE

使用公钥证书,通信系统就无需在带外共享秘密的加密材料。与预先共享的密钥不同,公钥证书可以在移动机器或可能重新编号的系统上使用。

公钥证书也可以存储在连接的硬件上。有关过程,请参见将 IKE 配置为查找连接的硬件(任务列表)

Procedure如何使用自签名的公钥证书配置 IKE

自签名证书比 CA 颁发的公共证书所需的开销少,但不太易于扩展。

  1. 在系统控制台上,承担主管理员角色或成为超级用户。

    主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”


    注 –

    远程登录会使安全关键型通信易于遭到窃听。即使以某种方式保护远程登录,系统的安全性也会降至远程登录会话的安全性。请使用 ssh 命令进行安全的远程登录。


  2. 将自签名证书添加到 ike.privatekeys 数据库。


    # ikecert certlocal -ks|-kc -m keysize -t keytype \
    -D dname -A altname \
    [-S validity-start-time] [-F validity-end-time] [-T token-ID]
    -ks

    创建自签名证书。

    -kc

    创建证书请求。有关过程,请参见如何使用 CA 签名的证书配置 IKE

    -m keysize

    是密钥的大小。keysize 可以是 512、1024、2048、3072 或 4096。

    -t keytype

    指定要使用的算法类型。keytype 可以是 rsa-sha1rsa-md5dsa-sha1

    -D dname

    是证书主题的 X.509 标识名。dname 通常具有以下格式: C=country, O=organization, OU=organizational unit, CN=common name。有效标记是 C、O、OU 和 CN。

    -A altname

    是证书的替代名称。altname 的形式为 tag=value。有效标记是 IPDNSemailDN

    -S validity-start-time

    为证书提供绝对或相对有效开始时间。

    -F validity-end-time

    为证书提供绝对或相对有效结束时间。

    -T token-ID

    启用 PKCS #11 硬件标记来生成密钥。然后证书将被存储在硬件中。

    1. 例如,partym 系统上命令的显示与以下信息类似:


      # ikecert certlocal -ks -m 1024 -t rsa-md5 \
      -D "C=US, O=PartyCompany, OU=US-Partym, CN=Partym" \
      -A IP=192.168.13.213
      Creating software private keys.
        Writing private key to file /etc/inet/secret/ike.privatekeys/0.
      Enabling external key providers - done.
      Acquiring private keys for signing - done.
      Certificate: 
       Proceeding with the signing operation.
       Certificate generated successfully (…/publickeys/0)
      Finished successfully.
      Certificate added to database.
      -----BEGIN X509 CERTIFICATE-----
      MIICLTCCAZagAwIBAgIBATANBgkqhkiG9w0BAQQFADBNMQswCQYDVQQGEwJVUzEX
      …
      6sKTxpg4GP3GkQGcd0r1rhW/3yaWBkDwOdFCqEUyffzU
      -----END X509 CERTIFICATE-----
    2. enigma 系统上命令的显示与以下信息类似:


      # ikecert certlocal -ks -m 1024 -t rsa-md5 \
      -D "C=JA, O=EnigmaCo, OU=JA-Enigmax, CN=Enigmax" \
      -A IP=192.168.116.16
      Creating software private keys.
        …
      Certificate added to database.
      -----BEGIN X509 CERTIFICATE-----
      MIICKDCCAZGgAwIBAgIBATANBgkqhkiG9w0BAQQFADBJMQswCQYDVQQGEwJVUzEV
      …
      jpxfLM98xyFVyLCbkr3dZ3Tvxvi732BXePKF2A==
      -----END X509 CERTIFICATE-----
  3. 保存证书并将它发送到远程系统。

    可以将证书粘贴到电子邮件中。

    1. 例如,将以下 partym 证书发送给 enigma 管理员:


      To: admin@ja.enigmaexample.com
      From: admin@us.partyexample.com
      Message: -----BEGIN X509 CERTIFICATE-----
      MIICLTCCAZagAwIBAgIBATANBgkqhkiG9w0BAQQFADBNMQswCQYDVQQGEwJVUzEX
      …
      6sKTxpg4GP3GkQGcd0r1rhW/3yaWBkDwOdFCqEUyffzU
      -----END X509 CERTIFICATE-----
    2. enigma 管理员将向您发送以下 enigma 证书:


      To: admin@us.partyexample.com
      From: admin@ja.enigmaexample.com
      Message: -----BEGIN X509 CERTIFICATE-----
      MIICKDCCAZGgAwIBAgIBATANBgkqhkiG9w0BAQQFADBJMQswCQYDVQQGEwJVUzEV
      …
      jpxfLM98xyFVyLCbkr3dZ3Tvxvi732BXePKF2A==
      -----END X509 CERTIFICATE-----
  4. 在每个系统上,添加收到的证书。

    1. 从管理员的电子邮件中复制公钥。

    2. 键入 ikecert certdb -a 命令,然后按回车键。

      回车键时,不显示任何提示。


      # ikecert certdb -a Press the Return key
      
    3. 粘贴公钥。然后按回车键。要结束输入,请按 Ctrl-D 组合键。


      -----BEGIN X509 CERTIFICATE-----
      MIIC…
      …
      ----END X509 CERTIFICATE----- Press the Return key
      <Control>-D
      
  5. 向其他管理员核实证书是否来自该管理员。

    例如,可以给其他管理员打电话,以比较公钥散列的值。在这两个系统上,共享证书的公钥散列必须是相同的。

    1. 列出在系统上存储的证书。

      例如,在 partym 系统上,公共证书位于插槽 1 中,而专用证书位于插槽 0 中。


      partym # ikecert certdb -l
      Certificate Slot Name: 0   Type: rsa-md5 Private Key
          Subject Name: <C=US, O=PartyCompany, OU=US-Partym, CN=Partym>
          Key Size: 1024
          Public key hash: B2BD13FCE95FD27ECE6D2DCD0DE760E2
      
      Certificate Slot Name: 1   Type: rsa-md5 Public Certificate
          (Private key in certlocal slot 0) Points to certificate's private key
          Subject Name: <C=JA, O=EnigmaCo, OU=JA-Enigmax, CN=Enigmax>
          Key Size: 1024
          Public key hash: 2239A6A127F88EE0CB40F7C24A65B818
      
    2. 将此值与 enigma 系统上的公钥散列进行比较。

      您可通过电话读取公钥散列。


      enigma # ikecert certdb -l
      Certificate Slot Name: 4   Type: rsa-md5 Private Key
          Subject Name: <C=JA, O=EnigmaCo, OU=JA-Enigmax, CN=Enigmax>
          Key Size: 1024
          Public key hash: DF3F108F6AC669C88C6BD026B0FCE3A0
      
      Certificate Slot Name: 5   Type: rsa-md5 Public Certificate
          (Private key in certlocal slot 4)
          Subject Name: <C=US, O=PartyCompany, OU=US-Partym, CN=Partym>
          Key Size: 1024
          Public key hash: 2239A6A127F88EE0CB40F7C24A65B818
      
  6. 在每个系统上,信任这两个证书。

    编辑 /etc/inet/ike/config 文件以识别证书。

    远程系统的管理员提供 cert_trustremote_addrremote_id 参数的值。

    1. 例如,在 partym 系统上,ike/config 文件的显示与以下信息类似:


      # Explicitly trust the following self-signed certs
      # Use the Subject Alternate Name to identify the cert
      
      # Verified remote address and remote ID
      # Verified public key hash per telephone call from administrator
      cert_trust "192.168.13.213" Local system's certificate Subject Alt Name
      cert_trust "192.168.116.16" Remote system's certificate Subject Alt Name
      
      ## Parameters that may also show up in rules.
      
      p1_xform 
        { auth_method preshared oakley_group 5 auth_alg sha encr_alg des }
      p2_pfs 5
      
      {
       label "US-partym to JA-enigmax"
       local_id_type dn
       local_id "C=US, O=PartyCompany, OU=US-Partym, CN=Partym"
       remote_id "C=JA, O=EnigmaCo, OU=JA-Enigmax, CN=Enigmax"
      
       local_addr  192.168.13.213
       remote_addr 192.168.116.16
      
       p1_xform
        {auth_method rsa_sig oakley_group 2 auth_alg sha1 encr_alg aes}
      }
    2. enigma 系统上,在 ike/config 文件中添加本地参数的 enigma 值。

      对于远程参数,请使用 partym 值。确保 label 关键字的值是唯一的。此值必须与远程系统的 label 值不同。


      …
      {
       label "JA-enigmax to US-partym"
       local_id_type dn
       local_id "C=JA, O=EnigmaCo, OU=JA-Enigmax, CN=Enigmax"
       remote_id "C=US, O=PartyCompany, OU=US-Partym, CN=Partym"
      
       local_addr  192.168.116.16
       remote_addr 192.168.13.213
      …

示例 23–4 检验来自其他管理员的证书是否有效

在此示例中,管理员使用主题名称来验证这些证书是否相同。

第一个管理员将生成和列出证书的输出保存到一个文件中。由于 ikecert 命令的输出列显到标准错误,因此管理员会将标准错误重定向到该文件。


sys1# cd /
sys1# ikecert certlocal -ks -m1024 -t rsa-md5 \
-D"C=US, O=TestCo, CN=Co2Sys" 2>/tmp/for_co2sys
Certificate added to database.
sys1# ikecert certdb -l "C=US, O=TestCo, CN=Co2Sys" 2>>/tmp/for_co2sys

管理员验证该文件的内容。


sys1# cat /tmp/for_co2sys
Creating private key.
-----BEGIN X509 CERTIFICATE-----
MIIB7TCCAVagAwIBAgIEZkHfOTANBgkqhkiG9w0BAQQFADAxMQwwCgYDVQQGEwNV
U0ExEDAOBgNVBAoMB3Rlc3RfY28xDzANBgNVBAMTBkVuaWdtYTAeFw0wODAxMTUx
OTI1MjBaFw0xMjAxMTUxOTI1MjBaMDExDDAKBgNVBAYTA1VTQTEQMA4GA1UECgwH
dGVzdF9jbzEPMA0GA1UEAxMGRW5pZ21hMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
iQKBgQCPxGv0rUzHMnFtkx9uwYuPiWbftmWfa9iDt6ELOEuw3zlboy2qtuRUZohz
FIbCxAJevdCY6a+pktvYy3/2nJL0WATObO5T0FKn3F0bphajinLYbyCrYhEzD9E2
gkiT2D9/ttbSiMvi9usphprEDcLAFaWgCJiHnKPBEkjC0vhA3wIDAQABoxIwEDAO
BgNVHQ8BAf8EBAMCBaAwDQYJKoZIhvcNAQEEBQADgYEAL/q6xgweylGQylqLCwzN
5PIpjfzsNPf3saTyh3VplwEOW6WTHwRQT17IO/1Oc6Jnz9Mr0ZrbHWDXq+1sx180
F8+DMW1Qv1UR/lGMq3ufDG3qedmSN6txDF8qLlPCUML0YL8m4oGdewqGb+78aPyE
Y/cJRsK1hWbYyseqcIkjj5k=
-----END X509 CERTIFICATE-----
Certificate Slot Name: 2   Key Type: rsa
        (Private key in certlocal slot 2)
        Subject Name: <C=US, O=TestCo, CN=Co2Sys>
        Key Size: 1024
        Public key hash: C46DE77EF09084CE2B7D9C70479D77FF

然后,管理员通过电子邮件将该文件发送给第二个管理员。

第二个管理员将该文件放在安全目录中,并从该文件导入证书。


sys2# cd /
sys2# ikecert certdb -a < /sec/co2sys

ikecert 命令只导入 -----BEGIN-----END 行之间的文字。管理员验证本地证书的公钥散列是否与 co2sys 文件中的公钥散列相同。


sys2# ikecert certdb -l
Certificate Slot Name: 1   Key Type: rsa
        (Private key in certlocal slot 1)
        Subject Name: <C=US, O=TestCo, CN=Co2Sys>
        Key Size: 1024
        Public key hash: C46DE77EF09084CE2B7D9C70479D77FF

为确保第一个管理员发送了此电子邮件,第二个管理员会给第一个管理员打电话,以验证证书的主题名称。



示例 23–5 指定证书的开始时间和结束时间

在此示例中,由 partym 系统上的管理员建立证书有效日期。该证书可回溯 2 1/2 天,自创建之日起 4 年零 6 个月内有效。


# ikecert certlocal -ks -m 1024 -t rsa-md5 \
-D "C=US, O=PartyCompany, OU=US-Partym, CN=Partym" \
-A IP=192.168.13.213 \
-S -2d12h -F +4y6m

enigma 系统上的管理员建立证书有效日期。该证书可回溯 2 天,在 2010 年 12 月 31 号子夜前有效。


# ikecert certlocal -ks -m 1024 -t rsa-md5 \
-D "C=JA, O=EnigmaCo, OU=JA-Enigmax, CN=Enigmax" \
-A IP=192.168.116.16 \
-S -2d -F "12/31/2010 12:00 AM"

Procedure如何使用 CA 签名的证书配置 IKE

证书颁发机构 (CA) 颁发的公共证书需要与外部组织进行协商。证书很容易扩展为保护大量通信系统。

  1. 在系统控制台上,承担主管理员角色或成为超级用户。

    主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”


    注 –

    远程登录会使安全关键型通信易于遭到窃听。即使以某种方式保护远程登录,系统的安全性也会降至远程登录会话的安全性。请使用 ssh 命令进行安全的远程登录。


  2. 使用 ikecert certlocal -kc 命令创建证书请求。

    有关该命令的参数的说明,请参见如何使用自签名的公钥证书配置 IKE中的步骤 2


    # ikecert certlocal -kc -m keysize -t keytype \
    -D dname -A altname
    
    1. 例如,以下命令在 partym 系统上创建证书请求:


      # ikecert certlocal -kc -m 1024 -t rsa-md5 \
      > -D "C=US, O=PartyCompany\, Inc., OU=US-Partym, CN=Partym" \
      > -A "DN=C=US, O=PartyCompany\, Inc., OU=US-Partym"
      Creating software private keys.
        Writing private key to file /etc/inet/secret/ike.privatekeys/2.
      Enabling external key providers - done.
      Certificate Request: 
        Proceeding with the signing operation.
        Certificate request generated successfully (…/publickeys/0)
      Finished successfully.
      -----BEGIN CERTIFICATE REQUEST-----
      MIIByjCCATMCAQAwUzELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFEV4YW1wbGVDb21w
      …
      lcM+tw0ThRrfuJX9t/Qa1R/KxRlMA3zckO80mO9X
      -----END CERTIFICATE REQUEST-----
    2. 以下命令在 enigma 系统上创建证书请求:


      # ikecert certlocal -kc -m 1024 -t rsa-md5 \
      > -D "C=JA, O=EnigmaCo\, Inc., OU=JA-Enigmax, CN=Enigmax" \
      > -A "DN=C=JA, O=EnigmaCo\, Inc., OU=JA-Enigmax"
      Creating software private keys.
      …
      Finished successfully.
      -----BEGIN CERTIFICATE REQUEST-----
      MIIBuDCCASECAQAwSTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDFBhcnR5Q29tcGFu
      …
      8qlqdjaStLGfhDOO
      -----END CERTIFICATE REQUEST-----
  3. 将证书请求提交到 PKI 组织。

    PKI 组织可以告诉您如何提交证书请求。大多数组织具有包含提交表单的 Web 站点。该表单要求证明提交是合法的。通常,将证书请求粘贴到表单中。组织在检查您的请求后,将向您发出以下两个证书对象和已撤销证书的列表:

    • 公钥证书-此证书基于您提交给组织的请求。所提交的请求是此公钥证书的一部分。证书可对您进行唯一标识。

    • 证书颁发机构-组织的签名。CA 检验公钥证书是否合法。

    • 证书撤销列表 (Certificate Revocation List, CRL)-组织已撤销的证书的最新列表。如果在公钥证书中嵌入对 CRL 的访问,则不会将 CRL 作为证书对象单独发送。

      在公钥证书中嵌入 CRL 的 URI 时,IKE 可以自动检索 CRL。同样,在公钥证书中嵌入 DN(LDAP 服务器上的目录名称)项时,IKE 可以从指定的 LDAP 服务器检索并高速缓存 CRL。

      有关公钥证书中的嵌入式 URI 和嵌入式 DN 项的示例,请参见如何处理证书撤销列表

  4. 将每个证书添加到系统。

    ikecert certdb -a-a 选项将已粘贴的对象添加到系统上的适当证书数据库。有关更多信息,请参见IKE,使用公钥证书

    1. 在系统控制台上,承担主管理员角色或成为超级用户。

    2. 添加从 PKI 组织收到的公钥证书。


      # ikecert certdb -a
      Press the Return key
      Paste the certificate:
      -----BEGIN X509 CERTIFICATE-----
      …
      -----END X509 CERTIFICATE----
      Press the Return key
      <Control>-D
      
    3. 添加来自 PKI 组织的 CA。


      # ikecert certdb -a
      Press the Return key
      Paste the CA:
      -----BEGIN X509 CERTIFICATE-----
      …
      -----END X509 CERTIFICATE----
      Press the Return key
      <Control>-D
      
    4. 如果 PKI 组织已发送撤销证书列表,则将 CRL 添加到 certrldb 数据库:


      # ikecert certrldb -a
      Press the Return key
      Paste the CRL:
      -----BEGIN CRL-----
      …
      -----END CRL----
      Press the Return key
      <Control>-D
      
  5. /etc/inet/ike/config 文件中使用 cert_root 关键字标识 PKI 组织。

    使用 PKI 组织提供的名称。

    1. 例如,partym 系统上 ike/config 文件的显示可能与以下信息类似:


      # Trusted root cert
      # This certificate is from Example PKI
      # This is the X.509 distinguished name for the CA that it issues.
      
      cert_root "C=US, O=ExamplePKI\, Inc., OU=PKI-Example, CN=Example PKI"
      
      ## Parameters that may also show up in rules.
      
      p1_xform 
       { auth_method rsa_sig oakley_group 1 auth_alg sha1 encr_alg des }
      p2_pfs 2
      
      {
       label "US-partym to JA-enigmax - Example PKI"
       local_id_type dn
       local_id  "C=US, O=PartyCompany, OU=US-Partym, CN=Partym"
       remote_id "C=JA, O=EnigmaCo, OU=JA-Enigmax, CN=Enigmax"
      
       local_addr  192.168.13.213
       remote_addr 192.168.116.16
      
       p1_xform
        {auth_method rsa_sig oakley_group 2 auth_alg sha1 encr_alg aes}
      }

      注 –

      auth_method 参数的所有变量都必须在同一行上。


    2. enigma 系统上,创建一个类似的文件。

      具体而言,enigmaike/config 文件应该满足以下要求:

      • 包括相同的 cert_root 值。

      • 对于本地参数,使用 enigma 值。

      • 对于远程参数,使用 partym 值。

      • label 关键字创建唯一值。此值必须与远程系统的 label 值不同。


      …
      cert_root "C=US, O=ExamplePKI\, Inc., OU=PKI-Example, CN=Example PKI"
      …
      {
       label "JA-enigmax to US-partym - Example PKI"
       local_id_type dn
       local_id   "C=JA, O=EnigmaCo, OU=JA-Enigmax, CN=Enigmax"
       remote_id  "C=US, O=PartyCompany, OU=US-Partym, CN=Partym"
       
       local_addr  192.168.116.16
       remote_addr 192.168.13.213
      …
  6. 通知 IKE 如何处理 CRL。

    选择适当的选项:

    • 未提供 CRL

      如果 PKI 组织未提供 CRL,则将关键字 ignore_crls 添加到 ike/config 文件。


      # Trusted root cert
      …
      cert_root "C=US, O=ExamplePKI\, Inc., OU=PKI-Example,…
      ignore_crls

      ignore_crls 关键字指示 IKE 不搜索 CRL。

    • 提供了 CRL

      如果 PKI 组织提供了 CRL 的中心分发点,则可以修改 ike/config 文件以指向该位置。

      有关示例,请参见如何处理证书撤销列表


示例 23–6 配置 IKE 时使用 rsa_encrypt

    ike/config 文件中使用 auth_method rsa_encrypt 时,必须将对等方的证书添加到 publickeys 数据库。

  1. 将证书发送给远程系统的管理员。

    可以将证书粘贴到电子邮件中。

    例如,partym 管理员将发送以下电子邮件:


    To: admin@ja.enigmaexample.com
    From: admin@us.partyexample.com
    Message: -----BEGIN X509 CERTIFICATE-----
    MII…
    ----END X509 CERTIFICATE-----

    enigma 管理员将发送以下电子邮件:


    To: admin@us.partyexample.com
    From: admin@ja.enigmaexample.com
    Message: -----BEGIN X509 CERTIFICATE-----
    MII
    …
    -----END X509 CERTIFICATE-----
  2. 在每个系统上,将通过电子邮件发送的证书添加到本地 publickeys 数据库。


    # ikecert certdb -a
    Press the Return key
    -----BEGIN X509 CERTIFICATE-----
    MII…
    -----END X509 CERTIFICATE-----
    Press the Return key
    <Control>-D
    

RSA 加密的验证方法可防止窃听者知道 IKE 中的标识。由于 rsa_encrypt 方法隐藏对等方的标识,IKE 无法检索对等方的证书。因此,rsa_encrypt 方法要求 IKE 对等方知道彼此的公钥。

所以,在 /etc/inet/ike/config 文件中使用 rsa_encryptauth_method 时,必须将对等方的证书添加到 publickeys 数据库。添加证书后,publickeys 数据库包含每对通信系统的三个证书:

疑难解答-IKE 有效负荷(它包括这三个证书)可能变得过大而无法由 rsa_encrypt 加密。诸如“授权失败”和“有效负荷格式错误”之类的错误,可以指明 rsa_encrypt 方法无法对总有效负荷进行加密。使用仅需要两个证书的方法(如 rsa_sig)来减小有效负荷的大小。


Procedure如何在硬件上生成和存储公钥证书

在硬件上生成和存储公钥证书,与在系统上生成和存储公钥证书类似。在硬件上,ikecert certlocalikecert certdb 命令必须标识硬件。带有标记 ID 的 -T 选项向命令标识硬件。

开始之前
  1. 在系统控制台上,承担主管理员角色或成为超级用户。

    主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”


    注 –

    远程登录会使安全关键型通信易于遭到窃听。即使以某种方式保护远程登录,系统的安全性也会降至远程登录会话的安全性。请使用 ssh 命令进行安全的远程登录。


  2. 生成自签名证书或证书请求,并指定标记 ID。

    选择以下选项之一:


    注 –

    对于 RSA,Sun Crypto Accelerator 4000 板最多支持 2048 位的密钥。对于 DSA,此板最多支持 1024 位的密钥。


    • 对于自签名证书,请使用此语法。


      # ikecert certlocal -ks -m 1024 -t rsa-md5 \
      > -D "C=US, O=PartyCompany, OU=US-Partym, CN=Partym" \
      > -a -T dca0-accel-stor IP=192.168.116.16
      Creating hardware private keys.
      Enter PIN for PKCS#11 token: Type user:password
      

      -T 选项的参数是来自已连接 Sun Crypto Accelerator 4000 板的标记 ID。

    • 对于证书请求,请使用此语法。


      # ikecert certlocal -kc -m 1024 -t rsa-md5 \
      > -D "C=US, O=PartyCompany, OU=US-Partym, CN=Partym" \
      > -a -T dca0-accel-stor IP=192.168.116.16
      Creating hardware private keys.
      Enter PIN for PKCS#11 token: Type user:password
      

    有关 ikecert 命令的参数的说明,请参见 ikecert(1M) 手册页。

  3. 在系统提示输入 PIN 时,键入 Sun Crypto Accelerator 4000 用户、冒号和该用户的口令。

    如果 Sun Crypto Accelerator 4000 板具有口令为 rgm4tigt 的用户 ikemgr,应键入以下内容:


    Enter PIN for PKCS#11 token: ikemgr:rgm4tigt
    

    注 –

    PIN 响应以明文形式存储在磁盘上。


    键入口令后,将输出证书内容:


    Enter PIN for PKCS#11 token: ikemgr:rgm4tigt
    -----BEGIN X509 CERTIFICATE-----
    MIIBuDCCASECAQAwSTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDFBhcnR5Q29tcGFu
    …
    oKUDBbZ9O/pLWYGr
    -----END X509 CERTIFICATE-----
  4. 发送您的证书以供对方使用。

    选择以下选项之一:

    • 将自签名证书发送到远程系统。

      可以将证书粘贴到电子邮件中。

    • 将证书请求发送到处理 PKI 的组织。

      按照 PKI 组织的说明提交证书请求。有关更详细的论述,请参见如何使用 CA 签名的证书配置 IKE中的步骤 3

  5. 在系统上,编辑 /etc/inet/ike/config 文件以识别这些证书。

    选择以下选项之一。

    • 自签名证书

      使用远程系统管理员为 cert_trustremote_idremote_addr 参数提供的值。例如,在 enigma 系统上,ike/config 文件的显示与以下信息类似:


      # Explicitly trust the following self-signed certs
      # Use the Subject Alternate Name to identify the cert
      
      cert_trust "192.168.116.16"  Local system's certificate Subject Alt Name
      cert_trust "192.168.13.213"  Remote system's certificate Subject Alt name
      
      
      # Solaris 10 1/06 release: default path does not have to be typed in
      #pkcs11_path "/usr/lib/libpkcs11.so" Hardware connection
      
      # Solaris 10 release: use this path
      #pkcs11_path "/opt/SUNWconn/cryptov2/lib/libvpkcs11.so"
      …
      {
       label "JA-enigmax to US-partym"
       local_id_type dn
       local_id "C=JA, O=EnigmaCo, OU=JA-Enigmax, CN=Enigmax"
       remote_id "C=US, O=PartyCompany, OU=US-Partym, CN=Partym"
      
       local_addr  192.168.116.16
       remote_addr 192.168.13.213
      
       p1_xform
        {auth_method rsa_sig oakley_group 2 auth_alg sha1 encr_alg aes}
      }
    • 证书请求

      将 PKI 组织提供的名称作为 cert_root 关键字的值键入。例如,enigma 系统上 ike/config 文件的显示可能与以下信息类似:


      # Trusted root cert
      # This certificate is from Example PKI
      # This is the X.509 distinguished name for the CA that it issues.
      
      cert_root "C=US, O=ExamplePKI\, Inc., OU=PKI-Example, CN=Example PKI"
      
      # Solaris 10 1/06 release: default path does not have to be typed in
      #pkcs11_path "/usr/lib/libpkcs11.so" Hardware connection
      
      # Solaris 10 release: use this path
      #pkcs11_path "/opt/SUNWconn/cryptov2/lib/libvpkcs11.so"
      …
      {
       label "JA-enigmax to US-partym - Example PKI"
       local_id_type dn
       local_id "C=JA, O=EnigmaCo, OU=JA-Enigmax, CN=Enigmax"
       remote_id  "C=US, O=PartyCompany, OU=US-Partym, CN=Partym"
      
       local_addr  192.168.116.16
       remote_addr 192.168.13.213
      
       p1_xform
        {auth_method rsa_sig oakley_group 2 auth_alg sha1 encr_alg aes}
      }
  6. 在硬件中存放来自对方的证书。

    按照在步骤 3 中作出的响应,响应 PIN 请求。


    注 –

    必须将公钥证书添加到生成私钥的那个连接硬件上。


    • 自签名证书。

      添加远程系统的自签名证书。在此示例中,证书存储在 DCA.ACCEL.STOR.CERT 文件中。


      # ikecert certdb -a -T dca0-accel-stor < DCA.ACCEL.STOR.CERT
      Enter PIN for PKCS#11 token: Type user:password
      

      如果自签名证书将 rsa_encrypt 用作 auth_method 参数的值,则将对等方的证书添加到硬件存储。

    • 来自 PKI 组织的证书。

      添加组织从证书请求生成的证书,然后添加证书颁发机构 (certificate authority, CA)。


      # ikecert certdb -a -T dca0-accel-stor < DCA.ACCEL.STOR.CERT
      Enter PIN for PKCS#11 token: Type user:password
      

      # ikecert certdb -a -T dca0-accel-stor < DCA.ACCEL.STOR.CA.CERT
      Enter PIN for PKCS#11 token: Type user:password
      

      要添加来自 PKI 组织的证书撤销列表 (certificate revocation list, CRL),请参见如何处理证书撤销列表

Procedure如何处理证书撤销列表

证书撤销列表 (certificate revocation list, CRL) 包含来自证书颁发机构的过时证书或已损坏证书。CRL 的处理方式有四种。

以下过程介绍如何指示 IKE 从中心分发点使用 CRL。

  1. 显示从 CA 收到的证书。


    # ikecert certdb -lv certspec
    
    -l

    列出 IKE 证书数据库中的证书。

    -v

    以详细模式列出证书。应谨慎使用此选项。

    certspec

    是一种与 IKE 证书数据库中的证书匹配的模式。

    例如,以下证书是由 Sun Microsystems 颁发的。详细信息已更改。


    # ikecert certdb -lv example-protect.sun.com
    Certificate Slot Name: 0   Type: dsa-sha1
       (Private key in certlocal slot 0)
     Subject Name: <O=Sun Microsystems Inc, CN=example-protect.sun.com>
     Issuer Name: <CN=Sun Microsystems Inc CA (Cl B), O=Sun Microsystems Inc>
     SerialNumber: 14000D93
       Validity:
          Not Valid Before: 2002 Jul 19th, 21:11:11 GMT
          Not Valid After:  2005 Jul 18th, 21:11:11 GMT
       Public Key Info:
          Public Modulus  (n) (2048 bits): C575A…A5
          Public Exponent (e) (  24 bits): 010001
       Extensions:
          Subject Alternative Names:
                  DNS = example-protect.sun.com
          Key Usage: DigitalSignature KeyEncipherment
          [CRITICAL]
       CRL Distribution Points:
          Full Name:
             URI = #Ihttp://www.sun.com/pki/pkismica.crl#i
             DN = <CN=Sun Microsystems Inc CA (Cl B), O=Sun Microsystems Inc>
          CRL Issuer: 
          Authority Key ID:
          Key ID:              4F … 6B
          SubjectKeyID:        A5 … FD
          Certificate Policies
          Authority Information Access

    请注意 CRL Distribution Points 项。URI 项指示此组织的 CRL 在 Web 上是可用的。DN 项指示 CRL 在 LDAP 服务器上是可用的。在 IKE 访问 CRL 后,将高速缓存该 CRL 以供将来使用。

    要访问 CRL,您需要到达分发点。

  2. 选择以下方法之一从中心分发点访问 CRL。

    • 使用 URI。

      将关键字 use_http 添加到主机的 /etc/inet/ike/config 文件。例如,ike/config 文件的显示与以下信息类似:


      # Use CRL from organization's URI
      use_http
    • 使用 Web 代理。

      将关键字 proxy 添加到 ike/config 文件。proxy 关键字将 URL 用作参数,如下所示:


      # Use own web proxy
      proxy "http://proxy1:8080"
      
    • 使用 LDAP 服务器。

      在主机的 /etc/inet/ike/config 文件中,将 LDAP 服务器指定为 ldap-list 关键字的参数。您的组织提供 LDAP 服务器的名称。ike/config 文件中项的显示与以下信息类似:


      # Use CRL from organization's LDAP
      ldap-list "ldap1.sun.com:389,ldap2.sun.com"
      …

    在证书到期之前,IKE 检索并高速缓存 CRL。


示例 23–7 将 CRL 粘贴到本地 certrldb 数据库中

如果无法从中心分发点获取 PKI 组织的 CRL,则可以将该 CRL 手动添加到本地 certrldb 数据库。按照 PKI 组织的说明将 CRL 提取到文件中,然后使用 ikecert certrldb -a 命令将此 CRL 添加到数据库。


# ikecert certrldb -a < Sun.Cert.CRL

为移动系统配置 IKE(任务列表)

下表包含将 IKE 配置为处理远程登录到中心站点的系统的过程的链接。

任务 

说明 

参考 

从站点外与中心站点进行通信 

允许站点外系统与中心站点进行通信。站点外系统可能是移动系统。 

如何为站点外系统配置 IKE

在接受来自移动系统的流量的中心系统上使用根证书和 IKE 

将网关系统配置为接受来自没有固定 IP 地址的系统的 IPsec 流量。 

示例 23–8

在没有固定 IP 地址的系统上使用根证书和 IKE 

将移动系统配置为保护它传输到中心站点(如公司总部)的流量。 

示例 23–9

在接受来自移动系统的流量的中心系统上使用自签名证书和 IKE 

使用自签名证书配置网关系统,以接受来自移动系统的 IPsec 流量。 

示例 23–10

在没有固定 IP 地址的系统上使用自签名证书和 IKE 

使用自签名证书配置移动系统,以保护它传输到中心站点的流量。 

示例 23–11

为移动系统配置 IKE

在进行适当配置后,家庭办公室和膝上型移动计算机可以使用 IPsec 和 IKE 与其公司的中央计算机进行通信。利用与公钥证书验证方法组合的综合 IPsec 策略,离站系统可以保护它们传输到中心系统的流量。

Procedure如何为站点外系统配置 IKE

IPsec 和 IKE 要求用唯一 ID 标识源和目标。对于没有唯一 IP 地址的站点外系统或移动系统,必须使用其他 ID 类型。可以使用诸如 DNSDNemail 之类的 ID 类型唯一地标识系统。

对于具有唯一 IP 地址的站点外系统或移动系统,最好也应使用其他 ID 类型进行配置。例如,如果系统尝试从 NAT 盒 (NAT box) 之后连接到中心站点,则不会使用它们的唯一地址。NAT 盒 (NAT box) 指定一个中心系统无法识别的任意 IP 地址。

预先共享的密钥也不太适合用作移动系统的验证机制,因为预先共享的密钥需要固定的 IP 地址。使用自签名证书或来自 PKI 的证书,移动系统可以与中心站点进行通信。

  1. 在系统控制台上,承担主管理员角色或成为超级用户。

    主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”


    注 –

    远程登录会使安全关键型通信易于遭到窃听。即使以某种方式保护远程登录,系统的安全性也会降至远程登录会话的安全性。请使用 ssh 命令进行安全的远程登录。


  2. 将中心系统配置为识别移动系统。

    1. 设置 /etc/hosts 文件。

      中心系统不必识别移动系统的特定地址。


      # /etc/hosts on central
      central 192.xxx.xxx.x
      
    2. 设置 ipsecinit.conf 文件。

      中心系统需要一个允许很宽的 IP 地址范围的策略。随后,IKE 策略中的证书确保进行连接的系统是合法的。


      # /etc/inet/ipsecinit.conf on central
      # Keep everyone out unless they use this IPsec policy:
      {} ipsec {encr_algs aes encr_auth_algs sha1 sa shared}
    3. 设置 ike.config 文件。

      DNS 标识中心系统。证书用于验证该系统。


      ## /etc/inet/ike/ike.config on central
      # Global parameters
      #
      # Find CRLs by URI, URL, or LDAP
      # Use CRL from organization's URI
      use_http
      #
      # Use web proxy
      proxy "http://somecache.domain:port/"
      #
      # Use LDAP server
      ldap_server   "ldap-server1.domain.org,ldap2.domain.org:port"
      #
      # List CA-signed certificates
      cert_root    "C=US, O=Domain Org, CN=Domain STATE"
      #
      # List self-signed certificates - trust server and enumerated others
      #cert_trust    "DNS=central.domain.org"
      #cert_trust    "DNS=mobile.domain.org"
      #cert_trust    "DN=CN=Domain Org STATE (CLASS), O=Domain Org
      #cert_trust    "email=root@central.domain.org"
      #cert_trust    "email=user1@mobile.domain.org"
      #
      
      # Rule for mobile systems with certificate
      {
        label "Mobile systems with certificate"
        local_id_type DNS
      
      # Any mobile system who knows my DNS or IP can find me.
      
        local_id "central.domain.org"
        local_addr 192.xxx.xxx.x
      
      # Root certificate ensures trust,
      # so allow any remote_id and any remote IP address.
        remote_id ""
        remote_addr 0.0.0.0/0
      
      p2_pfs 5
      
      p1_xform
      {auth_method rsa_sig oakley_group 5 encr_alg blowfish auth_alg sha1 }
      }
  3. 登录到每个移动系统,然后将该系统配置为查找中心系统。

    1. 设置 /etc/hosts 文件。

      /etc/hosts 文件不需要移动系统的地址,但是可以提供一个地址。该文件必须包含中心系统的公共 IP 地址。


      # /etc/hosts on mobile
      mobile 10.x.x.xx
      central 192.xxx.xxx.x
      
    2. 设置 ipsecinit.conf 文件。

      移动系统需要按照中心系统的公共 IP 地址来查找中心系统。这些系统必须配置相同的 IPsec 策略。


      # /etc/inet/ipsecinit.conf on mobile
      # Find central
      {raddr 192.xxx.xxx.x} ipsec {encr_algs aes encr_auth_algs sha1 sa shared}
    3. 设置 ike.config 文件。

      标识符不能是 IP 地址。以下标识符对移动系统有效:

      • DN=ldap-directory-name

      • DNS=domain-name-server-address

      • email=email-address

      证书用于验证移动系统。


      ## /etc/inet/ike/ike.config on mobile
      # Global parameters
      #
      # Find CRLs by URI, URL, or LDAP
      # Use CRL from organization's URI
      use_http
      #
      # Use web proxy
      proxy "http://somecache.domain:port/"
      #
      # Use LDAP server
      ldap_server   "ldap-server1.domain.org,ldap2.domain.org:port"
      #
      # List CA-signed certificates
      cert_root    "C=US, O=Domain Org, CN=Domain STATE"
      #
      # Self-signed certificates - trust me and enumerated others
      #cert_trust    "DNS=mobile.domain.org"
      #cert_trust    "DNS=central.domain.org"
      #cert_trust    "DN=CN=Domain Org STATE (CLASS), O=Domain Org
      #cert_trust    "email=user1@domain.org"
      #cert_trust    "email=root@central.domain.org"
      #
      # Rule for off-site systems with root certificate
      {
      	label "Off-site mobile with certificate"
      	local_id_type DNS
      
      # NAT-T can translate local_addr into any public IP address
      # central knows me by my DNS
      
      	local_id "mobile.domain.org"
      	local_addr 0.0.0.0/0
      
      # Find central and trust the root certificate
      	remote_id "central.domain.org"
      	remote_addr 192.xxx.xxx.x
      
      p2_pfs 5
      
      p1_xform
      {auth_method rsa_sig oakley_group 5 encr_alg blowfish auth_alg sha1 }
      }
  4. 将 IKE 配置读入内核。

    • 从 Solaris 10 4/09 发行版开始,请启用 ike 服务。


      # svcadm enable svc:/network/ipsec/ike
      
    • 如果您运行的是 Solaris 10 4/09 发行版之前的发行版,请重新引导系统。


      # init 6
      

      或者,先停止然后再启动 in.iked 守护进程。


示例 23–8 将中心计算机配置为接受来自移动系统的 IPsec 流量

IKE 可以从 NAT 盒 (NAT box) 之后启动协商。但是,IKE 的理想设置是在 NAT 盒 (NAT box) 没有介入的情况下进行的。在以下示例中,根证书已由 CA 颁发。已将 CA 证书放置在移动系统和中心系统上。中心系统接受来自 NAT 盒 (NAT box) 之后的系统的 IPsec 协商。main1 是可以接受来自站点外系统的连接的公司系统。有关如何设置站点外系统,请参见示例 23–9


## /etc/hosts on main1
main1 192.168.0.100

## /etc/inet/ipsecinit.conf on main1
# Keep everyone out unless they use this IPsec policy:
{} ipsec {encr_algs aes encr_auth_algs sha1 sa shared}

## /etc/inet/ike/ike.config on main1
# Global parameters
#
# Find CRLs by URI, URL, or LDAP
# Use CRL from organization's URI
use_http
#
# Use web proxy
proxy "http://cache1.domain.org:8080/"
#
# Use LDAP server
ldap_server   "ldap1.domain.org,ldap2.domain.org:389"
#
# List CA-signed certificate
cert_root "C=US, O=ExamplePKI Inc, OU=PKI-Example, CN=Example PKI"
#
# Rule for off-site systems with root certificate
{
  label "Off-site system with root certificate"
  local_id_type DNS
  local_id "main1.domain.org"
  local_addr 192.168.0.100

# Root certificate ensures trust,
# so allow any remote_id and any remote IP address.
  remote_id ""
  remote_addr 0.0.0.0/0

p2_pfs 5

p1_xform
{auth_method rsa_sig oakley_group 5 encr_alg blowfish auth_alg sha1}
p1_xform
{auth_method rsa_sig oakley_group 5 encr_alg aes auth_alg sha1}
p1_xform
{auth_method rsa_sig oakley_group 5 encr_alg blowfish auth_alg sha1}
p1_xform
{auth_method rsa_sig oakley_group 5 encr_alg aes auth_alg sha1}
}


示例 23–9 使用 IPsec 配置 NAT 之后的系统

在以下示例中,根证书已由 CA 颁发,并放置在移动系统和中心系统上。mobile1 将从本部连接到公司总部。Internet 服务提供商 (Internet service provider, ISP) 网络使用 NAT 盒 (NAT box) ,以允许 ISP 为 mobile1 指定专用地址。然后,NAT 盒 (NAT box) 将专用地址转换为与其他 ISP 网络节点共享的公共 IP 地址。公司总部不在 NAT 之后。有关如何在公司总部设置计算机,请参见示例 23–8


## /etc/hosts on mobile1
mobile1 10.1.3.3
main1 192.168.0.100

## /etc/inet/ipsecinit.conf on mobile1
# Find main1
{raddr 192.168.0.100} ipsec {encr_algs aes encr_auth_algs sha1 sa shared}

## /etc/inet/ike/ike.config on mobile1
# Global parameters
#
# Find CRLs by URI, URL, or LDAP
# Use CRL from organization's URI
use_http
#
# Use web proxy
proxy "http://cache1.domain.org:8080/"
#
# Use LDAP server
ldap_server   "ldap1.domain.org,ldap2.domain.org:389"
#
# List CA-signed certificate
cert_root "C=US, O=ExamplePKI Inc, OU=PKI-Example, CN=Example PKI"
#
# Rule for off-site systems with root certificate
{
  label "Off-site mobile1 with root certificate"
  local_id_type DNS
  local_id "mobile1.domain.org"
  local_addr 0.0.0.0/0

# Find main1 and trust the root certificate
  remote_id "main1.domain.org"
  remote_addr 192.168.0.100

p2_pfs 5

p1_xform
{auth_method rsa_sig oakley_group 5 encr_alg blowfish auth_alg sha1 }
}


示例 23–10 接受来自移动系统的自签名证书

在以下示例中,自签名证书已经颁发,并存放在移动系统和中心系统上。main1 是可以接受来自站点外系统的连接的公司系统。有关如何设置站点外系统,请参见示例 23–11


## /etc/hosts on main1
main1 192.168.0.100

## /etc/inet/ipsecinit.conf on main1
# Keep everyone out unless they use this IPsec policy:
{} ipsec {encr_algs aes encr_auth_algs sha1 sa shared}

## /etc/inet/ike/ike.config on main1
# Global parameters
#
# Self-signed certificates - trust me and enumerated others
cert_trust    "DNS=main1.domain.org"
cert_trust    "jdoe@domain.org"
cert_trust    "user2@domain.org"
cert_trust    "user3@domain.org"
#
# Rule for off-site systems with trusted certificate
{
  label "Off-site systems with trusted certificates"
  local_id_type DNS
  local_id "main1.domain.org"
  local_addr 192.168.0.100

# Trust the self-signed certificates
# so allow any remote_id and any remote IP address.
  remote_id ""
  remote_addr 0.0.0.0/0

p2_pfs 5

p1_xform
{auth_method rsa_sig oakley_group 5 encr_alg blowfish auth_alg sha1 }
}


示例 23–11 使用自签名证书联系中心系统

在以下示例中,mobile1 将从本部连接到公司总部。证书已经颁发,并放置在移动系统和中心系统上。ISP 网络使用 NAT 盒 (NAT box) ,以允许 ISP 为 mobile1 指定专用地址。然后,NAT 盒 (NAT box) 将专用地址转换为与其他 ISP 网络节点共享的公共 IP 地址。公司总部不在 NAT 之后。有关如何在公司总部设置计算机,请参见示例 23–10


## /etc/hosts on mobile1
mobile1 10.1.3.3
main1 192.168.0.100

## /etc/inet/ipsecinit.conf on mobile1
# Find main1
{raddr 192.168.0.100} ipsec {encr_algs aes encr_auth_algs sha1 sa shared}

## /etc/inet/ike/ike.config on mobile1
# Global parameters

# Self-signed certificates - trust me and the central system
cert_trust    "jdoe@domain.org"
cert_trust    "DNS=main1.domain.org"
#
# Rule for off-site systems with trusted certificate
{
  label "Off-site mobile1 with trusted certificate"
  local_id_type email
  local_id "jdoe@domain.org"
  local_addr 0.0.0.0/0

# Find main1 and trust the certificate
  remote_id "main1.domain.org"
  remote_addr 192.168.0.100

p2_pfs 5

p1_xform
{auth_method rsa_sig oakley_group 5 encr_alg blowfish auth_alg sha1 }
}

将 IKE 配置为查找连接的硬件(任务列表)

下表包含将已连接硬件的相关信息通知给 IKE 的过程的链接。只有将已连接硬件的相关信息通知 IKE,IKE 才能使用该硬件。要使用硬件,请按照使用公钥证书配置 IKE中的硬件过程操作。


注 –

您不必通知 IKE 有关片内 (on-chip) 硬件的信息。例如,UltraSPARC® T2 处理器提供加密加速。您不需要配置 IKE 来查找片内加速器。


任务 

说明 

参考 

将 IKE 密钥操作转移到 Sun Crypto Accelerator 1000 板 

将 IKE 链接到 PKCS #11 库。 

如何将 IKE 配置为查找 Sun Crypto Accelerator 1000 板

将 IKE 密钥操作转移到 Sun Crypto Accelerator 4000 板并在该板上存储密钥 

将 IKE 链接到 PKCS #11 库,并列出已连接硬件的名称。 

如何将 IKE 配置为查找 Sun Crypto Accelerator 4000 板

将 IKE 配置为查找连接的硬件

公钥证书也可以存储在连接的硬件上。Sun Crypto Accelerator 1000 板仅提供存储。Sun Crypto Accelerator 4000 和 Sun Crypto Accelerator 6000 板提供存储,并允许将公钥操作从系统转移到板上。

Procedure如何将 IKE 配置为查找 Sun Crypto Accelerator 1000 板

开始之前

以下过程假定 Sun Crypto Accelerator 1000 板已连接到系统。此过程还假定已安装板的软件,而且已配置该软件。有关说明,请参见《Sun Crypto Accelerator 1000 Board Version 2.0 Installation and User’s Guide》

  1. 在系统控制台上,承担主管理员角色或成为超级用户。

    主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”


    注 –

    远程登录会使安全关键型通信易于遭到窃听。即使以某种方式保护远程登录,系统的安全性也会降至远程登录会话的安全性。请使用 ssh 命令进行安全的远程登录。


  2. 检查是否已链接 PKCS #11 库。

    键入以下命令,以确定 PKCS #11 库是否已链接:


    # ikeadm get stats
    Phase 1 SA counts:
    Current:   initiator:          0   responder:          0
    Total:     initiator:          0   responder:          0
    Attempted: initiator:          0   responder:          0
    Failed:    initiator:          0   responder:          0
               initiator fails include 0 time-out(s)
    PKCS#11 library linked in from /usr/lib/libpkcs11.so
    # 
  3. Solaris 10 1/06: 从此发行版开始,可以在 softtoken 密钥库中存储密钥。

    有关 Solaris 加密框架提供的密钥库的信息,请参见 cryptoadm(1M) 手册页。有关使用密钥库的示例,请参见Example 23–12

Procedure如何将 IKE 配置为查找 Sun Crypto Accelerator 4000 板

开始之前

以下过程假定 Sun Crypto Accelerator 4000 板已连接到系统。此过程还假定已安装板的软件,而且已配置该软件。有关说明,请参见《Sun Crypto Accelerator 4000 Board Version 1.1 Installation and User’s Guide》

如果使用的是 Sun Crypto Accelerator 6000 板,请参见《Sun Crypto Accelerator 6000 Board Version 1.1 User’s Guide》获取说明。

  1. 在系统控制台上,承担主管理员角色或成为超级用户。

    主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”


    注 –

    远程登录会使安全关键型通信易于遭到窃听。即使以某种方式保护远程登录,系统的安全性也会降至远程登录会话的安全性。请使用 ssh 命令进行安全的远程登录。


  2. 检查是否已链接 PKCS #11 库。

    IKE 使用该库的例程在 Sun Crypto Accelerator 4000 板上处理密钥生成和密钥存储。键入以下命令,以确定 PKCS #11 库是否已链接:


    $ ikeadm get stats
    …
    PKCS#11 library linked in from /usr/lib/libpkcs11.so
    $

    注 –

    对于 RSA,Sun Crypto Accelerator 4000 板最多支持 2048 位的密钥。对于 DSA,此板最多支持 1024 位的密钥。


  3. 查找已连接的 Sun Crypto Accelerator 4000 板的标记 ID。


    $ ikecert tokens
    Available tokens with library "/usr/lib/libpkcs11.so":
    
    "Sun Metaslot                     "

    该库返回一个包含 32 个字符的标记 ID(也称为 keystore name(密钥库名称))。在此示例中,可以将 Sun Metaslot 标记与 ikecert 命令一起使用来存储和加速 IKE 密钥。

    有关如何使用标记的说明,请参见如何在硬件上生成和存储公钥证书

    结尾空格是由 ikecert 命令自动填充的。


示例 23–12 查找和使用 metaslot 标记

标记可以存储在磁盘上、连接板上或 Solaris 加密框架提供的 softtoken 密钥库中。softtoken 密钥库标记 ID 可能与以下信息类似。


$ ikecert tokens
Available tokens with library "/usr/lib/libpkcs11.so":

"Sun Metaslot                   "

有关如何为 softtoken 密钥库创建口令短语,请参见 pktool(1) 手册页。

如下所示的命令可向 softtoken 密钥库添加证书。Sun.Metaslot.cert 是一个包含 CA 证书的文件。


# ikecert certdb -a -T "Sun Metaslot" < Sun.Metaslot.cert
Enter PIN for PKCS#11 token: Type user:passphrase

更改 IKE 传输参数(任务列表)

下表包含配置 IKE 传输参数的过程的链接。

任务 

说明 

参考 

使密钥协商的效率更高 

更改密钥协商参数。 

如何更改阶段 1 IKE 密钥协商的持续时间

配置密钥协商以允许传输延迟 

增大密钥协商参数。 

示例 23–13

将密钥协商配置为快速成功或快速显示故障 

减小密钥协商参数。 

示例 23–14

更改 IKE 传输参数

当 IKE 协商密钥时,传输速度可能会影响协商的成功。通常,无需更改 IKE 传输参数的缺省值。但是,在通过很脏的线路优化密钥协商时,或者再现问题时,您可能希望更改传输值。

在持续时间较长的情况下,IKE 可以通过不可靠的传输线路协商密钥。可以增大某些参数以使初始尝试成功。如果初始尝试未成功,则可以隔开后续尝试以便为成功提供更多时间。

通过缩短持续时间,可以利用可靠的传输线路。这样,可以更快捷地重试已失败的协商,以便加快协商速度。在诊断问题时,您可能还希望加快协商,以便尽早获得失败的结果。缩短持续时间也使阶段 1 SA 可用于其生命周期。

Procedure如何更改阶段 1 IKE 密钥协商的持续时间

  1. 在系统控制台上,承担主管理员角色或成为超级用户。

    主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”


    注 –

    远程登录会使安全关键型通信易于遭到窃听。即使以某种方式保护远程登录,系统的安全性也会降至远程登录会话的安全性。请使用 ssh 命令进行安全的远程登录。


  2. 在每个系统上更改全局传输参数的缺省值。

    在每个系统上,修改 /etc/inet/ike/config 文件中的阶段 1 持续时间参数。


    ### ike/config file on system
    
    ## Global parameters
    #
    ## Phase 1 transform defaults
    #
    #expire_timer      300
    #retry_limit         5
    #retry_timer_init    0.5 (integer or float)
    #retry_timer_max    30   (integer or float)
    expire_timer

    允许尚未完成的 IKE 阶段 1 协商在删除协商尝试之前延迟的秒数。缺省情况下,尝试延迟 30 秒。

    retry_limit

    异常中止任何 IKE 协商之前的重新传输次数。缺省情况下,IKE 尝试五次。

    retry_timer_init

    重新传输之间的初始时间间隔。在达到 retry_timer_max 值之前,此时间间隔以双倍递增。初始时间间隔为 0.5 秒。

    retry_timer_max

    重新传输之间的最大时间间隔(以秒为单位)。重新传输时间间隔在达到此限制时停止增加。缺省情况下,该限制为 30 秒。

  3. 将已更改的配置读入内核。

    • 从 Solaris 10 4/09 发行版开始,请刷新 ike 服务。


      # svcadm refresh svc:/network/ipsec/ike
      
    • 如果您运行的是 Solaris 10 4/09 发行版之前的发行版,请重新引导系统。


      # init 6
      

      或者,先停止然后再启动 in.iked 守护进程。


示例 23–13 延长 IKE 阶段 1 协商时间

在以下示例中,系统已通过高流量传输线路连接到其 IKE 对等方。原始设置位于文件的注释中。新设置延长了协商时间。


### ike/config file on partym
## Global Parameters
#
## Phase 1 transform defaults
#expire_timer   300
#retry_limit      5
#retry_timer_init 0.5 (integer or float)
#retry_timer_max 30   (integer or float)
#
expire_timer  600
retry_limit  10
retry_timer_init  2.5
retry_timer_max  180


示例 23–14 缩短 IKE 阶段 1 协商时间

在以下示例中,系统已通过小流量的高速线路连接到其 IKE 对等方。原始设置位于文件的注释中。新设置缩短了协商时间。


### ike/config file on partym
## Global Parameters
#
## Phase 1 transform defaults
#expire_timer   300
#retry_limit      5
#retry_timer_init 0.5 (integer or float)
#retry_timer_max 30   (integer or float)
#
expire_timer  120
retry_timer_init  0.20

第 24 章 Internet 密钥交换(参考资料)

本章包含有关 IKE 的以下参考信息:

有关实现 IKE 的说明,请参见第 23 章。有关概述信息,请参见第 22 章

IKE 服务管理工具

svc:/network/ipsec/ike:default 服务—服务管理工具 (service management facility, SMF) 提供 ike 服务以管理 IKE。缺省情况下,此服务处于禁用状态。启用此服务之前,必须创建 IKE 配置文件 /etc/inet/ike/config

以下 ike 服务属性是可配置的:

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

IKE 守护进程

in.iked 守护进程自动管理 Solaris 系统上 IPsec 的加密密钥。该守护进程与运行相同协议的远程系统协商,以便以受保护方式为安全关联 (security association, SA) 提供经过验证的加密材料。必须在计划以安全方式通信的所有系统上运行该守护进程。

缺省情况下,未启用 svc:/network/ipsec/ike:default 服务。配置了 /etc/inet/ike/config 文件并启用 ike 服务后,in.iked 守护进程会在系统引导时运行。

在 IKE 守护进程运行时,系统在阶段 1 交换中向其对等 IKE 实体进行自我验证。与验证方法一样,对等实体也是在 IKE 策略文件中定义的。然后守护进程建立阶段 2 交换的密钥。按照在策略文件中指定的时间间隔,自动刷新 IKE 密钥。in.iked 守护进程通过 PF_KEY 套接字侦听从网络传入的 IKE 请求,并侦听外发通信流量请求。有关更多信息,请参见 pf_key(7P) 手册页。

有两个命令支持 IKE 守护进程。ikeadm 命令可用于查看并临时修改 IKE 策略。要永久修改 IKE 策略,请修改 ike 服务的属性。有关过程,请参见如何查看 IKE 预先共享密钥

使用 ikecert 命令可以查看和管理公钥数据库。此命令管理本地数据库 ike.privatekeyspublickeys。它还管理公钥操作和公钥在硬件上的存储。

IKE 策略文件

IKE 策略的配置文件 /etc/inet/ike/config 管理在 IPsec 策略文件 /etc/inet/ipsecinit.conf 中保护的接口的密钥。IKE 策略文件管理 IKE 和 IPsec SA 的密钥。在阶段 1 交换中,IKE 守护进程本身需要加密材料。

使用 IKE 的密钥管理包括规则和全局参数。IKE 规则标识加密材料保护的系统或网络。该规则还指定验证方法。全局参数包括诸如已连接硬件加速器路径之类的项。有关 IKE 策略文件的示例,请参见使用预先共享的密钥配置 IKE(任务列表)。有关 IKE 策略项的示例和说明,请参见 ike.config(4) 手册页。

IKE 支持的 IPsec SA 根据在 IPsec 策略的配置文件 /etc/inet/ipsecinit.conf 中设置的策略来保护 IP 数据报。IKE 策略文件确定是否在创建 IPsec SA 时使用完全转发保密 (perfect forward security, PFS)。

ike/config 文件可以包括按照以下标准实现的库的路径:RSA Security Inc. 推出的 PKCS #11 加密令牌接口 (Cryptographic Token Interface, Cryptoki)。IKE 使用此 PKCS #11 库访问用于密钥加速和密钥存储的硬件。

ike/config 文件的安全注意事项与 ipsecinit.conf 文件的安全注意事项类似。有关详细信息,请参见ipsecinit.confipsecconf 的安全注意事项

IKE 管理命令

可以使用 ikeadm 命令执行以下操作:

有关此命令的选项的示例和完整说明,请参见 ikeadm(1M) 手册页。

正在运行的 IKE 守护进程的权限级别决定可以查看和修改 IKE 守护进程的哪些方面。可以有三种权限级别。

base 级别

不能查看或修改加密材料。base 级别是缺省权限级别。

modkeys 级别

可以删除、更改和添加预先共享的密钥。

keymat 级别

可以使用 ikeadm 命令查看实际的加密材料。

如果要临时更改权限,可使用 ikeadm 命令。如果要进行永久更改,请更改 ike 服务的 admin_privilege 属性。有关过程,请参见如何管理 IKE 和 IPsec 服务

ikeadm 命令的安全注意事项与 ipseckey 命令的安全注意事项类似。有关详细信息,请参见ipseckey 的安全注意事项

IKE 预先共享的密钥文件

如果手动创建预先共享的密钥,这些密钥将存储在 /etc/inet/secret 目录下的文件中。ike.preshared 文件包含用于 Internet 安全关联和密钥管理协议 (Internet Security Association and Key Management Protocol, ISAKMP) SA 的预先共享的密钥。ipseckeys 文件包含用于 IPsec SA 的预先共享的密钥。按 0600 保护这些文件。按 0700 保护 secret 目录。


注 –

预先共享的密钥不能利用硬件存储。预先共享的密钥是在系统上生成和存储的。


IKE 公钥数据库和命令

ikecert 命令处理本地系统的公钥数据库。在 ike/config 文件需要公钥证书时,可以使用此命令。由于 IKE 使用这些数据库验证阶段 1 交换,因此必须在激活 in.iked 守护进程之前填充这些数据库。以下三个子命令可分别处理三种数据库中的其中一种: certlocalcertdbcertrldb

ikecert 命令还处理密钥存储。密钥可以存储在磁盘上、连接的 Sun Crypto Accelerator 6000 或 Sun Crypto Accelerator 4000 板上或 softtoken 密钥库中。当 Solaris 加密框架中的 metaslot 用于和硬件设备进行通信时,softtoken 密钥库是可用的。ikecert 命令使用 PKCS #11 库定位密钥存储。

有关更多信息,请参见 ikecert(1M) 手册页。有关 metaslot 以及 softtoken 密钥库的信息,请参见 cryptoadm(1M) 手册页。

ikecert tokens 命令

tokens 参数列出可用的标记 ID。使用标记 ID,ikecert certlocalikecert certdb 命令可以生成公钥证书和证书请求。证书和证书请求也可以由加密框架存储在 softtoken 密钥库中或存储在连接的 Sun Crypto Accelerator 6000 或 Sun Crypto Accelerator 4000 板上。ikecert 命令使用 PKCS #11 库定位证书存储。

ikecert certlocal 命令

certlocal 子命令管理私钥数据库。使用此子命令的选项,可以添加、查看和删除私钥。此子命令还用于创建自签名的证书或证书请求。-ks 选项用于创建自签名的证书。-kc 选项用于创建证书请求。密钥存储在系统的 /etc/inet/secret/ike.privatekeys 目录中,或者通过 -T 选项存储在连接的硬件上。

创建私钥时,ikecert certlocal 命令的选项必须在 ike/config 文件中具有相关项。ikecert 选项和 ike/config 项之间的对应关系如下表所示。

表 24–1 ikecert 选项和 ike/config 项之间的对应关系

ikecert 选项

ike/config

说明 

-A subject-alternate-name

cert_trust subject-alternate-name

唯一标识证书的别名。可能的值是 IP 地址、电子邮件地址或域名。 

-D X.509-distinguished-name

X.509-distinguished-name

证书颁发机构的完整名称,包括国家/地区 (C)、组织名称 (ON)、组织单元 (OU) 和公用名称 (CN)。 

-t dsa-sha1

auth_method dss_sig

一种速度比 RSA 稍慢的验证方法。

-t rsa-md5

-t rsa-sha1

auth_method rsa_sig

一种速度比 DSA 稍快的验证方法。

RSA 公钥必须大到足以加密最大的 payload(有效负荷)。通常,标识有效负荷(如 X.509 标识名)是最大的有效负荷。

-t rsa-md5

-t rsa-sha1

auth_method rsa_encrypt

RSA 加密防止窃听者知道 IKE 中的标识,但是要求 IKE 对等方知道彼此的公钥。 

-T

pkcs11_path

PKCS #11 库处理 Sun Crypto Accelerator 1000 板、Sun Crypto Accelerator 6000 板和 Sun Crypto Accelerator 4000 板上的密钥加速。该库还提供处理 Sun Crypto Accelerator 6000 和 Sun Crypto Accelerator 4000 板上密钥存储的标记。

如果使用 ikecert certlocal -kc 命令发出证书请求,则会将该命令的输出发送到 PKI 组织或证书颁发机构 (certificate authority, CA)。如果您的公司运行自己的 PKI,则会将输出发送到 PKI 管理员。然后,PKI 组织、CA 或 PKI 管理员将创建证书。PKI 或 CA 返回给您的证书是 certdb 子命令的输入。PKI 返回给您的证书撤销列表 (certificate revocation list, CRL) 是 certrldb 子命令的输入。

ikecert certdb 命令

certdb 子命令管理公钥数据库。使用此子命令的选项,可以添加、查看以及删除证书和公钥。该命令将 ikecert certlocal -ks 命令在远程系统上生成的证书作为输入接受。有关过程,请参见如何使用自签名的公钥证书配置 IKE。此命令还将您从 PKI 或 CA 接收的证书接受为输入。有关过程,请参见如何使用 CA 签名的证书配置 IKE

证书和公钥存储在系统的 /etc/inet/ike/publickeys 目录中。-T 选项在连接的硬件上存储证书、私钥和公钥。

ikecert certrldb 命令

certrldb 子命令管理证书撤销列表 (certificate revocation list, CRL) 数据库 /etc/inet/ike/crls。CRL 数据库维护公钥的撤销列表。不再有效的证书包含在此列表中。当 PKI 为您提供 CRL 时,您可以使用 ikecert certrldb 命令在 CRL 数据库中安装 CRL。有关过程,请参见如何处理证书撤销列表

/etc/inet/ike/publickeys 目录

/etc/inet/ike/publickeys 目录将公钥/私钥对的公钥部分及其证书包含在文件或插槽中。按 0755 保护该目录。ikecert certdb 命令填充该目录。-T 选项将密钥存储在 Sun Crypto Accelerator 6000 或 Sun Crypto Accelerator 4000 板上,而不是存储在 publickeys 目录中。

插槽以编码形式包含在其他系统上生成的证书的 X.509 标识名。如果使用自签名的证书,则将从远程系统管理员处接收的证书用作该命令的输入。如果使用来自 CA 的证书,则将两个签名证书从 CA 安装到此数据库中。将安装一个基于发送到 CA 的证书签名请求的证书。也安装 CA 的证书。

/etc/inet/secret/ike.privatekeys 目录

/etc/inet/secret/ike.privatekeys 目录包含作为公钥/私钥对一部分的私钥文件,这是 ISAKMP SA 的加密材料。按 0700 保护该目录。ikecert certlocal 命令填充 ike.privatekeys 目录。在安装其对应公钥、自签名的证书或 CA 后,私钥才生效。对应公钥存储在 /etc/inet/ike/publickeys 目录中,或存储在 Sun Crypto Accelerator 6000 或 Sun Crypto Accelerator 4000 板上。

/etc/inet/ike/crls 目录

/etc/inet/ike/crls 目录包含证书撤销列表 (certificate revocation list, CRL) 文件。每个文件都对应于 /etc/inet/ike/publickeys 目录中的公共证书文件。PKI 组织为其证书提供 CRL。可以使用 ikecert certrldb 命令填充数据库。

第 25 章 Oracle Solaris : IP 过滤器(概述)

本章概述了 Oracle Solaris : IP 过滤器。有关 Oracle Solaris : IP 过滤器的任务,请参见第 26 章

本章包含以下信息:

Oracle Solaris : IP 过滤器的新增功能

本节介绍 Oracle Solaris : IP 过滤器的新增功能。

有关新增功能的完整列表以及 Oracle Solaris : 发行版的说明,请参见《Oracle Solaris 10 9/10 新增功能》

包过滤器钩子

从 Solaris 10 7/07 发行版开始在 Oracle Solaris : 中将包过滤器钩子用于包过滤。此功能在系统管理方面具有以下优点:

有关这些钩子进一步的详细信息,请参见包过滤器钩子。有关与包过滤器钩子相关的任务,请参见第 26 章

Oracle Solaris : IP 过滤器的 IPv6 包过滤

Solaris 10 6/06:对于使用 IPv6 配置其全部或部分网络基础结构的系统管理员,Oracle Solaris : IP 过滤器已增强为包括 IPv6 包过滤。IPv6 包过滤可以基于源/目标 IPv6 地址、包含 IPv6 地址的池和 IPv6 扩展头进行过滤。

-6 选项已添加到 ipf 命令和 ipfstat 命令中以用于 IPv6。虽然对于 ipmonippool 命令,命令行界面没有进行更改,但是这些命令也支持 IPv6。ipmon 命令已增强为包含 IPv6 包的日志记录,并且 ippool 命令可支持在池中包括 IPv6 地址。

有关更多信息,请参见“用于 Oracle Solaris : IP 过滤器的 IPv6”。有关与 IPv6 包过滤相关的任务,请参见第 26 章

Oracle Solaris : IP 过滤器简介

Oracle Solaris : IP 过滤器替代了 SunScreen 防火墙,并且用作 Oracle Solaris : 的防火墙软件。与 SunScreen 防火墙一样,Oracle Solaris : IP 过滤器也会提供状态包过滤和网络地址转换 (network address translation, NAT)。Oracle Solaris : IP 过滤器还具有无状态包过滤功能,并且可以创建和管理地址池。

包过滤可提供基本的保护以防止基于网络的攻击。Oracle Solaris : IP 过滤器可以按 IP 地址、端口、协议、网络接口和流量方向来进行过滤。Oracle Solaris : IP 过滤器还可以按单个源 IP 地址、目标 IP 地址、IP 地址范围或地址池进行过滤。

Oracle Solaris : IP 过滤器是从开放源代码的 IP 过滤器软件衍生而来的。要查看开放源代码 IP 过滤器的许可证条款、所有权和版权声明,缺省路径为 /usr/lib/ipf/IPFILTER.LICENCE。如果已将 Oracle Solaris : 安装在其他位置而非缺省位置,请修改所指定的路径,以在安装位置访问该文件。

开放源代码 IP 过滤器的信息源

Darren Reed 编写的开放源代码 IP 过滤器软件的主页可以在 http://coombs.anu.edu.au/~avalon/ip-filter.html 上找到。此站点包括有关开放源代码 IP 过滤器的信息,其中包括指向标题为 "IP Filter Based Firewalls HOWTO"(Brendan Conoboy 和 Erik Fichtner,2002)的教程的链接。此教程提供了在 BSD UNIX 环境中构建防火墙的逐步说明。此教程虽然是针对 BSD UNIX 环境编写的,但也与 Oracle Solaris : IP 过滤器的配置相关。

Oracle Solaris : IP 过滤器包处理

在处理包时,Oracle Solaris : IP 过滤器会执行一系列步骤。下图说明处理包的步骤,以及过滤如何与 TCP/IP 协议栈集成在一起。

图 25–1 包处理顺序

说明与 Oracle Solaris : IP 过滤器包处理关联的步骤顺序。

包处理顺序包括下列步骤:

使用 OpenSolaris IP 过滤器的指导

使用 Oracle Solaris : IP 过滤器配置文件

Oracle Solaris : IP 过滤器可用于提供防火墙服务或网络地址转换 (network address translation, NAT)。可以使用可装入的配置文件实现 Oracle Solaris : IP 过滤器。Oracle Solaris : IP 过滤器包括一个名为 /etc/ipf 的目录。可以创建名为 ipf.confipnat.confippool.conf 的配置文件,并将其存储在 /etc/ipf 目录中。当这些文件驻留在 /etc/ipf 目录中时,在引导过程中会将其自动装入。也可以将配置文件存储在其他位置并将其手动装入。有关配置文件的示例,请参见创建和编辑 Oracle Solaris : IP 过滤器配置文件

使用 Oracle Solaris : IP 过滤器规则集

要管理防火墙,请使用 Oracle Solaris : IP 过滤器指定用于过滤网络通信流量的规则集。可以创建以下类型的规则集:

此外,还可以创建地址池以引用 IP 地址组。然后,可以在规则集中使用这些池。地址池有助于加快规则处理速度,还可使大型地址组更易于管理。

使用 Oracle Solaris : IP 过滤器的包过滤功能

可以使用包过滤规则集来设置包过滤。使用 ipf 命令可以对包过滤规则集进行处理。有关 ipf 命令的更多信息,请参见 ipf(1M) 命令。

可以在命令行上使用 ipf 命令或在包过滤配置文件中创建包过滤规则。如果希望在引导时装入包过滤规则,请创建一个名为 /etc/ipf/ipf.conf 的配置文件,在其中放置包过滤规则。如果不希望在引导时装入包过滤规则,请将 ipf.conf 文件放置在所选的位置中,然后使用 ipf 命令手动激活包过滤。

使用 Oracle Solaris : IP 过滤器可以维护两种包过滤规则集:活动规则集和非活动规则集。大多数情况下,会使用活动规则集。但是,使用 ipf -I 命令可以将命令操作应用于非活动规则列表。除非您选择非活动规则列表,否则 Oracle Solaris : IP 过滤器不会使用该列表。非活动规则列表可提供一个存储规则的位置,而不会影响活动包过滤。

在传递或阻止包之前,Oracle Solaris : IP 过滤器会按照从已配置规则列表开头到其结尾的顺序处理规则列表中的规则。Oracle Solaris : IP 过滤器可维护用于确定它是否将传递包的标志。它会遍历整个规则集,并基于最后一个匹配规则来确定是传递包还是阻止包。

此过程有两种例外情况。第一种例外情况是当包与包含 quick 关键字的规则匹配时。如果规则包括 quick 关键字,则会针对该规则执行操作,并且不会检查后续规则。第二种例外情况是当包与包含 group 关键字的规则匹配时。如果包与组匹配,则仅会检查标记有该组的规则。

配置包过滤规则

使用以下语法可创建包过滤规则:

action [in|out] option keyword, keyword...

  1. 每个规则都以操作开头。如果包与规则匹配,则 Oracle Solaris : IP 过滤器将操作应用于该包。以下列表包括应用于包的常用操作。

    block

    阻止包通过过滤器。

    pass

    允许包通过过滤器。

    log

    记录包但不确定是阻止包还是传递包。使用 ipmon 命令可查看日志。

    count

    将包包括在过滤器统计信息中。使用 ipfstat 命令可查看统计信息。

    skip number

    使过滤器跳过 number 个过滤规则。

    auth

    请求由验证包信息的用户程序执行包验证。该程序会确定是传递包还是阻止包。

    preauth

    请求过滤器查看预先验证的列表以确定如何处理包。

  2. 操作后面的下一个单词必须是 inout。您的选择将确定是将包过滤规则应用于传入包还是应用于传出包。

  3. 接下来,可以从选项列表中进行选择。如果使用多个选项,则这些选项必须采用此处显示的顺序。

    log

    如果规则是最后一个匹配规则,则记录包。使用 ipmon 命令可查看日志。

    quick

    如果存在匹配的包,则执行包含 quick 选项的规则。所有进一步的规则检查都将停止。

    on interface-name

    仅当包移入或移出指定接口时才应用规则。

    dup-to interface-name

    复制包并将 interface-name 上的副本向外发送到随意指定的 IP 地址。

    to interface-name

    将包移动到 interface-name 上的外发队列。

  4. 指定选项后,可以从确定包是否与规则匹配的各关键字中进行选择。必须按此处显示的顺序使用以下关键字。


    注 –

    缺省情况下,所有与配置文件中的任何规则都不匹配的包会通过此过滤器。


    tos

    基于表示为十六进制或十进制整数的服务类型值,对包进行过滤。

    ttl

    基于包的生存时间值与包匹配。在包中存储的生存时间值指明了包在被废弃之前可在网络中存在的时间长度。

    proto

    与特定协议匹配。可以使用在 /etc/protocols 文件中指定的任何协议名称,或者使用十进制数来表示协议。关键字 tcp/udp 可以用于与 TCP 包或 UDP 包匹配。

    from/to/all/ any

    与以下任一项或所有项匹配: 源 IP 地址、目标 IP 地址和端口号。all 关键字用于接受来自所有源和发往所有目标的包。

    with

    与和包关联的指定属性匹配。在关键字前面插入 notno 一词,以便仅当选项不存在时才与包匹配。

    flags

    供 TCP 用来基于已设置的 TCP 标志进行过滤。有关 TCP 标志的更多信息,请参见 ipf(4) 手册页。

    icmp-type

    根据 ICMP 类型进行过滤。仅当 proto 选项设置为 icmp 时才使用此关键字;如果使用 flags 选项,则不使用此关键字。

    keep keep-options

    确定为包保留的信息。可用的 keep-options 包括 state 选项和 frags 选项。state 选项会保留有关会话的信息,并可以保留在 TCP、UDP 和 ICMP 包中。frags 选项可保留有关包片段的信息,并将该信息应用于后续片段。keep-options 允许匹配包通过,而不会查询访问控制列表。

    head number

    为过滤规则创建一个新组,该组由数字 number 表示。

    group number

    将规则添加到编号为 number 的组而不是缺省组。如果未指定其他组,则将所有过滤规则放置在组 0 中。

以下示例说明如何组织包过滤规则语法以创建规则。要阻止从 IP 地址 192.168.0.0/16 传入的通信流量,需要在规则列表中包括以下规则:


block in quick from 192.168.0.0/16 to any

有关用于编写包过滤规则的完整语法和句法,请参见 ipf(4) 手册页。有关与包过滤关联的任务,请参见管理 Oracle Solaris : IP 过滤器的包过滤规则集。有关示例中所示的 IP 地址方案 (192.168.0.0/16) 的说明,请参见第 2 章

使用 Oracle Solaris : IP 过滤器的 NAT 功能

NAT 可设置映射规则,用于将源 IP 地址和目标 IP 地址转换为其他 Internet 或内联网地址。这些规则可修改传入或传出 IP 包的源地址和目标地址并继续发送包。另外,还可以使用 NAT 将流量从一个端口重定向到另一个端口。在对包进行任何修改或重定向的过程中,NAT 将维护包的完整性。

使用 ipnat 命令可对 NAT 规则列表进行处理。有关 ipnat 命令的更多信息,请参见 ipnat(1M) 命令。

可以在命令行上使用 ipnat 命令或在 NAT 配置文件中创建 NAT 规则。NAT 配置规则驻留在 ipnat.conf 文件中。如果希望在引导时装入 NAT 规则,请创建一个名为 /etc/ipf/ipnat.conf 的文件,在其中放置 NAT 规则。如果不希望在引导时装入 NAT 规则,请将 ipnat.conf 文件放置在所选的位置中,然后使用 ipnat 命令手动激活包过滤。

配置 NAT 规则

使用以下语法创建 NAT 规则:

command interface-name parameters

  1. 每个规则都以以下命令之一开头:

    map

    在无法控制的循环过程中将一个 IP 地址或网络映射到另一个 IP 地址或网络。

    rdr

    将包从一个 IP 地址和端口对重定向到另一个 IP 地址和端口对。

    bimap

    在外部 IP 地址和内部 IP 地址之间建立双向 NAT。

    map-block

    建立基于静态 IP 地址的转换。此命令基于将地址强制转换为目标范围的算法。

  2. 此命令后面的下一个单词是接口名称,如 hme0

  3. 接下来,可以从确定 NAT 配置的各种参数中进行选择。其中一些参数包括:

    ipmask

    指定网络掩码。

    dstipmask

    指定 ipmask 要转换成的地址。

    mapport

    指定 tcpudptcp/udp 协议以及端口号的范围。

以下示例说明如何组织 NAT 规则语法以创建 NAT 规则。要重新编写从源地址为 192.168.1.0/24de0 设备上传出的包并在外部将该设备的源地址显示为 10.1.0.0/16,需要在 NAT 规则集中包括以下规则:


map de0 192.168.1.0/24 -> 10.1.0.0/16

有关用于编写 NAT 规则的完整语法和句法,请参见 ipnat(4) 手册页。

使用 Oracle Solaris : IP 过滤器的地址池功能

地址池可建立用于命名一组地址/网络掩码对的单个引用。地址池提供可减少将 IP 地址与规则相匹配的时间的进程,还可使大型地址组更易于管理。

地址池配置规则驻留在 ippool.conf 文件中。如果希望在引导时装入地址池规则,请创建一个名为 /etc/ipf/ippool.conf 的文件,在其中放置地址池规则。如果不希望在引导时装入地址池规则,请将 ippool.conf 文件放置在所选的位置中,然后使用 ippool 命令手动激活包过滤。

配置地址池

使用以下语法可创建地址池:


table role = role-name type = storage-format number = reference-number
table

定义对多个地址的引用。

role

指定 Oracle Solaris : IP 过滤器中池的角色。此时,可以引用的唯一角色是 ipf

type

指定池的存储格式。

number

指定过滤规则所用的引用号。

例如,要将地址组 10.1.1.1 和 10.1.1.2 以及网络 192.16.1.0 作为池编号 13 引用,需要在地址池配置文件中包括以下规则:

table role = ipf type = tree number = 13 
{ 10.1.1.1/32, 10.1.1.2/32, 192.168.1.0/24 };

然后,要在过滤规则中引用池编号 13,需要构建与以下示例类似的规则:


pass in from pool/13 to any

请注意,必须在装入包含对池的引用的规则文件之前装入池文件。如果不这样做,则池是未定义的,如以下输出所示:


# ipfstat -io
empty list for ipfilter(out)
block in from pool/13(!) to any

即使稍后添加池,所添加的池也不会更新内核规则集。另外,还需要重新装入引用池的规则文件。

有关用于编写包过滤规则的完整语法和句法,请参见 ippool(4) 手册页。

包过滤器钩子

从 Solaris 10 7/07 发行版开始,包过滤器钩子替代 pfil 模块以启用 Oracle Solaris : IP 过滤器。在早期的 Oracle Solaris : 发行版中,要求配置 pfil 模块作为设置 Oracle Solaris : IP 过滤器的附加步骤。这一额外的配置要求增加了出现错误进而可能导致 Oracle Solaris : IP 过滤器无法正常工作的风险。此外,在 IP 和设备驱动程序之间插入 pfil STREAMS 模块会导致性能下降。最后,pfil 模块无法在区域之间执行包拦截。

包过滤器钩子的使用简化了启用 Oracle Solaris : IP 过滤器的过程。通过这些钩子,Oracle Solaris : IP 过滤器使用 pre-routing(输入)和 post-routing(输出)过滤器阀控制进出 Oracle Solaris : 系统的包流。

有了包过滤器钩子,就不必使用 pfil 模块。因此,与该模块相关的下列组件也已被删除。

有关与启用 Oracle Solaris : IP 过滤器相关的任务,请参见第 26 章

Oracle Solaris : IP 过滤器和 pfil STREAMS 模块


注 –

pfil 模块只能在以下 Oracle Solaris 10 发行版中与 Oracle Solaris : IP 过滤器一起使用:

从 Solaris 10 7/07 发行版开始,pfil 模块已被包过滤器钩子所替代,不再与 Oracle Solaris : IP 过滤器一起使用。


pfil STREAMS 模块是启用 Oracle Solaris : IP 过滤器所必需的。但是,Oracle Solaris : IP 过滤器不提供将模块推送到每个接口上的自动机制。相反,pfil STREAMS 模块由 SMF 服务 svc:/network/pfil 进行管理。要在网络接口上激活过滤,需要首先配置 pfil.ap 文件。然后激活 svc:/network/pfil 服务,以便为网络接口提供 pfil STREAMS 模块。要使 STREAMS 模块生效,必须重新引导系统,或者必须取消检测要过滤的每个网络接口,然后重新检测。要激活 IPv6 包过滤功能,需要检测接口的 inet6 版本。

如果未找到网络接口的 pfil 模块,请将 SMF 服务置于维护状态。导致此情况的最常见原因是错误编辑了 /etc/ipf/pfil.ap 文件。如果将服务置于维护模式,则在过滤日志文件中会记录事件。

有关与激活 Oracle Solaris : IP 过滤器关联的任务,请参见配置 Oracle Solaris : IP 过滤器

用于 Oracle Solaris : IP 过滤器的 IPv6

从 Solaris 10 6/06 发行版开始,Oracle Solaris : IP 过滤器可以支持 IPv6。IPv6 包过滤可以基于源/目标 IPv6 地址、包含 IPv6 地址的池和 IPv6 扩展头进行过滤。

IPv6 在许多方面都与 IPv4 类似。但是,这两个版本的 IP 的包头和包大小是不同的,这是 IP 过滤器的重要注意事项。称为 jumbogram 的 IPv6 包包含长度超过 65,535 字节的数据报。Oracle Solaris : IP 过滤器不支持 IPv6 jumbogram。要了解有关其他 IPv6 功能的更多信息,请参见IPv6 的主要特征


注 –

有关 jumbogram 的更多信息,请参阅 Internet 工程任务组 (Internet Engineering Task Force, IETF) 的文档 "IPv6 Jumbograms" (RFC 2675)。[http://www.ietf.org/rfc/rfc2675.txt]


与 IPv6 关联的 IP 过滤器任务和与 IPv4 关联的任务差异不大。最明显的差异是,前者将 -6 选项与某些命令一起使用。ipf 命令和 ipfstat 命令都包括用于 IPv6 包过滤的 -6 选项。使用带有 -6 选项的 ipf 命令可以装入和清除 IPv6 包过滤规则。要显示 IPv6 统计信息,请使用带有 -6 选项的 ipfstat 命令。尽管没有用于 IPv6 支持的关联选项,ipmonippool 命令仍支持 IPv6。ipmon 命令已增强为包含 IPv6 包的日志记录。ippool 命令支持具有 IPv6 地址的包。可以创建仅包含 IPv4 地址或 IPv6 地址的池,或创建在同一池内既包含 IPv4 地址又包含 IPv6 地址的池。

可以使用 ipf6.conf 文件创建用于 IPv6 的包过滤规则集。缺省情况下,ipf6.conf 配置文件包括在 /etc/ipf 目录中。与其他过滤配置文件一样,ipf6.conf 文件存储在 /etc/ipf 目录中时也会在引导过程中自动装入。您也可以在其他位置创建和存储 IPv6 配置文件,然后将其手动装入。


注 –

网络地址转换 (Network Address Translation, NAT) 不支持 IPv6。


设置用于 IPv6 的包过滤规则后,请通过检测接口的 inet6 版本激活 IPv6 包过滤功能。

有关 IPv6 的更多信息,请参见第 3 章。有关与 Oracle Solaris : IP 过滤器相关的任务,请参见第 26 章

Oracle Solaris : IP 过滤器手册页

下表包括与 Oracle Solaris : IP 过滤器相关的手册页文档。

手册页 

说明 

ipf(1M)

使用 ipf 命令可以完成以下任务:

  • 处理包过滤规则集。

  • 禁用和启用过滤。

  • 重置统计信息,并使内核中的接口列表与当前接口状态列表重新同步。

ipf(4)

包含用于创建 Oracle Solaris : IP 过滤器包过滤规则的语法和句法。 

ipfilter(5)

提供开放源代码 IP 过滤器许可信息。 

ipfs(1M)

使用 ipfs 命令保存 NAT 信息和状态表信息并在重新引导后将其恢复。

ipfstat(1M)

使用 ipfstat 命令检索和显示有关包处理的统计信息。

ipmon(1M)

使用 ipmon 命令打开日志设备并查看包过滤和 NAT 的记录包。

ipnat(1M)

使用 ipnat 命令可以完成以下任务:

  • 处理 NAT 规则。

  • 检索和显示 NAT 统计信息。

ipnat(4)

包含用于创建 NAT 规则的语法和句法。 

ippool(1M)

使用 ippool 命令创建和管理地址池。

ippool(4)

包含用于创建 Oracle Solaris : IP 过滤器地址池的语法和句法。 

ndd(1M)

显示 pfil STREAMS 模块的当前过滤参数和可调参数的当前值。

第 26 章 yaraOracle Solaris : IP 过滤器(任务)

本章提供有关 Solaris IP 过滤器任务的逐步说明。有关 Oracle Solaris : IP 过滤器的概述信息,请参见第 25 章

本章包含以下信息:

配置 Oracle Solaris : IP 过滤器

以下任务列表提供了与配置 Oracle Solaris : IP 过滤器关联的过程。

表 26–1 配置 Oracle Solaris : IP 过滤器(任务列表)

任务 

说明 

参考 

最初启用 Oracle Solaris : IP 过滤器。 

缺省情况下不启用 Oracle Solaris : IP 过滤器。必须手动启用它,或者使用 /etc/ipf/ 目录中的配置文件并重新引导系统。从 Solaris 10 7/07 发行版开始,包过滤器钩子替代 pfil 模块以启用 Oracle Solaris : IP 过滤器。

如何启用 Oracle Solaris : IP 过滤器

重新启用 Oracle Solaris : IP 过滤器 

如果 Oracle Solaris : IP 过滤器被取消激活或禁用,则可以通过重新引导系统或通过使用 ipf 命令重新启用 Oracle Solaris : IP 过滤器。

如何重新启用 Oracle Solaris : IP 过滤器

启用回送过滤 

作为一个选项,您可以启用回送过滤,例如,过滤区域之间的流量。 

如何启用回送过滤

Procedure如何启用 Oracle Solaris : IP 过滤器

使用此过程可在运行 Solaris 10 7/07 OS 或更高版本的系统上启用 Oracle Solaris : IP 过滤器。如果系统运行的 Oracle Solaris 10 发行版早于 Solaris 10 7/07 OS 并且要启用 Oracle Solaris : IP 过滤器,请参见使用 pfil 模块

  1. 承担拥有 IP 过滤器管理权限配置文件的角色,或者成为超级用户。

    可以将 IP 过滤器管理权限配置文件指定给您创建的角色。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 创建包过滤规则集。

    包过滤规则集包含由 Oracle Solaris : IP 过滤器使用的包过滤规则。如果希望在引导时装入包过滤规则,请编辑 /etc/ipf/ipf.conf 文件以实现 IPv4 包过滤。对于 IPv6 包过滤规则,请使用 /etc/ipf/ipf6.conf 文件。如果不希望在引导时装入包过滤规则,请将这些规则放置在所选的文件中,然后手动激活包过滤。有关包过滤的信息,请参见使用 Oracle Solaris : IP 过滤器的包过滤功能。有关使用配置文件的信息,请参见创建和编辑 Oracle Solaris : IP 过滤器配置文件

  3. (可选)创建网络地址转换 (network address translation, NAT) 配置文件。


    注 –

    网络地址转换 (Network Address Translation, NAT) 不支持 IPv6。


    如果要使用网络地址转换,请创建 ipnat.conf 文件。如果希望在引导时装入 NAT 规则,请创建一个名为 /etc/ipf/ipnat.conf 的文件,在其中放置 NAT 规则。如果不希望在引导时装入 NAT 规则,请将 ipnat.conf 文件放置在所选的位置中,然后手动激活 NAT 规则。

    有关 NAT 的更多信息,请参见使用 Oracle Solaris : IP 过滤器的 NAT 功能

  4. (可选)创建地址池配置文件。

    如果要将一组地址作为单个地址池引用,请创建 ipool.conf 文件。如果希望在引导时装入地址池配置文件,请创建一个名为 /etc/ipf/ippool.conf 的文件,在其中放置地址池。如果不希望在引导时装入地址池配置文件,请将 ippool.conf 文件放置在所选的位置中,然后手动激活这些规则。

    一个地址池可以只包含 IPv4 地址和 IPv6 地址中的一种,也可以同时包含这两种地址。

    有关地址池的更多信息,请参见使用 Oracle Solaris : IP 过滤器的地址池功能

  5. (可选)启用回送流量的过滤。

    如果打算过滤系统中配置的区域之间的流量,则必须启用回送过滤。请参见如何启用回送过滤。还要确保定义了应用于这些区域的相应规则集。

  6. 激活 Oracle Solaris : IP 过滤器。


    # svcadm enable network/ipfilter
    

Procedure如何重新启用 Oracle Solaris : IP 过滤器

在暂时禁用包过滤后,可以重新启用它。

  1. 承担拥有 IP 过滤器管理权限配置文件的角色,或者成为超级用户。

    可以将 IP 过滤器管理权限配置文件指定给您创建的角色。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 使用以下方法之一启用 Oracle Solaris : IP 过滤器并激活过滤:

    • 重新引导计算机。


      # reboot
      

      注 –

      若启用了 IP 过滤器,则重新引导后会装入以下文件(如果它们存在):/etc/ipf/ipf.conf 文件、 /etc/ipf/ipf6.conf 文件(使用 IPv6 时)或 /etc/ipf/ipnat.conf


    • 执行以下系列命令以启用 Oracle Solaris : IP 过滤器并激活过滤:

      1. 启用 Oracle Solaris : IP 过滤器。


        # ipf -E
        
      2. 激活包过滤。


        # ipf -f filename
        
      3. (可选)激活 NAT。


        # ipnat -f filename
        

        注 –

        网络地址转换 (Network Address Translation, NAT) 不支持 IPv6。


Procedure如何启用回送过滤


注 –

仅当系统运行 Solaris 10 7/07 发行版或更高版本时,才能过滤回送流量。在以前的 Oracle Solaris : 10 发行版中,不支持回送过滤。


  1. 承担拥有 IP 过滤器管理权限配置文件的角色,或者成为超级用户。

    可以将 IP 过滤器管理权限配置文件指定给您创建的角色。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 如果 Oracle Solaris : IP 过滤器正在运行,则将其停止。


    # svcadm disable network/ipfilter
    
  3. 通过在文件开头添加下面的行来编辑 /etc/ipf.conf/etc/ipf6.conf 文件:


    set intercept_loopback true;

    此行必须位于文件中定义的所有 IP 过滤器规则之前。不过,可以在此行之前插入注释,与以下示例类似:


    # 
    # Enable loopback filtering to filter between zones 
    # 
    set intercept_loopback true; 
    # 
    # Define policy 
    # 
    block in all 
    block out all 
    <other rules>
    ...
  4. 启动 Oracle Solaris : IP 过滤器。


    # svcadm enable network/ipfilter
    
  5. 要验证回送过滤的状态,请使用以下命令:


    # ipf —T ipf_loopback
    ipf_loopback    min 0   max 0x1 current 1
    #

    如果已禁用回送过滤,该命令将生成以下输出:


    ipf_loopback    min 0   max 0x1 current 0

取消激活和禁用 Oracle Solaris : IP 过滤器

在以下情况下,可能希望取消激活或禁用包过滤和 NAT:

以下任务列表提供了与取消激活或禁用 Oracle Solaris : IP 过滤器功能关联的过程。

表 26–2 取消激活和禁用 Oracle Solaris : IP 过滤器(任务列表)

任务 

说明 

参考 

取消激活包过滤。 

使用 ipf 命令取消激活包过滤。

如何取消激活包过滤

取消激活 NAT。 

使用 ipnat 命令取消激活 NAT。

如何取消激活 NAT

禁用包过滤和 NAT。 

使用 ipf 命令禁用包过滤和 NAT。

如何禁用包过滤

Procedure如何取消激活包过滤

以下过程通过从活动的过滤规则集中清除包过滤规则,取消激活 Oracle Solaris : IP 过滤器包过滤。该过程不禁用 Oracle Solaris : IP 过滤器。通过将规则添加到规则集,可以重新激活 Oracle Solaris : IP 过滤器。

  1. 承担拥有 IP 过滤器管理权限配置文件的角色,或者成为超级用户。

    可以将 IP 过滤器管理权限配置文件指定给您创建的角色。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 使用以下方法之一取消激活 Oracle Solaris : IP 过滤器规则:

    • 从内核中删除活动规则集。


      # ipf -Fa
      

      此命令取消激活所有的包过滤规则。

    • 删除传入包的过滤规则。


      # ipf -Fi
      

      此命令取消激活传入包的包过滤规则。

    • 删除传出包的过滤规则。


      # ipf -Fo
      

      此命令取消激活传出包的包过滤规则。

Procedure如何取消激活 NAT

以下过程通过从活动的 NAT 规则集中清除 NAT 规则,取消激活 Oracle Solaris : IP 过滤器 NAT 规则。该过程不禁用 Oracle Solaris : IP 过滤器。通过将规则添加到规则集,可以重新激活 Oracle Solaris : IP 过滤器。

  1. 承担拥有 IP 过滤器管理权限配置文件的角色,或者成为超级用户。

    可以将 IP 过滤器管理权限配置文件指定给您创建的角色。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 从内核中删除 NAT。


    # ipnat -FC
    

    -C 选项删除当前 NAT 规则列表中的所有项。-F 选项删除当前 NAT 转换表(它显示当前活动的 NAT 映射)中的所有活动项。

Procedure如何禁用包过滤

在执行此过程时,包过滤和 NAT 都会从内核中删除。如果使用此过程,则必须重新启用 Solaris IP 过滤器以便重新激活包过滤和 NAT。有关更多信息,请参见如何重新启用 Oracle Solaris : IP 过滤器

  1. 承担拥有 IP 过滤器管理权限配置文件的角色,或者成为超级用户。

    可以将 IP 过滤器管理权限配置文件指定给您创建的角色。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 禁用包过滤,并允许所有包传入网络。


    # ipf –D
    

    注 –

    ipf -D 命令从规则集中清除规则。重新启用过滤时,必须将规则添加到规则集。


使用 pfil 模块

本节介绍如何使用 pfil STREAMS 模块激活或取消激活 Oracle Solaris : IP 过滤器以及如何查看 pfil 统计信息。该过程只适用于运行下列 Oracle Solaris 10 发行版之一的系统:

以下任务列表提供了与配置 pfil 模块关联的过程。

表 26–3 使用 pfil 模块(任务列表)

任务 

说明 

参考 

启用 Oracle Solaris : IP 过滤器 

缺省情况下不启用 Oracle Solaris : IP 过滤器。必须手动启用它,或者使用 /etc/ipf/ 目录中的配置文件并重新引导系统。

如何在以前的 Oracle Solaris 10 发行版中启用 Oracle Solaris : IP 过滤器

为包过滤激活 NIC 

配置 pfil 模块,以在 NIC 上激活包过滤

如何为包过滤激活 NIC

在 NIC 上取消激活 Oracle Solaris : IP 过滤器 

删除 NIC 并允许所有包通过 NIC。 

如何在 NIC 上取消激活 Oracle Solaris : IP 过滤器

查看 pfil 统计信息。

使用 ndd 命令查看 pfil 模块的统计信息,以帮助对 Oracle Solaris : IP 过滤器进行故障排除。

如何查看 Oracle Solaris : IP 过滤器的 pfil 统计信息

Procedure如何在以前的 Oracle Solaris 10 发行版中启用 Oracle Solaris : IP 过滤器

Oracle Solaris : IP 过滤器与 Oracle Solaris : 一同安装。但是,缺省情况下不启用包过滤。使用以下过程可以激活 Oracle Solaris : IP 过滤器。


注 –

如果您的系统运行的是 Solaris 10 7/07 发行版或更高版本,请执行如何启用 Oracle Solaris : IP 过滤器过程(使用包过滤器钩子)。


  1. 承担拥有 IP 过滤器管理权限配置文件的角色,或者成为超级用户。

    可以将 IP 过滤器管理权限配置文件指定给您创建的角色。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 启动所选的文件编辑器,然后编辑 /etc/ipf/pfil.ap 文件。

    此文件包含主机上网络接口卡 (network interface card, NIC) 的名称。缺省情况下,这些名称已被注释掉。对传输要过滤的网络通信流量的设备名称取消注释。如果未列出您系统的 NIC 名称,则添加一行以指定 NIC。


    # vi /etc/ipf/pfil.ap
    # IP Filter pfil autopush setup
    #
    # See autopush(1M) manpage for more information.
    #
    # Format of the entries in this file is:
    #
    #major  minor lastminor modules
    
    #le     -1      0       pfil
    #qe     -1      0       pfil
    hme     -1      0       pfil (Device has been uncommented for filtering)
    #qfe    -1      0       pfil
    #eri    -1      0       pfil
    #ce     -1      0       pfil
    #bge    -1      0       pfil
    #be     -1      0       pfil
    #vge    -1      0       pfil
    #ge     -1      0       pfil
    #nf     -1      0       pfil
    #fa     -1      0       pfil
    #ci     -1      0       pfil
    #el     -1      0       pfil
    #ipdptp -1      0       pfil
    #lane   -1      0       pfil
    #dmfe   -1      0       pfil
  3. 通过重新启动 network/pfil 服务实例,激活对 /etc/ipf/pfil.ap 文件所做的更改。


    # svcadm restart network/pfil
    
  4. 创建包过滤规则集。

    包过滤规则集包含由 Oracle Solaris : IP 过滤器使用的包过滤规则。如果希望在引导时装入包过滤规则,请编辑 /etc/ipf/ipf.conf 文件以实现 IPv4 包过滤。对于 IPv6 包过滤规则,请使用 /etc/ipf/ipf6.conf 文件。如果不希望在引导时装入包过滤规则,请将这些规则放置在所选的文件中,然后手动激活包过滤。有关包过滤的信息,请参见使用 Oracle Solaris : IP 过滤器的包过滤功能。有关使用配置文件的信息,请参见创建和编辑 Oracle Solaris : IP 过滤器配置文件

  5. (可选)创建网络地址转换 (network address translation, NAT) 配置文件。


    注 –

    网络地址转换 (Network Address Translation, NAT) 不支持 IPv6。


    如果要使用网络地址转换,请创建 ipnat.conf 文件。如果希望在引导时装入 NAT 规则,请创建一个名为 /etc/ipf/ipnat.conf 的文件,在其中放置 NAT 规则。如果不希望在引导时装入 NAT 规则,请将 ipnat.conf 文件放置在所选的位置中,然后手动激活 NAT 规则。

    有关 NAT 的更多信息,请参见使用 Oracle Solaris : IP 过滤器的 NAT 功能

  6. (可选)创建地址池配置文件。

    如果要将一组地址作为单个地址池引用,请创建 ipool.conf 文件。如果希望在引导时装入地址池配置文件,请创建一个名为 /etc/ipf/ippool.conf 的文件,在其中放置地址池。如果不希望在引导时装入地址池配置文件,请将 ippool.conf 文件放置在所选的位置中,然后手动激活这些规则。

    一个地址池可以只包含 IPv4 地址和 IPv6 地址中的一种,也可以同时包含这两种地址。

    有关地址池的更多信息,请参见使用 Oracle Solaris : IP 过滤器的地址池功能

  7. 使用以下方法之一激活 Oracle Solaris : IP 过滤器:

    • 启用 IP 过滤器并重新引导计算机。


      # svcadm enable network/ipfilter
      # reboot
      

      注 –

      如果无法在 NIC 上安全地使用 ifconfig unplumbifconfig plumb 命令,则需要重新引导。


    • 通过使用 ifconfig unplumbifconfig plumb 命令启用 NIC。然后启用 IP 过滤器。必须检测接口的 inet6 版本,以便实现 IPv6 包过滤。


      # ifconfig hme0 unplumb
      # ifconfig hme0 plumb 192.168.1.20 netmask 255.255.255.0 up
      # ifconfig hme0 inte6 unplumb
      # ifconfig hme0 inet6 plumb fec3:f849::1/96 up
      # svcadm enable network/ipfilter
      

      有关 ifconfig 命令的更多信息,请参见 ifconfig(1M) 手册页。

Procedure如何为包过滤激活 NIC

如果 /etc/ipf/ipf.conf 文件(或使用 IPv6 时的 /etc/ipf/ipf6.conf 文件)存在,则在引导时启用 Oracle Solaris : IP 过滤器。如果需要在启用 Oracle Solaris : IP 过滤器后在 NIC 上启用过滤,请使用以下过程。

  1. 承担拥有 IP 过滤器管理权限配置文件的角色,或者成为超级用户。

    可以将 IP 过滤器管理权限配置文件指定给您创建的角色。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 启动所选的文件编辑器,然后编辑 /etc/ipf/pfil.ap 文件。

    此文件包含主机上 NIC 的名称。缺省情况下,这些名称已被注释掉。对传输要过滤的网络通信流量的设备名称取消注释。如果未列出您系统的 NIC 名称,则添加一行以指定 NIC。


    # vi /etc/ipf/pfil.ap
    # IP Filter pfil autopush setup
    #
    # See autopush(1M) manpage for more information.
    #
    # Format of the entries in this file is:
    #
    #major  minor lastminor modules
    
    #le     -1      0       pfil
    #qe     -1      0       pfil
    hme     -1      0       pfil (Device has been uncommented for filtering)
    #qfe    -1      0       pfil
    #eri    -1      0       pfil
    #ce     -1      0       pfil
    #bge    -1      0       pfil
    #be     -1      0       pfil
    #vge    -1      0       pfil
    #ge     -1      0       pfil
    #nf     -1      0       pfil
    #fa     -1      0       pfil
    #ci     -1      0       pfil
    #el     -1      0       pfil
    #ipdptp -1      0       pfil
    #lane   -1      0       pfil
    #dmfe   -1      0       pfil
  3. 通过重新启动 network/pfil 服务实例,激活对 /etc/ipf/pfil.ap 文件所做的更改。


    # svcadm restart network/pfil
    
  4. 使用以下方法之一启用 NIC:

    • 重新引导计算机。


      # reboot
      

      注 –

      如果无法在 NIC 上安全地使用 ifconfig unplumbifconfig plumb 命令,则需要重新引导。


    • ifconfig 命令与 unplumbplumb 选项一起使用,以启用要过滤的 NIC。必须检测每个接口的 inet6 版本,以便实现 IPv6 包过滤。


      # ifconfig hme0 unplumb
      # ifconfig hme0 plumb 192.168.1.20  netmask 255.255.255.0  up
      # ifconfig hme0 inet6 unplumb
      # ifconfig hme0 inet6 plumb fec3:f840::1/96 up
      

      有关 ifconfig 命令的更多信息,请参见 ifconfig(1M) 手册页。

Procedure如何在 NIC 上取消激活 Oracle Solaris : IP 过滤器

如果需要在 NIC 上停止过滤包,请使用以下过程。

  1. 承担拥有 IP 过滤器管理权限配置文件的角色,或者成为超级用户。

    可以将 IP 过滤器管理权限配置文件指定给您创建的角色。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 启动所选的文件编辑器,然后编辑 /etc/ipf/pfil.ap 文件。

    此文件包含主机上 NIC 的名称。已经用于过滤网络通信流量的 NIC 被取消注释。注释掉不再希望用来过滤网络通信流量的设备名称。


    # vi /etc/ipf/pfil.ap
    # IP Filter pfil autopush setup
    #
    # See autopush(1M) manpage for more information.
    #
    # Format of the entries in this file is:
    #
    #major  minor lastminor modules
    
    #le     -1      0       pfil
    #qe     -1      0       pfil
    #hme    -1      0       pfil (Commented-out device no longer filters network traffic)
    #qfe    -1      0       pfil
    #eri    -1      0       pfil
    #ce     -1      0       pfil
    #bge    -1      0       pfil
    #be     -1      0       pfil
    #vge    -1      0       pfil
    #ge     -1      0       pfil
    #nf     -1      0       pfil
    #fa     -1      0       pfil
    #ci     -1      0       pfil
    #el     -1      0       pfil
    #ipdptp -1      0       pfil
    #lane   -1      0       pfil
    #dmfe   -1      0       pfil
  3. 使用以下方法之一取消激活 NIC:

    • 重新引导计算机。


      # reboot
      

      注 –

      如果无法在 NIC 上安全地使用 ifconfig unplumbifconfig plumb 命令,则需要重新引导。


    • ifconfig 命令与 unplumbplumb 选项一起使用,以取消激活 NIC。必须取消检测每个接口的 inet6 版本,以便取消激活 IPv6 包过滤。请执行以下步骤。系统中的样例设备为 hme

      1. 标识取消激活的设备的主要编号。


        # grep hme /etc/name_to_major
        hme 7
      2. 显示 hme0 的当前 autopush 配置。


        # autopush -g -M 7 -m 0
           Major     Minor     Lastminor       Modules
               7      ALL          -           pfil
      3. 删除 autopush 配置。


        # autopush -r -M 7 -m 0
        
      4. 打开设备并为设备指定 IP 地址。


        # ifconfig hme0 unplumb
        # ifconfig hme0 plumb 192.168.1.20  netmask 255.255.255.0  up
        # ifconfig hme0 inet6 unplumb
        # ifconfig hme0 inet6 plumb fec3:f840::1/96 up
        

        有关 ifconfig 命令的更多信息,请参见 ifconfig(1M) 手册页。

Procedure如何查看 Oracle Solaris : IP 过滤器的 pfil 统计信息

在对 Oracle Solaris : IP 过滤器进行故障排除时,可以查看 pfil 统计信息。

  1. 承担拥有 IP 过滤器管理权限配置文件的角色,或者成为超级用户。

    可以将 IP 过滤器管理权限配置文件指定给您创建的角色。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 查看 pfil 统计信息。


    # ndd -get /dev/pfil qif_status
    

示例 26–1 查看 Oracle Solaris : IP 过滤器的 pfil 统计信息

以下示例显示如何查看 pfil 统计信息。


# ndd -get /dev/pfil qif_status
ifname ill q OTHERQ num sap hl nr nw bad copy copyfail drop notip nodata
   notdata
QIF6 0 300011247b8 300011248b0 6 806 0 4 9 0 0 0 0 0 0 0
dmfe1 3000200a018 30002162a50 30002162b48 5 800 14 171 13681 0 0 0 0 0 0 0

使用 Oracle Solaris : IP 过滤器规则集

以下任务列表提供了与 Oracle Solaris : IP 过滤器规则集相关的过程。

表 26–4 使用 Oracle Solaris : IP 过滤器规则集(任务列表)

任务 

说明 

参考 

管理、查看和修改 Oracle Solaris : IP 过滤器包过滤规则集。 

 

管理 Oracle Solaris : IP 过滤器的包过滤规则集

 

查看活动的包过滤规则集。 

如何查看活动的包过滤规则集

 

查看非活动的包过滤规则集。 

如何查看非活动的包过滤规则集

 

激活不同的活动规则集。 

如何激活不同的或更新的包过滤规则集

 

删除规则集。 

如何删除包过滤规则集

 

将规则添加到规则集。 

如何将规则附加到活动的包过滤规则集

如何将规则附加到非活动的包过滤规则集

 

在活动和非活动的规则集之间切换。 

如何在活动和非活动的包过滤规则集之间切换

 

从内核中删除非活动规则集。 

如何从内核中删除非活动的包过滤规则集

管理、查看和修改 Oracle Solaris : IP 过滤器 NAT 规则。 

 

管理 Oracle Solaris : IP 过滤器的 NAT 规则

 

查看活动的 NAT 规则。 

如何查看活动的 NAT 规则

 

删除 NAT 规则。 

如何删除 NAT 规则

 

将其他规则添加到 NAT 规则。 

如何将规则附加到 NAT 规则

管理、查看和修改 Oracle Solaris : IP 过滤器地址池。 

 

管理 Oracle Solaris : IP 过滤器的地址池

 

查看活动的地址池。 

如何查看活动地址池

 

删除地址池。 

如何删除地址池

 

将其他规则添加到地址池。 

如何将规则附加到地址池

管理 Oracle Solaris : IP 过滤器的包过滤规则集

启用 Solaris IP 过滤器后,活动和非活动的包过滤规则集都可以驻留在内核中。活动规则集确定正在对传入包和传出包执行的过滤。非活动规则集也存储规则,但不会使用这些规则,除非使非活动规则集成为活动规则集。可以管理、查看和修改活动和非活动的包过滤规则集。

Procedure如何查看活动的包过滤规则集

  1. 承担拥有 IP 过滤器管理权限配置文件的角色,或者成为超级用户。

    可以将 IP 过滤器管理权限配置文件指定给您创建的角色。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 查看装入到内核中的活动包过滤规则集。


    # ipfstat -io
    

示例 26–2 查看活动的包过滤规则集

以下示例显示装入到内核中的活动包过滤规则集的输出。


# ipfstat -io
empty list for ipfilter(out)
pass in quick on dmfe1 from 192.168.1.0/24 to any
pass in all
block in on dmfe1 from 192.168.1.10/32 to any

Procedure如何查看非活动的包过滤规则集

  1. 承担拥有 IP 过滤器管理权限配置文件的角色,或者成为超级用户。

    可以将 IP 过滤器管理权限配置文件指定给您创建的角色。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 查看非活动的包过滤规则集。


    # ipfstat -I -io
    

示例 26–3 查看非活动的包过滤规则集

以下示例显示非活动的包过滤规则集的输出。


# ipfstat -I -io
pass out quick on dmfe1 all
pass in quick on dmfe1 all

Procedure如何激活不同的或更新的包过滤规则集

如果要执行以下任一任务,请使用以下过程:

  1. 承担拥有 IP 过滤器管理权限配置文件的角色,或者成为超级用户。

    可以将 IP 过滤器管理权限配置文件指定给您创建的角色。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 选择以下步骤之一:

    • 如果要激活完全不同的规则集,请在您选择的单独文件中创建一个新规则集。

    • 通过编辑包含该规则集的配置文件来更新当前规则集。

  3. 删除当前的规则集,并装入新规则集。


    # ipf -Fa -f filename
    

    filename 可以是包含新规则集的新文件,也可以是包含活动规则集的更新文件。

    活动规则集将从内核中删除。filename 文件中的规则将成为活动规则集。


    注 –

    即使是要重新装入当前配置文件,也仍需发出该命令。否则,将继续使用旧规则集,而不会应用更新的配置文件中的已修改规则集。

    请勿使用 ipf -Dsvcadm restart 之类的命令来装入更新的规则集。此类命令会在装入新规则集之前禁用防火墙,从而会公开您的网络。



示例 26–4 激活不同的包过滤规则集

以下示例说明如何在单独的配置文件 /etc/ipf/ipf.conf 中将一个包过滤规则集替换为另一个包过滤规则集。


# ipfstat -io
empty list for ipfilter(out)
pass in quick on dmfe all
# ipf -Fa -f /etc/ipf/ipf.conf
# ipfstat -io
empty list for ipfilter(out)
block in log quick from 10.0.0.0/8 to any


示例 26–5 重新装入更新的包过滤规则集

以下示例说明如何重新装入当前处于活动状态且已更新的包过滤规则集。在此示例中,使用的文件是 /etc/ipf/ipf.conf


# ipfstat -io (Optional)
empty list for ipfilter (out)
block in log quick from 10.0.0.0/8 to any

(Edit the /etc/ipf/ipf.conf configuration file.)

# ip -Fa -f /etc/ipf/ipf.conf
# ipfstat -io (Optional)
empty list for ipfilter (out)
block in log quick from 10.0.0.0/8 to any
block in quick on elx10 from 192.168.0.0/12 to any

Procedure如何删除包过滤规则集

  1. 承担拥有 IP 过滤器管理权限配置文件的角色,或者成为超级用户。

    可以将 IP 过滤器管理权限配置文件指定给您创建的角色。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 删除规则集。


    # ipf -F [a|i|o]
    
    -a

    从规则集中删除所有过滤规则。

    -i

    删除传入包的过滤规则。

    -o

    删除传出包的过滤规则。


示例 26–6 删除包过滤规则集

以下示例显示如何从活动的过滤规则集中删除所有过滤规则。


# ipfstat -io
block out log on dmf0 all
block in log quick from 10.0.0.0/8 to any
# ipf -Fa
# ipfstat -io
empty list for ipfilter(out)
empty list for ipfilter(in)

Procedure如何将规则附加到活动的包过滤规则集

  1. 承担拥有 IP 过滤器管理权限配置文件的角色,或者成为超级用户。

    可以将 IP 过滤器管理权限配置文件指定给您创建的角色。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 使用以下方法之一将规则附加到活动规则集:

    • 在命令行上使用 ipf -f - 命令,将规则附加到规则集。


      # echo "block in on dmfe1 proto tcp from 10.1.1.1/32 to any" | ipf -f -
      
    • 执行以下命令:

      1. 在所选的文件中创建规则集。

      2. 将已创建的规则添加到活动规则集。


        # ipf -f filename
        

        filename 中的规则将添加到活动规则集的结尾。由于 Solaris IP 过滤器使用“最后一个匹配规则”算法,因此,除非使用 quick 关键字,否则所添加的规则将确定过滤优先级。如果包与包含 quick 关键字的规则匹配,则执行该规则的操作,且不检查后续规则。


示例 26–7 将规则附加到活动的包过滤规则集

以下示例显示如何从命令行将规则添加到活动的包过滤规则集。


# ipfstat -io
empty list for ipfilter(out)
block in log quick from 10.0.0.0/8 to any
# echo "block in on dmfe1 proto tcp from 10.1.1.1/32 to any" | ipf -f -
# ipfstat -io
empty list for ipfilter(out)
block in log quick from 10.0.0.0/8 to any
block in on dmfe1 proto tcp from 10.1.1.1/32 to any

Procedure如何将规则附加到非活动的包过滤规则集

  1. 承担拥有 IP 过滤器管理权限配置文件的角色,或者成为超级用户。

    可以将 IP 过滤器管理权限配置文件指定给您创建的角色。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 在所选的文件中创建规则集。

  3. 将已创建的规则添加到非活动规则集。


    # ipf -I -f filename
    

    filename 中的规则将添加到非活动规则集的结尾。由于 Solaris IP 过滤器使用“最后一个匹配规则”算法,因此,除非使用 quick 关键字,否则所添加的规则将确定过滤优先级。如果包与包含 quick 关键字的规则匹配,则执行该规则的操作,且不检查后续规则。


示例 26–8 将规则附加到非活动规则集

以下示例显示如何将规则从文件添加到非活动规则集。


# ipfstat -I -io
pass out quick on dmfe1 all
pass in quick on dmfe1 all
# ipf -I -f /etc/ipf/ipf.conf
# ipfstat -I -io
pass out quick on dmfe1 all
pass in quick on dmfe1 all
block in log quick from 10.0.0.0/8 to any

Procedure如何在活动和非活动的包过滤规则集之间切换

  1. 承担拥有 IP 过滤器管理权限配置文件的角色,或者成为超级用户。

    可以将 IP 过滤器管理权限配置文件指定给您创建的角色。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 在活动和非活动的规则集之间切换。


    # ipf -s
    

    使用此命令,可以在内核中活动和非活动的规则集之间切换。请注意,如果非活动规则集为空,则没有包过滤。


示例 26–9 在活动和非活动的包过滤规则集之间切换

以下示例显示使用 ipf -s 命令如何导致非活动规则集成为活动规则集,并导致活动规则集成为非活动规则集。


Procedure如何从内核中删除非活动的包过滤规则集

  1. 承担拥有 IP 过滤器管理权限配置文件的角色,或者成为超级用户。

    可以将 IP 过滤器管理权限配置文件指定给您创建的角色。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 在“全部清除”命令中指定非活动规则集。


    # ipf -I -Fa
    

    此命令从内核中清除非活动规则集。


    注 –

    如果随后运行 ipf -s,则空的非活动规则集将成为活动规则集。空的活动规则集意味着会执行过滤。



示例 26–10 从内核中删除非活动的包过滤规则集

以下示例显示如何清除非活动的包过滤规则集以便删除所有规则。


# ipfstat -I -io
empty list for inactive ipfilter(out)
block in log quick from 10.0.0.0/8 to any
block in on dmfe1 proto tcp from 10.1.1.1/32 to any
# ipf -I -Fa
# ipfstat -I -io
empty list for inactive ipfilter(out)
empty list for inactive ipfilter(in)

管理 Oracle Solaris : IP 过滤器的 NAT 规则

使用以下过程可以管理、查看和修改 NAT 规则。

Procedure如何查看活动的 NAT 规则

  1. 承担拥有 IP 过滤器管理权限配置文件的角色,或者成为超级用户。

    可以将 IP 过滤器管理权限配置文件指定给您创建的角色。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 查看活动的 NAT 规则。


    # ipnat -l
    

示例 26–11 查看活动的 NAT 规则

以下示例显示活动 NAT 规则集的输出。


# ipnat -l
List of active MAP/Redirect filters:
map dmfe0 192.168.1.0/24 -> 20.20.20.1/32

List of active sessions:

Procedure如何删除 NAT 规则

  1. 承担拥有 IP 过滤器管理权限配置文件的角色,或者成为超级用户。

    可以将 IP 过滤器管理权限配置文件指定给您创建的角色。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 删除当前的 NAT 规则。


    # ipnat -C
    

示例 26–12 删除 NAT 规则

以下示例显示如何删除当前 NAT 规则中的项。


# ipnat -l
List of active MAP/Redirect filters:
map dmfe0 192.168.1.0/24 -> 20.20.20.1/32

List of active sessions:
# ipnat -C
1 entries flushed from NAT list
# ipnat -l
List of active MAP/Redirect filters:

List of active sessions:

Procedure如何将规则附加到 NAT 规则

  1. 承担拥有 IP 过滤器管理权限配置文件的角色,或者成为超级用户。

    可以将 IP 过滤器管理权限配置文件指定给您创建的角色。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 使用以下方法之一将规则附加到活动规则集:

    • 在命令行上使用 ipnat -f - 命令,将规则附加到 NAT 规则集。


      # echo "map dmfe0 192.168.1.0/24 -> 20.20.20.1/32" | ipnat -f -
      
    • 执行以下命令:

      1. 在所选的文件中创建其他 NAT 规则。

      2. 将已创建的规则添加到活动的 NAT 规则。


        # ipnat -f filename
        

        filename 中的规则将添加到 NAT 规则的结尾。


示例 26–13 将规则附加到 NAT 规则集

以下示例显示如何从命令行将规则添加到 NAT 规则集。


# ipnat -l
List of active MAP/Redirect filters:

List of active sessions:
# echo "map dmfe0 192.168.1.0/24 -> 20.20.20.1/32" | ipnat -f -
# ipnat -l
List of active MAP/Redirect filters:
map dmfe0 192.168.1.0/24 -> 20.20.20.1/32

List of active sessions:

管理 Oracle Solaris : IP 过滤器的地址池

使用以下过程可以管理、查看和修改地址池。

Procedure如何查看活动地址池

  1. 承担拥有 IP 过滤器管理权限配置文件的角色,或者成为超级用户。

    可以将 IP 过滤器管理权限配置文件指定给您创建的角色。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 查看活动地址池。


    # ippool -l
    

示例 26–14 查看活动地址池

以下示例显示如何查看活动地址池的内容。


# ippool -l
table role = ipf type = tree number = 13
        { 10.1.1.1/32, 10.1.1.2/32, 192.168.1.0/24; };

Procedure如何删除地址池

  1. 承担拥有 IP 过滤器管理权限配置文件的角色,或者成为超级用户。

    可以将 IP 过滤器管理权限配置文件指定给您创建的角色。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 删除当前地址池中的项。


    # ippool -F
    

示例 26–15 删除地址池

以下示例显示如何删除地址池。


# ippool -l
table role = ipf type = tree number = 13
        { 10.1.1.1/32, 10.1.1.2/32, 192.168.1.0/24; };
# ippool -F
1 object flushed
# ippool -l

Procedure如何将规则附加到地址池

  1. 承担拥有 IP 过滤器管理权限配置文件的角色,或者成为超级用户。

    可以将 IP 过滤器管理权限配置文件指定给您创建的角色。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 使用以下方法之一将规则附加到活动规则集:

    • 在命令行上使用 ippool -f - 命令,将规则附加到规则集。


      # echo "table role = ipf type = tree number = 13 
      {10.1.1.1/32, 10.1.1.2/32, 192.168.1.0/24};" | ippool -f -
      
    • 执行以下命令:

      1. 在所选的文件中创建其他地址池。

      2. 将已创建的规则添加到活动地址池。


        # ippool -f filename
        

        filename 中的规则将添加到活动地址池的结尾。


示例 26–16 将规则附加到地址池

以下示例显示如何从命令行将地址池添加到地址池规则集。


# ippool -l
table role = ipf type = tree number = 13
        { 10.1.1.1/32, 10.1.1.2/32, 192.168.1.0/24; };
# echo "table role = ipf type = tree number = 100
 {10.0.0.0/32, 172.16.1.2/32, 192.168.1.0/24};" | ippool -f -
# ippool -l
table role = ipf type = tree number = 100
        { 10.0.0.0/32, 172.16.1.2/32, 192.168.1.0/24; };
table role = ipf type = tree number = 13
        { 10.1.1.1/32, 10.1.1.2/32, 192.168.1.0/24; };

显示 Oracle Solaris : IP 过滤器的统计信息

表 26–5 显示 Oracle Solaris : IP 过滤器的统计信息(任务列表)

任务 

说明 

参考 

查看状态表。 

使用 ipfstat 命令查看状态表,以获取有关包过滤的信息。

如何查看 Oracle Solaris : IP 过滤器的状态表

查看状态统计信息。 

使用 ipfstat -s 命令查看有关包状态信息的统计信息。

如何查看 Oracle Solaris : IP 过滤器的状态统计信息

查看 NAT 统计信息。 

使用 ipnat -s 命令查看 NAT 统计信息。

如何查看 Oracle Solaris : IP 过滤器的 NAT 统计信息

查看地址池统计信息。 

使用 ippool -s 命令查看地址池统计信息。

如何查看 Oracle Solaris : IP 过滤器的地址池统计信息

Procedure如何查看 Oracle Solaris : IP 过滤器的状态表

  1. 承担拥有 IP 过滤器管理权限配置文件的角色,或者成为超级用户。

    可以将 IP 过滤器管理权限配置文件指定给您创建的角色。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 查看状态表。


    # ipfstat
    

    注 –

    可以使用 -t 选项以 top 实用程序格式查看状态表。



示例 26–17 查看 Oracle Solaris : IP 过滤器的状态表

以下示例显示如何查看状态表。


# ipfstat
bad packets:            in 0    out 0
 input packets:         blocked 160 passed 11 nomatch 1 counted 0 short 0
output packets:         blocked 0 passed 13681 nomatch 6844 counted 0 short 0
 input packets logged:  blocked 0 passed 0
output packets logged:  blocked 0 passed 0
 packets logged:        input 0 output 0
 log failures:          input 0 output 0
fragment state(in):     kept 0  lost 0
fragment state(out):    kept 0  lost 0
packet state(in):       kept 0  lost 0
packet state(out):      kept 0  lost 0
ICMP replies:   0       TCP RSTs sent:  0
Invalid source(in):     0
Result cache hits(in):  152     (out):  6837
IN Pullups succeeded:   0       failed: 0
OUT Pullups succeeded:  0       failed: 0
Fastroute successes:    0       failures:       0
TCP cksum fails(in):    0       (out):  0
IPF Ticks:      14341469
Packet log flags set: (0)
        none

Procedure如何查看 Oracle Solaris : IP 过滤器的状态统计信息

  1. 承担拥有 IP 过滤器管理权限配置文件的角色,或者成为超级用户。

    可以将 IP 过滤器管理权限配置文件指定给您创建的角色。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 查看状态统计信息。


    # ipfstat -s
    

示例 26–18 查看 Oracle Solaris : IP 过滤器的状态统计信息

以下示例显示如何查看状态统计信息。


# ipfstat -s
IP states added:
        0 TCP
        0 UDP
        0 ICMP
        0 hits
        0 misses
        0 maximum
        0 no memory
        0 max bucket
        0 active
        0 expired
        0 closed
State logging enabled

State table bucket statistics:
        0 in use        
        0.00% bucket usage
        0 minimal length
        0 maximal length
        0.000 average length

Procedure如何查看 Oracle Solaris : IP 过滤器的 NAT 统计信息

  1. 承担拥有 IP 过滤器管理权限配置文件的角色,或者成为超级用户。

    可以将 IP 过滤器管理权限配置文件指定给您创建的角色。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 查看 NAT 统计信息。


    # ipnat -s
    

示例 26–19 查看 Oracle Solaris : IP 过滤器的 NAT 统计信息

以下示例显示如何查看 NAT 统计信息。


# ipnat -s
mapped  in      0       out     0
added   0       expired 0
no memory       0       bad nat 0
inuse   0
rules   1
wilds   0

Procedure如何查看 Oracle Solaris : IP 过滤器的地址池统计信息

  1. 承担拥有 IP 过滤器管理权限配置文件的角色,或者成为超级用户。

    可以将 IP 过滤器管理权限配置文件指定给您创建的角色。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 查看地址池统计信息。


    # ippool -s
    

示例 26–20 查看 Oracle Solaris : IP 过滤器的地址池统计信息

以下示例说明如何查看地址池统计信息。


# ippool -s
Pools:  3
Hash Tables:    0
Nodes:  0

使用 Oracle Solaris : IP 过滤器的日志文件

表 26–6 使用 Oracle Solaris : IP 过滤器的日志文件(任务列表)

任务 

说明 

参考 

创建日志文件。 

创建单独的 Oracle Solaris : IP 过滤器日志文件。 

如何为 Oracle Solaris : IP 过滤器设置日志文件

查看日志文件。 

使用 ipmon 命令查看状态日志文件、NAT 日志文件和常规日志文件。

如何查看 Oracle Solaris : IP 过滤器的日志文件

清除包日志缓冲区。 

使用 ipmon -F 命令删除包日志缓冲区的内容。

如何清除包日志文件

将记录的包保存到文件中。 

将记录的包保存到文件中,以供日后参考。 

如何将记录的包保存到文件中

Procedure如何为 Oracle Solaris : IP 过滤器设置日志文件

缺省情况下,Oracle Solaris : IP 过滤器的所有日志信息都记录在 syslogd 文件中。应设置一个日志文件来单独记录 Oracle Solaris : IP 过滤器流量信息,以将其与可能记录在缺省日志文件中的其他数据相区分。请执行以下步骤。

  1. 承担拥有 IP 过滤器管理权限配置文件的角色,或者成为超级用户。

    可以将 IP 过滤器管理权限配置文件指定给您创建的角色。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 通过添加以下两行来编辑 /etc/syslog.conf 文件:


    # Save IPFilter log output to its own file 
    local0.debug             /var/log/log-name
    

    注 –

    在第二行中,确保使用 Tab 键而不是 Spacebar 来分隔 local0.debug/var/log/log-name


  3. 创建新日志文件。


    # touch /var/log/log-name
    
  4. 重新启动系统日志服务。


    # svcadm restart system-log
    

示例 26–21 创建 Oracle Solaris : IP 过滤器日志

以下示例显示如何创建 ipmon.log 以归档 IP 过滤器信息。

/etc/syslog.conf 中:


# Save IPFilter log output to its own file 
local0.debug             /var/log/ipmon.log

在命令行中:


# touch /var/log/ipmon.log
# svcadm restart system-log

Procedure如何查看 Oracle Solaris : IP 过滤器的日志文件

开始之前

应创建一个单独的日志文件来记录 Oracle Solaris : IP 过滤器数据。请参阅如何为 Oracle Solaris : IP 过滤器设置日志文件

  1. 承担拥有 IP 过滤器管理权限配置文件的角色,或者成为超级用户。

    可以将 IP 过滤器管理权限配置文件指定给您创建的角色。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 查看状态日志文件、NAT 日志文件或常规日志文件。要查看日志文件,请键入以下命令,并使用适当的选项:


    # ipmon -o [S|N|I] filename
    
    S

    显示状态日志文件。

    N

    显示 NAT 日志文件。

    I

    显示常规 IP 日志文件。

    要查看所有状态日志文件、NAT 日志文件和常规日志文件,请使用所有选项:


    # ipmon -o SNI filename
    
    • 如果您已事先手动停止了 ipmon 守护进程,那么还可以使用以下命令来显示状态日志文件、NAT 日志文件和 Oracle Solaris : IP 过滤器日志文件。


      # ipmon -a filename
      

      注 –

      如果 ipmon 守护进程仍在运行,请勿使用 ipmon -a 语法。通常,该守护进程会在系统引导期间自动启动。发出 ipmon -a 命令还会打开 ipmon 的另一个副本。在此情况下,两个副本将读取相同的日志信息,只有一个副本会获得特定日志消息。


    有关查看日志文件的更多信息,请参见 ipmon(1M) 手册页。


示例 26–22 查看 Oracle Solaris : IP 过滤器的日志文件

以下示例显示了来自 /var/ipmon.log 的输出。


# ipmon -o SNI /var/ipmon.log
02/09/2004 15:27:20.606626 hme0 @0:1 p 129.146.157.149 -> 
129.146.157.145 PR icmp len 20 84 icmp echo/0 IN


# pkill ipmon
# ipmon -aD /var/ipmon.log
02/09/2004 15:27:20.606626 hme0 @0:1 p 129.146.157.149 -> 
129.146.157.145 PR icmp len 20 84 icmp echo/0 IN

Procedure如何清除包日志文件

  1. 承担拥有 IP 过滤器管理权限配置文件的角色,或者成为超级用户。

    可以将 IP 过滤器管理权限配置文件指定给您创建的角色。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 清除包日志缓冲区。


    # ipmon -F
    

示例 26–23 清除包日志文件

以下示例显示删除日志文件时的输出。即使未在日志文件中存储任何内容,系统也将提供一个报告,如此示例所示。


# ipmon -F
0 bytes flushed from log buffer
0 bytes flushed from log buffer
0 bytes flushed from log buffer

Procedure如何将记录的包保存到文件中

  1. 承担拥有 IP 过滤器管理权限配置文件的角色,或者成为超级用户。

    可以将 IP 过滤器管理权限配置文件指定给您创建的角色。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 将记录的包保存到文件中。


    # cat /dev/ipl > filename
    

    继续将包记录到 filename 文件中,直到您通过键入 Ctrl-C 组合键使命令行提示符重新出现来中断该过程。


示例 26–24 将记录的包保存到文件中

以下示例显示将记录的包保存到文件中时所出现的结果。


# cat /dev/ipl > /tmp/logfile
^C#

# ipmon -f /tmp/logfile
02/09/2004 15:30:28.708294 hme0 @0:1 p 129.146.157.149,33923 -> 
  129.146.157.145,23 PR tcp len 20 52 -S IN
02/09/2004 15:30:28.708708 hme0 @0:1 p 129.146.157.149,33923 -> 
  129.146.157.145,23 PR tcp len 20 40 -A IN
02/09/2004 15:30:28.792611 hme0 @0:1 p 129.146.157.149,33923 -> 
  129.146.157.145,23 PR tcp len 20 70 -AP IN
02/09/2004 15:30:28.872000 hme0 @0:1 p 129.146.157.149,33923 -> 
 129.146.157.145,23 PR tcp len 20 40 -A IN
02/09/2004 15:30:28.872142 hme0 @0:1 p 129.146.157.149,33923 -> 
  129.146.157.145,23 PR tcp len 20 43 -AP IN
02/09/2004 15:30:28.872808 hme0 @0:1 p 129.146.157.149,33923 -> 
  129.146.157.145,23 PR tcp len 20 40 -A IN
02/09/2004 15:30:28.872951 hme0 @0:1 p 129.146.157.149,33923 -> 
  129.146.157.145,23 PR tcp len 20 47 -AP IN
02/09/2004 15:30:28.926792 hme0 @0:1 p 129.146.157.149,33923 -> 
  129.146.157.145,23 PR tcp len 20 40 -A IN 
.
.
(output truncated)

创建和编辑 Oracle Solaris : IP 过滤器配置文件

必须直接编辑配置文件以创建和修改规则集及地址池。配置文件遵循标准的 UNIX 语法规则:

Procedure如何为 Oracle Solaris : IP 过滤器创建配置文件

以下过程介绍如何设置以下文件:

  1. 承担拥有 IP 过滤器管理权限配置文件的角色,或者成为超级用户。

    可以将 IP 过滤器管理权限配置文件指定给您创建的角色。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 启动所选的文件编辑器。为要配置的功能创建或编辑配置文件。

    • 要为包过滤规则创建配置文件,请编辑 ipf.conf 文件。

      Oracle Solaris : IP 过滤器使用放置在 ipf.conf 文件中的包过滤规则。如果在 /etc/ipf/ipf.conf 文件中放置包过滤的规则文件,则在引导系统时会装入此文件。如果不希望在引导时装入过滤规则,请将其放置在所选的文件中。然后可以使用 ipf 命令激活规则,如如何激活不同的或更新的包过滤规则集中所述。

      有关创建包过滤规则的信息,请参见使用 Oracle Solaris : IP 过滤器的包过滤功能


      注 –

      如果 ipf.conf 文件为空,则没有过滤。空的 ipf.conf 文件相当于具有以下规则集:


      pass in all
      pass out all

    • 要为 NAT 规则创建配置文件,请编辑 ipnat.conf 文件。

      Oracle Solaris : IP 过滤器使用放置在 ipnat.conf 文件中的 NAT 规则。如果在 /etc/ipf/ipnat.conf 文件中放置 NAT 的规则文件,则在引导系统时会装入此文件。如果不希望在引导时装入 NAT 规则,请将 ipnat.conf 文件放置在所选的位置中。然后可以使用 ipnat 命令激活 NAT 规则。

      有关为 NAT 创建规则的信息,请参见使用 Oracle Solaris : IP 过滤器的 NAT 功能

    • 要为地址池创建配置文件,请编辑 ippool.conf 文件。

      Oracle Solaris : IP 过滤器使用放置在 ippool.conf 文件中的地址池。如果在 /etc/ipf/ippool.conf 文件中放置地址池的规则文件,则在引导系统时会装入此文件。如果不希望在引导时装入地址池,请将 ippool.conf 文件放置在所选的位置中。然后可以使用 ippool 命令激活地址池。

      有关创建地址池的信息,请参见使用 Oracle Solaris : IP 过滤器的地址池功能

Oracle Solaris : IP 过滤器配置文件示例

以下示例说明了在过滤配置中使用的包过滤规则。


示例 26–25 Oracle Solaris : IP 过滤器主机配置

此示例显示具有 elxl 网络接口的主机上的配置。


# pass and log everything by default
pass in log on elxl0 all
pass out log on elxl0 all

# block, but don't log, incoming packets from other reserved addresses
block in quick on elxl0 from 10.0.0.0/8 to any
block in quick on elxl0 from 172.16.0.0/12 to any

# block and log untrusted internal IPs. 0/32 is notation that replaces 
# address of the machine running Solaris IP Filter.
block in log quick from 192.168.1.15 to <thishost>
block in log quick from 192.168.1.43 to <thishost>

# block and log X11 (port 6000) and remote procedure call 
# and portmapper (port 111) attempts
block in log quick on elxl0 proto tcp from any to elxl0/32 port = 6000 keep state
block in log quick on elxl0 proto tcp/udp from any to elxl0/32 port = 111 keep state

此规则集以两个无限制规则开始,分别允许将任何内容传入和传出 elxl 接口。第二个规则集阻止从专用地址空间 10.0.0.0172.16.0.0 传入的任何包进入防火墙。下一个规则集阻止来自主机的特定内部地址。最后一个规则集阻止从端口 6000 和端口 111 上传入的包。



示例 26–26 Oracle Solaris : IP 过滤器服务器配置

此示例显示用作 Web 服务器的主机的配置。此计算机具有 eri 网络接口。


# web server with an eri interface
# block and log everything by default; then allow specific services
# group 100 - inbound rules
# group 200 - outbound rules
# (0/32) resolves to our IP address)
*** FTP proxy ***


# block short packets which are packets fragmented too short to be real.
block in log quick all with short


# block and log inbound and outbound by default, group by destination
block in log on eri0 from any to any head 100
block out log on eri0 from any to any head 200


# web rules that get hit most often
pass in quick on eri0 proto tcp from any \
to eri0/32 port = http flags S keep state group 100
pass in quick on eri0 proto tcp from any \
to eri0/32 port = https flags S keep state group 100


# inbound traffic - ssh, auth
pass in quick on eri0 proto tcp from any \
to eri0/32 port = 22 flags S keep state group 100
pass in log quick on eri0 proto tcp from any \
to eri0/32 port = 113 flags S keep state group 100
pass in log quick on eri0 proto tcp from any port = 113 \
to eri0/32 flags S keep state group 100


# outbound traffic - DNS, auth, NTP, ssh, WWW, smtp
pass out quick on eri0 proto tcp/udp from eri0/32 \
to any port = domain flags S keep state group 200
pass in quick on eri0 proto udp from any port = domain to eri0/32 group 100

pass out quick on eri0 proto tcp from eri0/32 \
to any port = 113 flags S keep state group 200
pass out quick on eri0 proto tcp from eri0/32 port = 113 \
to any flags S keep state group 200

pass out quick on eri0 proto udp from eri0/32 to any port = ntp group 200
pass in quick on eri0 proto udp from any port = ntp to eri0/32 port = ntp group 100

pass out quick on eri0 proto tcp from eri0/32 \
to any port = ssh flags S keep state group 200

pass out quick on eri0 proto tcp from eri0/32 \
to any port = http flags S keep state group 200
pass out quick on eri0 proto tcp from eri0/32 \
to any port = https flags S keep state group 200

pass out quick on eri0 proto tcp from eri0/32 \
to any port = smtp flags S keep state group 200


# pass icmp packets in and out
pass in quick on eri0 proto icmp from any to eri0/32  keep state group 100
pass out quick on eri0 proto icmp from eri0/32 to any keep state group 200


# block and ignore NETBIOS packets
block in quick on eri0 proto tcp from any \
to any port = 135 flags S keep state group 100

block in quick on eri0 proto tcp from any port = 137 \
to any flags S keep state group 100
block in quick on eri0 proto udp from any to any port = 137 group 100
block in quick on eri0 proto udp from any port = 137 to any group 100

block in quick on eri0 proto tcp from any port = 138 \
to any flags S keep state group 100
block in quick on eri0 proto udp from any port = 138 to any group 100

block in quick on eri0 proto tcp from any port = 139 to any flags S keep state
group 100
block in quick on eri0 proto udp from any port = 139 to any group 100


示例 26–27 Oracle Solaris : IP 过滤器路由器配置

此示例显示具有内部接口 ce0 和外部接口 ce1 的路由器的配置。


# internal interface is ce0 at 192.168.1.1
# external interface is ce1 IP obtained via DHCP
# block all packets and allow specific services
*** NAT ***
*** POOLS ***


# Short packets which are fragmented too short to be real.
block in log quick all with short


# By default, block and log everything.
block in log on ce0 all
block in log on ce1 all
block out log on ce0 all
block out log on ce1 all


# Packets going in/out of network interfaces that aren't on the loopback
# interface should not exist.
block in log quick on ce0 from 127.0.0.0/8 to any
block in log quick on ce0 from any to 127.0.0.0/8
block in log quick on ce1 from 127.0.0.0/8 to any
block in log quick on ce1 from any to 127.0.0.0/8


# Deny reserved addresses.
block in quick on ce1 from 10.0.0.0/8 to any
block in quick on ce1 from 172.16.0.0/12 to any
block in log quick on ce1 from 192.168.1.0/24 to any
block in quick on ce1 from 192.168.0.0/16 to any


# Allow internal traffic
pass in quick on ce0 from 192.168.1.0/24 to 192.168.1.0/24
pass out quick on ce0 from 192.168.1.0/24 to 192.168.1.0/24


# Allow outgoing DNS requests from our servers on .1, .2, and .3
pass out quick on ce1 proto tcp/udp from ce1/32 to any port = domain keep state
pass in quick on ce0 proto tcp/udp from 192.168.1.2 to any port = domain keep state
pass in quick on ce0 proto tcp/udp from 192.168.1.3 to any port = domain keep state


# Allow NTP from any internal hosts to any external NTP server.
pass in quick on ce0 proto udp from 192.168.1.0/24 to any port = 123 keep state
pass out quick on ce1 proto udp from any to any port = 123 keep state


# Allow incoming mail
pass in quick on ce1 proto tcp from any to ce1/32 port = smtp keep state
pass in quick on ce1 proto tcp from any to ce1/32 port = smtp keep state
pass out quick on ce1 proto tcp from 192.168.1.0/24 to any port = smtp keep state


# Allow outgoing connections: SSH, WWW, NNTP, mail, whois
pass in quick on ce0 proto tcp from 192.168.1.0/24 to any port = 22 keep state
pass out quick on ce1 proto tcp from 192.168.1.0/24 to any port = 22 keep state

pass in quick on ce0 proto tcp from 192.168.1.0/24 to any port = 80 keep state
pass out quick on ce1 proto tcp from 192.168.1.0/24 to any port = 80 keep state
pass in quick on ce0 proto tcp from 192.168.1.0/24 to any port = 443 keep state
pass out quick on ce1 proto tcp from 192.168.1.0/24 to any port = 443 keep state

pass in quick on ce0 proto tcp from 192.168.1.0/24 to any port = nntp keep state
block in quick on ce1 proto tcp from any to any port = nntp keep state
pass out quick on ce1 proto tcp from 192.168.1.0/24 to any port = nntp keep state

pass in quick on ce0 proto tcp from 192.168.1.0/24 to any port = smtp keep state

pass in quick on ce0 proto tcp from 192.168.1.0/24 to any port = whois keep state
pass out quick on ce1 proto tcp from any to any port = whois keep state


# Allow ssh from offsite
pass in quick on ce1 proto tcp from any to ce1/32 port = 22 keep state


# Allow ping out
pass in quick on ce0 proto icmp all keep state
pass out quick on ce1 proto icmp all keep state


# allow auth out
pass out quick on ce1 proto tcp from ce1/32 to any port = 113 keep state
pass out quick on ce1 proto tcp from ce1/32 port = 113 to any keep state


# return rst for incoming auth
block return-rst in quick on ce1 proto tcp from any to any port = 113 flags S/SA


# log and return reset for any TCP packets with S/SA
block return-rst in log on ce1 proto tcp from any to any flags S/SA


# return ICMP error packets for invalid UDP packets
block return-icmp(net-unr) in proto udp all