跳过导航链接 | |
退出打印视图 | |
在 Oracle Solaris 11.1 中保护网络安全 Oracle Solaris 11.1 Information Library (简体中文) |
要管理防火墙,请使用 IP 过滤器指定用于过滤网络通信流量的规则集合。可以创建以下类型的规则集合:
包过滤规则集合
网络地址转换 (Network Address Translation, NAT) 规则集合
此外,还可以创建地址池以引用 IP 地址组。然后,可以在规则集合中使用这些池。地址池有助于加快规则处理速度,还可使大型地址组更易于管理。
可以使用包过滤规则集合来设置包过滤。使用 ipf 命令可以对包过滤规则集合进行处理。有关 ipf 命令的更多信息,请参见 ipf(1M) 命令。
可以在命令行上使用 ipf 命令或在包过滤配置文件中创建包过滤规则。要装入配置文件,您必须创建文件并提供 IP 过滤器服务的路径名。
使用 IP 过滤器可以维护两种包过滤规则集合:活动规则集合和非活动规则集合。大多数情况下,会使用活动规则集合。但是,使用 ipf -I 命令可以将命令操作应用于非活动规则列表。除非您选择非活动规则列表,否则 IP 过滤器不会使用该列表。非活动规则列表可提供一个存储规则的位置,而不会影响活动包过滤。
在传递或阻止包之前,IP 过滤器会按照从已配置规则列表开头到其结尾的顺序处理规则列表中的规则。IP 过滤器可维护用于确定它是否将传递包的标志。它会遍历整个规则集合,并基于最后一个匹配规则来确定是传递包还是阻止包。
此过程有两种例外情况。第一种例外情况是当包与包含 quick 关键字的规则匹配时。如果规则包括 quick 关键字,则会针对该规则执行操作,并且不会检查后续规则。第二种例外情况是当包与包含 group 关键字的规则匹配时。如果包与组匹配,则仅会检查标记有该组的规则。
使用以下语法可创建包过滤规则:
action [in|out] option keyword, keyword...
每个规则都以操作开头。如果包与规则匹配,则 IP 过滤器将操作应用于该包。以下列表包括应用于包的常用操作。
阻止包通过过滤器。
允许包通过过滤器。
记录包但不确定是阻止包还是传递包。使用 ipmon 命令可查看日志。
将包包括在过滤器统计信息中。使用 ipfstat 命令可查看统计信息。
使过滤器跳过 number 个过滤规则。
请求由验证包信息的用户程序执行包验证。该程序会确定是传递包还是阻止包。
操作后面的下一个单词必须是 in 或 out。您的选择将确定是将包过滤规则应用于传入包还是应用于传出包。
接下来,可以从选项列表中进行选择。如果使用多个选项,则这些选项必须采用此处显示的顺序。
如果规则是最后一个匹配规则,则记录包。使用 ipmon 命令可查看日志。
如果存在匹配的包,则执行包含 quick 选项的规则。所有进一步的规则检查都将停止。
仅当包移入或移出指定接口时才应用规则。
复制包并将 interface-name 上的副本向外发送到随意指定的 IP 地址。
将包移动到 interface-name 上的外发队列。
指定选项后,可以从确定包是否与规则匹配的各关键字中进行选择。必须按此处显示的顺序使用以下关键字。
注 - 缺省情况下,所有与配置文件中的任何规则都不匹配的包会通过此过滤器。
基于表示为十六进制或十进制整数的服务类型值,对包进行过滤。
基于包的生存时间值与包匹配。在包中存储的生存时间值指明了包在被废弃之前可在网络中存在的时间长度。
与特定协议匹配。可以使用在 /etc/protocols 文件中指定的任何协议名称,或者使用十进制数来表示协议。关键字 tcp/udp 可以用于与 TCP 包或 UDP 包匹配。
与以下任一项或所有项匹配: 源 IP 地址、目标 IP 地址和端口号。all 关键字用于接受来自所有源和发往所有目标的包。
与和包关联的指定属性匹配。在关键字前面插入 not 或 no 一词,以便仅当选项不存在时才与包匹配。
供 TCP 用来基于已设置的 TCP 标志进行过滤。有关 TCP 标志的更多信息,请参见 ipf(4) 手册页。
根据 ICMP 类型进行过滤。仅当 proto 选项设置为 icmp 时才使用此关键字;如果使用 flags 选项,则不使用此关键字。
确定为包保留的信息。可用的 keep-options 包括 state 选项。state 选项会保留有关会话的信息,并可以保留在 TCP、UDP 和 ICMP 包中。
为过滤规则创建一个新组,该组由数字 number 表示。
将规则添加到编号为 number 的组而不是缺省组。如果未指定其他组,则将所有过滤规则放置在组 0 中。
以下示例说明如何组织包过滤规则语法以创建规则。要阻止从 IP 地址 192.168.0.0/16 传入的通信流量,需要在规则列表中包括以下规则:
block in quick from 192.168.0.0/16 to any
有关用于编写包过滤规则的完整语法和句法,请参见 ipf(4) 手册页。有关与包过滤关联的任务,请参见管理 IP 过滤器的包过滤规则集合。有关示例中所示的 IP 地址方案 (192.168.0.0/16) 的说明,请参见《配置和管理 Oracle Solaris 11.1 网络》中的第 1 章 "规划网络部署"。
NAT 可设置映射规则,用于将源 IP 地址和目标 IP 地址转换为其他 Internet 或内联网地址。这些规则可修改传入或传出 IP 包的源地址和目标地址并继续发送包。另外,还可以使用 NAT 将流量从一个端口重定向到另一个端口。在对包进行任何修改或重定向的过程中,NAT 将维护包的完整性。
可以在命令行上使用 ipnat 命令或在 NAT 配置文件中创建 NAT 规则。必须创建 NAT 配置文件并将其路径名设置为该服务的 config/ipnat_config_file 属性的值。缺省值为 /etc/ipf/ipnat.conf。有关更多信息,请参见 ipnat(1M) 命令。
NAT 规则可以应用到 IPv4 和 IPv6 地址。但是,不能在单个规则中指定两种类型的地址。相反,必须为每种地址类型设置单独的规则。在包含 IPv6 地址的 NAT 规则中,不能同时使用 mapproxy 和 rdrproxy NAT 命令。
使用以下语法创建 NAT 规则:
command interface-name parameters
每个规则都以以下命令之一开头:
在无法控制的循环过程中将一个 IP 地址或网络映射到另一个 IP 地址或网络。
将包从一个 IP 地址和端口对重定向到另一个 IP 地址和端口对。
在外部 IP 地址和内部 IP 地址之间建立双向 NAT。
建立基于静态 IP 地址的转换。此命令基于将地址强制转换为目标范围的算法。
此命令后面的下一个单词是接口名称,如 bge0。
接下来,可以从确定 NAT 配置的各种参数中进行选择。其中一些参数包括:
指定网络掩码。
指定 ipmask 要转换成的地址。
指定 tcp、udp 或 tcp/udp 协议以及端口号的范围。
以下示例说明如何构造 NAT 规则。要重新编写从源地址为 192.168.1.0/24 的 net2 设备上传出的包并在外部将该设备的源地址显示为 10.1.0.0/16,需要在 NAT 规则集合中包括以下规则:
map net2 192.168.1.0/24 -> 10.1.0.0/16
以下规则适用于 IPv6 地址:
map net3 fec0:1::/64 -> 2000:1:2::/72 portmap tcp/udp 1025:65000 map-block net3 fe80:0:0:209::/64 -> 209:1:2::/72 ports auto rdr net0 209::ffff:fe13:e43e port 80 -> fec0:1::e,fec0:1::f port 80 tcp round-robin
有关完整的语法和句法,请参见 ipnat(4) 手册页。
地址池可建立用于命名一组地址/网络掩码对的单个引用。地址池提供可减少将 IP 地址与规则相匹配的时间的进程,还可使大型地址组更易于管理。
地址池配置规则可驻留在 IP 过滤器服务装入的文件中。必须创建文件并将其路径名设置为该服务的 config/ippool_config_file 属性的值。缺省值为 /etc/ipf/ippool.conf。
使用以下语法可创建地址池:
table role = role-name type = storage-format number = reference-number
定义对多个地址的引用。
指定 IP 过滤器中池的角色。此时,可以引用的唯一角色是 ipf。
指定池的存储格式。
指定过滤规则所用的引用号。
例如,要将地址组 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) 手册页。