了解防火墙过滤器匹配条件
在为防火墙过滤器定义术语之前,必须了解如何处理在术语中指定的匹配条件,以及如何指定各种类型的匹配条件以获得所需的过滤结果。匹配条件由定义匹配条件的字符串(称为匹配语句)组成。匹配条件是数据包必须包含的值或字段。
过滤器匹配条件
在from
防火墙过滤器术语的语句中,您可以在其中一个then
语句中指定触发操作的数据包条件:then 具有各种选项, then interface 或 then vlan. 语句中的所有 from
条件必须与要执行的操作匹配。指定匹配条件的顺序并不重要,因为数据包必须与术语中的所有条件匹配才能进行匹配。
如果在术语中未指定匹配条件,则该术语将匹配所有数据包。
语句中的 from
单个条件不能包含值列表。例如,不能指定数字范围或多个源地址或目标地址。
语句中的 from
个别条件不能否定。否定条件是显式不匹配。
数字过滤器匹配条件
数字过滤条件匹配由数值标识的数据包字段,例如端口号和协议号。对于数字过滤器匹配条件,您可以指定标识条件的关键字以及数据包中的字段必须匹配的单个值。
您可以通过以下方式之一指定数值:
单个数字 - 如果字段值与数字匹配,则发生匹配。例如:
source-port 25;
单个数字的文本同义词 — 如果字段的值与与同义词对应的数字匹配,则会发生匹配。例如:
source-port http;
要在筛选词中指定多个值,请在其自己的 match 语句(定义匹配条件的字符串)中输入每个值。例如,如果值为 vlan 10 或 30,则在以下术语中发生匹配。
[edit firewall family family-name filter filter-name term term-name from] vlan 10; vlan 30;
以下限制适用于数字筛选器匹配条件:
不能指定值的范围。
不能指定逗号分隔值的列表。
不能在数值筛选器匹配条件中排除特定值。例如,不能指定仅当匹配条件不等于给定值时才匹配的条件。
接口过滤器匹配条件
接口过滤器匹配条件可以匹配数据包中的接口名称值。对于接口过滤器匹配条件,请指定接口的名称,例如:
[edit firewall family family-name filter filter-name term term-name from] user@switch# set interface ge-0/0/1
端口和 VLAN 接口不使用逻辑单元号。但是,应用于路由器接口的防火墙过滤器可以在接口过滤器匹配条件中指定逻辑单元号,例如:
[edit firewall family family-name filter filter-name term term-name from] user@switch# set interface ge-0/1/0.0
您可以将 * 通配符作为接口名称的一部分包含在内,例如:
[edit firewall family family-name filter filter-name term term-name from] user@switch# set interface ge-0/*/1 user@switch# set interface ge-0/1/* user@switch# set interface ge-*
IP 地址过滤器匹配条件
地址过滤器匹配条件可以匹配数据包中的前缀值,例如 IP 源和目标前缀。对于地址过滤器匹配条件,您可以指定一个用于标识字段的关键字以及数据包必须匹配的该类型的一个前缀。
将地址指定为单个前缀。如果字段的值与前缀匹配,则会发生匹配。例如:
[edit firewall family family-name filter filter-name term term-name from] user@switch# set destination-address 10.2.1.0/28;
每个前缀都包含一个隐式 0/0 except 语句,这意味着任何与指定前缀不匹配的前缀都会被显式视为不匹配。
要指定地址前缀,请使用表示法前缀/前缀长度。如果省略前缀长度,则默认为 /32。例如:
[edit firewall family family-name filter filter-name term term-name from] user@switch# set destination-address 10 [edit firewall family family-name filter filter-name term term-name from] user@switch# show destination-address 10.0.0.0/32;
要在筛选词中指定多个 IP 地址,请在其自己的 match 语句中输入每个地址。例如,如果字段的值 source-address 与以下任一源地址前缀匹配,则以下术语中将发生匹配:
[edit firewall family family-name filter filter-name term term-name from] user@switch# set source-address 10.0.0.0/8 user@switch# set source-address 10.1.0.0/16
MAC 地址过滤器匹配条件
MAC 地址过滤器匹配条件可以匹配数据包中的源和目标 MAC 地址值。对于 MAC 地址过滤器匹配条件,您可以指定一个用于标识字段的关键字以及数据包必须匹配的该类型的一个值。
您可以将 MAC 地址指定为六个十六进制字节,格式如下:
[edit firewall family family-name filter filter-name term term-name from] user@switch# set destination-mac-address 0011.2233.4455
[edit firewall family family-name filter filter-name term term-name from] user@switch# set destination-mac-address 00:11:22:33:44:55
[edit firewall family family-name filter filter-name term term-name from] user@switch# set destination-mac-address 001122334455
要在筛选词中指定多个 MAC 地址,请在其自己的匹配语句中输入每个 MAC 地址。例如,如果字段的值 source-mac-address 与以下任一地址匹配,则在以下术语中发生匹配。
[edit firewall family family-name filter filter-name term term-name from] user@switch# set source-mac-address 00:11:22:33:44:55 user@switch# set source-mac-address 00:11:22:33:20:15
位场滤波器匹配条件
如果设置或未设置数据包字段中的特定位,则位字段过滤条件将匹配数据包字段。您可以匹配 IP 选项、TCP 标志和 IP 分段字段。对于位字段筛选器匹配条件,您可以指定标识字段的关键字,并进行测试以确定字段中是否存在该选项。
要指定要匹配的位字段值,请用双引号将该值括起来。例如,如果设置了 TCP 标志字段中的 RST 位,则会发生匹配:
[edit firewall family family-name filter filter-name term term-name from] user@switch# set tcp-flags "rst"
通常,使用关键字指定要测试的位。位字段匹配关键字始终映射到单个位值。还可以将位字段指定为十六进制或十进制数字。
要匹配多个位字段值,请使用逻辑运算符,如中所述 表 1。运算符按从最高优先级到最低优先级的顺序列出。操作是左关联的。
逻辑运算符 |
Description |
---|---|
! |
否定。 |
& |
逻辑“与”。 |
| |
逻辑“或”。 |
若要否定匹配项,请在值前面加上感叹号。例如,仅当 TCP 标志字段中的 RST 位未设置时,才会发生匹配:
[edit firewall family family-name filter filter-name term term-name from] user@switch# set tcp-flags "!rst"
在以下逻辑 AND 操作示例中,如果数据包是 TCP 会话上的初始数据包,则会发生匹配:
[edit firewall family family-name filter filter-name term term-name from] user@switch# set tcp-flags "syn&!ack"
在以下逻辑 OR 操作示例中,如果数据包是 TCP 会话建立或拆除的一部分,则会发生匹配:
[edit firewall family family-name filter filter-name term term-name from] user@switch# set tcp-flags "syn|fin"
对于逻辑 OR 操作,您最多可以在单个术语中指定两个匹配条件。如果需要在逻辑 OR 操作中匹配两个以上的位字段值,请使用其他位字段值连续配置相同的匹配条件。在以下示例中,配置的两个术语与 TCP 标志字段中的 SYN、ACK、FIN 或 RST 位匹配:
[edit firewall family family-name filter filter-name term term-name1 from] user@switch# set tcp-flags "syn|ack" [edit firewall family family-name filter filter-name term term-name2 from] user@switch# set tcp-flags "fin|rst"
可以使用文本同义词来指定一些常见的位字段匹配项。您可以将这些匹配项指定为单个关键字。在以下文本同义词示例中,如果数据包是 TCP 会话上的初始数据包,则会发生匹配:
[edit firewall family family-name filter filter-name term term-name from] user@switch# set tcp-flags tcp-initial