Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

基于位字段值的防火墙过滤器匹配条件

位字段值的匹配条件

表 1 列出了 防火墙过滤器 匹配条件,这些条件基于是否设置数据包中的某些位字段。第二列和第三列列出了支持匹配条件的流量类型。

表 1: 防火墙过滤器的二进制和位字段匹配条件

位域匹配条件

匹配值

标准无状态防火墙过滤器的协议族

服务过滤器的协议族

fragment-flags flags

IP 标头中三位 IP 分段标志字段的十六进制值或文本别名。

family inet

family inet

fragment-offset value

IP 报头中 13 位片段偏移量字段的十六进制值或文本别名。

family inet

family inet

tcp-flags value

TCP 标头中 8 位 TCP 标志字段的低阶 6 位的十六进制值或文本别名。

family inetfamily inet6family vplsfamily bridge

family inetfamily inet6

†匹配 IPv4 流量的 TCP 标志时,Junos OS 不会自动检查第一个片段位。要仅检查 IPv4 流量的第一个片段位,请使用 匹配条件。first-fragment

常见位字段值或组合的匹配条件

描述防火墙过滤器匹配条件,这些条件基于是否设置数据包中某些常用值或位字段 组合 。表 2

可以使用文本同义词来指定一些常见的位字段匹配项。在前面的示例中,您可以指定 为相同的匹配条件。tcp-initial

注:

某些数字范围和位字段匹配条件允许您指定文本同义词。有关同义词的完整列表:

  • 如果您使用的是 J-Web 界面,请从相应的列表中选择同义词。

  • 如果使用的是 CLI,请在语句后键入问号 ()。?from

表 2: 常见组合的位场匹配条件

匹配条件

Description

标准无状态防火墙过滤器的协议族

服务过滤器的协议族

first-fragment

位字段匹配条件 的文本别名 ,表示分片数据包的第一个分片。fragment-offset 0

family inet

family inet

is-fragment

位字段匹配条件 的文本别名 ,表示分片数据包的尾随分片。fragment-offset 0 except

family inet

family inet

tcp-established

位字段匹配条件 的别名 ,表示已建立的 TCP 会话,但不是 TCP 连接的第一个数据包。tcp-flags "(ack | rst)"

family inetfamily inet6

tcp-initial

位字段匹配条件 的别名 ,表示 TCP 连接的第一个数据包,但不是已建立的 TCP 会话。tcp-flags "(!ack & syn)"

family inetfamily inet6

位字段值的逻辑运算符

列出了在指定无状态防火墙过滤器匹配条件时可以应用于 单个 位字段值的逻辑运算符。表 3运算符按从最高优先级到最低优先级的顺序列出。操作是左关联操作,这意味着操作从左到右进行处理。

表 3: 位域逻辑运算符

优先顺序

位域逻辑运算符

Description

1

(complex-match-condition)

分组 - 在应用括号外的任何运算符之前评估复杂匹配条件。

2

match-condition

否定 - 如果匹配条件为 false,则发生匹配。

3

match-condition-1  &  match-condition-2(也称为数字签名match-condition-1  +  match-condition-2

逻辑 AND — 如果两个匹配条件都为真,则会发生匹配。

4

match-condition-1  |  match-condition-2(也称为数字签名match-condition-1  ,  match-condition-2  

逻辑 OR - 如果任一匹配条件为真,则发生匹配。

匹配单个位字段值或文本别名

对于和位匹配条件,您可以根据是否设置数据包字段中的特定位来指定防火墙过滤器匹配条件。fragment-flagstcp-flags

  • 用于指定单个位的数值 - 可以使用设置了一个位的数值指定单个位字段匹配条件。根据匹配条件,您可以指定十进制值、二进制值或十六进制值。要指定二进制值,请指定带前缀 的数字。b 要指定十六进制值,请指定带前缀 的数字。0x

    在以下示例中,如果设置了 TCP 标志字段中的位,则 会发生匹配:RST

  • 用于指定单个位的文本别名 - 通常使用用双引号 (“ ”) 括起来的文本别名来指定单个位字段匹配条件。

    在以下示例中,如果设置了 TCP 标志字段中的位,则 会发生匹配:RST

匹配多个位字段值或文本别名

您可以根据是否设置数据包字段中的特定位集来指定防火墙过滤器匹配条件。

  • 用于指定多个设置位的数值 - 如果指定其二进制表示形式具有多个设置位的数值,则该值将被视为设置位的逻辑 AND。

    在以下示例中,两个匹配条件相同。如果未设置位 或 未设置,则会发生匹配:0x010x02

  • 指定常见位字段匹配的文本别名 - 您可以使用文本别名指定一些常见的位字段匹配。您可以将这些匹配项指定为单个关键字。

    在以下示例中 ,条件(作为 的 别名)指定在连接的第一个数据包以外的 TCP 数据包上进行匹配:tcp-established“(ack | rst)”

对否定位字段值进行匹配

若要否定匹配项,请在值前面加上感叹号。

在以下示例中,如果设置了 TCP 标志字段中的位,则会发生匹配:RST

匹配两个位字段值的逻辑 OR

可以使用 ( 或 ) 指定如果位字段与指定的两个位字段值中的任何一个匹配,则进行匹配。|,

在以下示例中,如果数据包不是 TCP 会话中的初始数据包,则会发生匹配:

在 TCP 会话中,SYN 标志仅在发送的初始数据包中设置,而 ACK 标志在初始数据包之后发送的所有数据包中设置。在不是 TCP 会话中的初始数据包的数据包中,未设置 SYN 标志或设置 ACK 标志。

两个位字段值的逻辑 AND 上的匹配

可以使用 ( 或 ) 指定当位字段与指定的两个位字段值都匹配时进行匹配。&+

在以下示例中,如果数据包是 TCP 会话中的初始数据包,则会发生匹配:

在 TCP 会话中,SYN 标志仅在发送的初始数据包中设置,而 ACK 标志在初始数据包之后发送的所有数据包中设置。在作为 TCP 会话中的初始数据包的数据包中,将设置 SYN 标志,但未设置 ACK 标志。

分组位字段匹配条件

可以使用 指定 在应用括号外的任何运算符之前计算括号内的复杂匹配条件。

在以下示例中,如果数据包是 TCP 重置或数据包不是 TCP 会话中的初始数据包,则会发生匹配:

在 TCP 会话中,SYN 标志仅在发送的初始数据包中设置,而 ACK 标志在初始数据包之后发送的所有数据包中设置。在不是 TCP 会话中的初始数据包的数据包中,未设置 SYN 标志,并设置 ACK 字段。