了解防火墙过滤器匹配条件
定义防火墙过滤器术语之前,您必须了解如何处理术语中的条件,以及如何指定接口、数字、地址和位字段过滤器匹配条件,才能获得所需的过滤器结果。
过滤器匹配条件
在from
防火墙过滤器术语的语句中,您可以指定要采取的语句中的then
操作所需的数据包匹配的条件。要实施的行动必须符合所有条件。指定匹配条件的顺序并不重要,因为数据包必须匹配一个术语中的所有条件,才能发生匹配。
如果为同一条件指定多个值,则其中任何一个值上的匹配值都与该条件匹配。例如,如果使用语句指定多个 IP 源地址 source-address
,则包含其中任一 IP 源地址的数据包将匹配该条件。在某些情况下,您可以将可能的值括在方括号中,为同一条件指定多个值,如:
[edit firewall family family-name filter filter-name term term-name from] user@switch# set protocol (icmp | udp)
在其他情况下,您必须输入多个语句,如:
[edit firewall family family-name filter filter-name term term-name from] user@switch# set source-address 10.1.1.1 user@switch# set source-address 10.1.1.2
如果某个术语中未指定匹配条件,则该术语匹配所有数据包。
与传统 Junos OS 防火墙过滤器不同,您不能 except
在条件语句中使用来否定该条件。
数字过滤器匹配条件
您可以指定由数值识别的数字过滤器匹配条件,例如端口和协议编号。对于数字过滤器匹配条件,请指定数据包中字段必须包含的条件和单个值才能被视为匹配。
您可以通过以下方式之一指定数值:
单一数字 — 如果字段的值与数字匹配,将发生匹配。例如,要匹配 Telnet 流量:
[edit firewall family family-name filter filter-name term term-name from] user@switch# set source-port 23
单个数字的文本同义词 — 如果字段的值与同义词对应的数字匹配,将发生匹配。例如,要匹配 Telnet 流量:
[edit firewall family family-name filter filter-name term term-name from] user@switch# set source-port telnet
要为过滤器术语中的相同匹配条件指定多个值,请在其自己的 match 语句中输入每个值。例如,如果数据包中的源端口值为 22 或 23,则会出现在以下术语中匹配。
[edit firewall family family-name filter filter-name term term-name from] user@switch# set source-port 22 user@switch# set source-port 23
接口过滤器匹配条件
您可以指定接口过滤器匹配条件,以匹配接收或传输数据包的接口。例如,如果对 VLAN 应用过滤器,则可能希望过滤器与参与 VLAN 的某些接口匹配,而不适用于 VLAN 中的其他接口。指定接口名称时,必须包含一个逻辑单元。
[edit firewall family family-name filter filter-name term term-name from] user@switch# set interface ge-0/0/6.0
在此示例中,最后一个字符 (0
) 用于指定逻辑单元。您可以将通配符 (*
) 包含在接口名称中。例如:
[edit firewall family family-name filter filter-name term term-name from] user@switch# set interface ge-0/*/6.0 user@switch# set interface ge-0/1/*.0 user@switch# set interface ge-0/0/6.*
请注意,您必须为逻辑单元指定值或通配符。
IP 地址过滤器匹配条件
您可以指定地址过滤器匹配条件,以匹配数据包中的 IP 源、目标地址或前缀。指定地址或前缀类型以及地址或前缀本身。例如:
[edit firewall family family-name filter filter-name term term-name from] user@switch# set destination-address 10.2.1.0/24;
如果省略前缀长度,则默认为 /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 语句中输入每个地址或前缀。例如,如果数据包的源地址与以下前缀之一匹配,则会出现在以下术语中:
[edit firewall family family-name filter filter-name term term-name from] user@switch# set source-address 10.1.0.0/16 user@switch# set source-address 10.2.0.0/16
MAC 地址过滤器匹配条件
您可以指定 MAC 地址过滤器匹配条件,以匹配源或目标 MAC 地址。您可以指定数据包必须包含的地址类型和值,以视为匹配。
您可以将 MAC 地址指定为六个十六进制字节,格式如下:
[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 0011.2233.4455
[edit firewall family family-name filter filter-name term term-name from] user@switch# set destination-mac-address 001122334455
无论您使用什么格式,系统都以标准格式解析地址,在本案例中为 00:11:22:33:44:55。
要指定过滤器术语中的多个 MAC 地址,请在其自己的 match 语句中输入每个 MAC 地址。例如,如果 MAC 源地址的值与以下任一地址匹配,则匹配将出现在以下术语中:
[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、UDP 和 ICMP 报头中某些字段中的特定位。通常指定在数据包中设置的字段和字段内的位,以视为匹配。
在大多数情况下,您可以使用关键词来指定要匹配的位。例如,要匹配您可以输入 syn
的 TCP SYN 数据包,如:
[edit firewall family family-name filter filter-name term term-name from] user@switch# set tcp-flags syn
您也可以输入 0x02
,因为 SYN 位是 8 位 tcp 标志字段的第三个最小显著位:
[edit firewall family family-name filter filter-name term term-name from] user@switch# set tcp-flags 0x02
要匹配多个位字段值,请使用逻辑运算符,如中 表 1介绍。运算符按从最高优先级到最低优先级列出。从左到右评估操作。
逻辑运算符 |
说明 |
---|---|
|
否定 |
|
逻辑和 |
|
逻辑或 |
如果使用逻辑运算符,请将值括在引号中,请勿包含任何空格。例如,以下语句与 TCP 握手的第二个数据包匹配:
[edit firewall family family-name filter filter-name term term-name from] user@switch# set tcp-flags "syn&ack"
要否定匹配项,请在值前面加上一个感叹号。例如,以下语句仅匹配 TCP 握手的初始数据包:
[edit firewall family family-name filter filter-name term term-name from] user@switch# set tcp-flags "syn&!ack"
您可以使用文本同义词来指定一些常见的位字段匹配。例如,以下语句也与 TCP 握手的初始数据包匹配:
[edit firewall family family-name filter filter-name term term-name from] user@switch# set tcp-initial