在此页面上
避免字词匹配时的冲突
快速更新筛选器可以包含多个术语,每个术语都有各种匹配条件。但是,在筛选器中配置多个术语时,必须确保这些术语不会重叠或相互冲突。当一个数据包可以匹配两个术语的所有条件时,两个术语被视为重叠。由于每个术语为匹配指定不同的操作,因此路由器无法确定要执行的操作。当术语重叠时,当动态配置文件尝试应用过滤器时,会发生冲突错误并且会话失败。错误日志指示重叠的术语。
路由器如何计算过滤器中的术语
路由器在检查术语时创建匹配条件表。该表类似于路由表,基于语句中包含的 match-order
条件。当路由器收到数据包时,路由器将按语句中 match-order
指定的顺序检查数据包的内容。
例如,使用以下匹配顺序示例中的示例配置,路由器首先检查数据包的 source-address
,然后 destination-address
检查 ,最后 destination-port
检查 .如下表所示,筛选器中的两个术语不会重叠,因为每个术语都有不同的 destination-port
规范。然后,路由器对与数据包值匹配 destination-port
的术语采取适当的过滤器操作。
术语 |
源地址 |
目标地址 |
目标端口 |
行动 |
---|---|---|---|---|
T55 |
订户地址 |
203.0.113.2/32 |
http |
计数t55_cntr 接受 |
T999 |
订户地址 |
203.0.113.2/32 |
https |
计数t999_cntr 接受 |
匹配顺序示例
firewall { family inet { fast-update-filter psf1 { interface-specific; match-order [ source-address destination-address destination-port ]; term t55 { from { source-address $junos-subscriber-ip-address; destination-address 203.0.113.2/32; destination-port http; } then { count t55_cntr; accept; } } term t999 { from { source-address $junos-subscriber-ip-address; destination-address 203.0.113.2/32; destination-port https; } then { count t999_cntr; accept; } } } } }
使用隐含通配符
本部分介绍如何在匹配配置中使用隐含通配符规范的示例。语句中的 match-order
条件是隐含的通配符,如果未在筛选器的术语规范中 from
配置该条件。
在术语中使用范围(例如,值范围或通配符)时,范围不得重叠 - 重叠的范围会产生冲突错误。但是,您可以在一个术语中配置范围,并在另一个术语中配置完全匹配。例如,在下面的筛选器表中,term t3
中的通配符目标端口值在术语 t55
上与目标端口规范不重叠, t999
因为 http
and https
值完全匹配。
在隐式通配符示例配置中,路由器将语句中的match-order
条件视为destination-port
术语t3
的隐含通配符,因为该术语中没有destination-port
配置任何值。因此,通配符指定对于术语t3
,接受任何destination-port
值。筛选器表如下所示:
术语 |
源地址 |
目标地址 |
目标端口 |
行动 |
---|---|---|---|---|
T3 |
订户地址 |
203.0.113.2/32 |
任意(通配符) |
计数t3_cntr 接受 |
T55 |
订户地址 |
203.0.113.2/32 |
http |
计数t55_cntr 接受 |
T999 |
订户地址 |
203.0.113.2/32 |
https |
计数t999_cntr 接受 |
在以下过滤器配置中,目标端口匹配项t55
的http
流量和目标端口https
匹配项t999
的流量。目标端口不是http
或https
与术语 t3
匹配的流量,术语是隐含的通配符。
隐含通配符示例
firewall { family inet { fast-update-filter psf1 { interface-specific; match-order [ source-address destination-address dscp protocol destination-port ]; term t3 { from { source-address $junos-subscriber-ip-address; destination-address 203.0.113.2/32; } then { count t3_cntr; accept; } } term t55 { from { source-address $junos-subscriber-ip-address; destination-address 203.0.113.2/32; destination-port http; } then { count t55_cntr; accept; } } term t999 { from { source-address $junos-subscriber-ip-address; destination-address 203.0.113.2/32; destination-port https; } then { count t999_cntr; accept; } } } } }
范围重叠导致的冲突
本节显示术语重叠范围的两个示例。在术语中使用范围(如通配符或值范围)时,范围不得重叠 - 重叠的范围会产生冲突错误,会话将失败。
在以下筛选器配置中, destination-port
两个术语中的范围重叠。从 50 到 80 的端口与术语 src0
和术语 src1
匹配,每个端口指定要执行的不同操作。
您可以在一个术语中配置范围,并在另一个术语中配置完全匹配。有关在一个术语中使用通配符表示匹配条件并在第二个术语中使用条件完全匹配的示例,请参阅 使用隐含通配符部分。
术语 |
源地址 |
目标地址 |
目标端口 |
行动 |
---|---|---|---|---|
SRC0 |
订户地址 |
203.0.113.2/32 |
0–80 |
计数c1_cntr 接受 |
SRC1 |
订户地址 |
203.0.113.2/32 |
50–100 |
计数c2_cntr 接受 |
重叠范围示例 1
firewall { family inet { fast-update-filter fuf–src { interface-specific; match-order [ source-address destination-address destination-port ]; term src0 { from { source-address $junos-subscriber-ip-address; destination-address 203.0.113.2/32; destination-port 0–80; } then { count c1_cntr; accept; } } term src1 { from { source-address $junos-subscriber-ip-address; destination-address 203.0.113.2/32; destination-port 50–100; } then { count c2_cntr; accept; } } }
在此筛选器配置中, protocol
规范的术语 src21
和使用 src22
隐含的通配符,它为每个术语配置一个范围。由于不允许重叠范围,因此会产生冲突错误。
术语 |
源地址 |
目标地址 |
协议 |
目标端口 |
行动 |
---|---|---|---|---|---|
SRC20 |
订户地址 |
203.0.113.2/32 |
UDP |
任意(通配符) |
计数c20_cntr 接受 |
SRC21 |
订户地址 |
203.0.113.2/32 |
任意(通配符) |
http |
计数c21_cntr 接受 |
SRC21 |
订户地址 |
203.0.113.2/32 |
任意(通配符) |
https |
计数c22_cntr 接受 |
重叠范围示例 2
firewall { family inet { fast-update-filter fuf–src2 { interface-specific; match-order [ source-address destination-address protocol destination-port ]; term src20 { from { source-address $junos-subscriber-ip-address; destination-address 203.0.113.2/32; protocol udp; } then { count c20_cntr; accept; } } term src21 { from { source-address $junos-subscriber-ip-address; destination-address 203.0.113.2/32; destination-port http; } then { count c21_cntr; accept; } } term src22 { from { source-address $junos-subscriber-ip-address; destination-address 203.0.113.2/32; destination-port https; } then { count c22_cntr; accept; } } }