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: 通用组合的位字段匹配条件

匹配条件

说明

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

服务过滤器的协议族

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-flags "(!ack & syn)" 但不是已建立的 TCP 会话。

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 将 进行匹配:

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

如果位字段与指定的两个位字段值之一匹配,您可以使用 ( 或 ) 指定 |, 匹配。

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

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

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

如果位字段与指定的两个位字段值匹配,您可以使用 ( 或 ) 指定 &+ 匹配。

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

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

分组位字段匹配条件

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

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

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