系统管理指南: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 章