了解防火墙过滤器匹配条件
在为防火墙过滤器定义术语之前,必须了解如何处理术语中的条件,以及如何指定接口、数字、地址和位字段过滤器匹配条件以获得所需的过滤器结果。
过滤器匹配条件
在防火墙过滤器术语的语句中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
要为筛选条件中的同一匹配条件指定多个值,请在各自的匹配语句中输入每个值。例如,如果数据包中源端口的值为 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
接口过滤器匹配条件
您可以指定接口过滤器匹配条件,以匹配接收或传输数据包的接口。在此示例中,最后一个字符 (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
位场滤波器匹配条件
您可以指定位字段过滤器匹配条件,以匹配以太网帧以及 IP、TCP、UDP 和 ICMP 报头中某些字段中的特定位。您通常指定字段和字段内的位,这些字段必须在数据包中设置才能被视为匹配。
在大多数情况下,您可以使用关键字来指定要匹配的位。例如,要在 TCP SYN 数据包上进行匹配,您可以输入 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。运算符按从最高优先级到最低优先级的顺序列出。从左到右评估操作。
逻辑运算符 |
Description |
---|---|
|
否定 |
|
逻辑和 |
|
逻辑手术室 |
如果使用逻辑运算符,请将值括在引号中,并且不包含任何空格。例如,以下语句匹配 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