基于地址字段的防火墙过滤器匹配条件
您可以配置 防火墙过滤器 匹配条件,以根据指定的地址或前缀值评估数据包地址字段(IPv4 源地址和目标地址、IPv6 源地址和目标地址或媒体访问控制 (MAC) 源地址)。
基于地址字段的防火墙过滤器匹配条件的“0/0 除外”地址上的隐式匹配
基于一组地址或地址前缀的每个防火墙过滤器匹配条件都与地址 0.0.0.0/0 except (对于 IPv4 或 VPLS 流量)或 0:0:0:0:0:0:0:0/0 except (对于 IPv6 流量)的隐式匹配相关联。因此,指定地址字段与任何指定地址或地址前缀不匹配的任何数据包都无法匹配整个术语。
将地址字段与子网掩码或前缀匹配
您可以指定单个匹配条件来匹配位于指定地址前缀内的源地址或目标地址。
IPv4 子网掩码表示法
对于 IPv4 地址,您可以指定子网掩码值,而不是前缀长度。例如:
[edit firewall family inet filter filter_on_dst_addr term term3 from] user@host# set address 10.0.0.10/255.0.0.255
前缀表示法
要指定地址前缀,请使用表示法 prefix/prefix-length。在以下示例中,如果目标地址与前缀 10.0.0.0/8匹配,则会发生匹配:
[edit firewall family inet filter filter_on_dst_addr term term1 from] user@host# set destination-address 10.0.0.0/8
IPv4 地址的默认前缀长度
如果未指定 /prefix-length IPv4 地址,则前缀长度默认为 /32。以下示例说明了默认前缀值:
[edit firewall family inet filter filter_on_dst_addr term term2 from] user@host# set destination-address 10 user@host# show destination-address { 10.0.0.0/32; }
IPv6 地址的默认前缀长度
如果未指定 /prefix-length IPv6 地址,则前缀长度默认为 /128。以下示例说明了默认前缀值:
[edit firewall family inet6 filter filter_on_dst_addr term term1 from] user@host# set destination-address ::10 user@host# show destination-address { ::10/128; }
MAC 地址的默认前缀长度
如果未为 /prefix-length VPLS、第 2 层 CCC 或第 2 层桥接数据包指定媒体访问控制 (MAC) 地址,则前缀长度默认为 /48。以下示例说明了默认前缀值:
[edit firewall family vpls filter filter_on_dst_mac_addr term term1 from] user@host# set destination-mac-address 01:00:0c:cc:cc:cd user@host# show destination-address { 01:00:0c:cc:cc:cd/48; }
将地址字段与排除的值匹配
对于地址字段匹配条件,您可以包含 except 关键字以指定与指定地址或前缀不匹配的地址字段进行匹配。
- 排除 IPv4 或 IPv6 流量中的 IP 地址
- 排除 VPLS 或第 2 层桥接流量中的 IP 地址
- 排除 VPLS 或第 2 层桥接流量中的 MAC 地址
- 排除所有地址需要显式匹配“0/0”地址
排除 IPv4 或 IPv6 流量中的 IP 地址
对于以下 IPv4 和 IPv6 匹配条件,您可以包含关键字 except 以指定与指定 IP 地址或前缀不匹配的 IP 地址字段进行匹配:
address address except- 如果源 IP 地址或目标 IP 地址与指定的地址或前缀不匹配,则会发生匹配。
source-address address except- 如果源 IP 地址与指定的地址或前缀不匹配,则会发生匹配。
destination-address address except- 如果目标 IP 地址与指定的地址或前缀不匹配,则会发生匹配。
在以下示例中,属于前缀 172.0.0.0/8 的任何 IPv4 目标地址都会发生匹配,但属于 172.16.0.0/16的地址除外。所有其他地址都隐式不符合此条件。
[edit firewall family inet filter filter_on_dst_addr term term1 from] user@host# set destination-address 172.16.0.0/16 except user@host# set destination-address 172.0.0.0/8 user@host# show destination-address { 172.16.0.0/16 except; 172.0.0.0/8; }
在以下示例中,不属于前缀 10.1.1.0/24的任何 IPv4 目标地址都会发生匹配:
[edit firewall family inet filter filter_on_dst_addr term term24 from] user@host# set destination-address 0.0.0.0/0 user@host# set destination-address 10.1.1.0/24 except user@host# show destination-address { 0.0.0.0/0; 10.1.1.0/24 except; }
排除 VPLS 或第 2 层桥接流量中的 IP 地址
仅对于 MX 系列路由器上的以下 VPLS 和第 2 层桥接匹配条件,您可以包含关键字 except 以指定与指定 IP 地址或前缀不匹配的 IP 地址字段进行匹配:
ip-address address except- 如果源 IP 地址或目标 IP 地址与指定的地址或前缀不匹配,则会发生匹配。
source-ip-address address except- 如果源 IP 地址与指定的地址或前缀不匹配,则会发生匹配。
destination-ip-address address except- 如果目标 IP 地址与指定的地址或前缀不匹配,则会发生匹配。
在以下用于过滤 MX 系列路由器上的 VPLS 流量的示例中,如果源 IP 地址在 的 55.0.1.0/255.0.255.0 例外范围内且目标 IP 地址匹配 5172.16.5.0/8,则会发生匹配:
[edit] firewall { family vpls { filter fvpls { term 1 { from { ip-address { 55.0.0.0/8; 55.0.1.0/255.0.255.0 except; } } then { count from-55/8; discard; } } } } }
排除 VPLS 或第 2 层桥接流量中的 MAC 地址
对于以下 VPLS 或第 2 层桥接流量匹配条件,您可以添加 except 关键字以指定与指定 MAC 地址或前缀不匹配的 MAC 地址字段进行匹配:
source-mac-address address except— 如果源 MAC 地址与指定的地址或前缀不匹配,则会发生匹配。
destination-mac-address address except— 如果目标 MAC 地址与指定的地址或前缀不匹配,则会发生匹配。
排除所有地址需要显式匹配“0/0”地址
如果指定的防火墙过滤器匹配条件包含一个或多个地址异常 匹配条件(使用 except 关键字的地址匹配条件),但没有 可匹配 地址匹配条件,则与任何已配置前缀都不匹配的数据包将无法执行整体匹配操作。要将地址例外匹配条件的防火墙过滤器术语配置为匹配不在前缀列表中的任何地址,请包括显式匹配 0/0 ,以便术语包含可匹配的地址。
对于以下示例 IPv4 流量的防火墙过滤器,from-trusted-addresses术语无法丢弃匹配的流量,并且INTRUDERS-COUNTshow firewall 操作模式命令的输出中缺少计数器:
[edit] user@host# show policy-options prefix-list TRUSTED-ADDRESSES { 10.2.1.0/24; 192.168.122.0/24; } [edit firewall family inet filter protect-RE] user@host# show term from-trusted-addresses { from { source-prefix-list { TRUSTED-ADDRESSES except; } protocol icmp; } then { count INTRUDERS-COUNT; discard; } } term other-icmp { from { protocol icmp; } then { count VALID-COUNT; accept; } } term all { then accept; }
[edit] user@host# run show firewall Filter: protect-RE Counters: Name Bytes Packets VALID-COUNT 2770 70 Filter: __default_bpdu_filter__
要使地址异常匹配条件的筛选词与不在前缀列表中的任何地址匹配,请在匹配条件集中包括显式匹配 0/0 :
[edit firewall family inet filter protect-RE] user@host# show term from-trusted-addresses from { source-prefix-list { 0.0.0.0/0; TRUSTED-ADDRESSES except; } protocol icmp; }
将源前缀地址添加到 0.0.0.0/0 匹配条件后, from-trusted-addresses 术语将丢弃匹配流量,并在操作模式命令的 show firewall 输出中显示 INTRUERS-COUNT 计数器:
[edit] user@host# run show firewall Filter: protect-RE Counters: Name Bytes Packets VALID-COUNT 2770 70 INTRUDERS-COUNT 420 5 Filter: __default_bpdu_filter__
将任一 IP 地址字段与单个值匹配
对于 IPv4 和 IPv6 流量以及 MX 系列路由器上的 VPLS 和 2 层桥接流量,您可以使用单个匹配条件将单个地址或前缀值与源或目标 IP 地址字段进行匹配。
匹配 IPv4 或 IPv6 流量中的 IP 地址字段
对于 IPv4 或 IPv6 流量,您可以使用单个匹配条件为源或目标 IP 地址字段指定与匹配相同的地址或前缀值。您可以仅使用匹配address条件,而不是创建单独的筛选词来为 和destination-address匹配条件指定相同的地址source-address。如果源 IP 地址或目标 IP 地址与指定的地址或前缀匹配,则会发生匹配。
如果将except关键字与匹配条件一起使用address,则在应用异常之前,如果源 IP 地址和目标 IP 地址都匹配指定值,则会发生匹配。
在指定 source-address 匹配条件或匹配条件的 destination-address 防火墙过滤器术语中,不能同时指定 address 匹配条件。
匹配 VPLS 中的 IP 地址字段或第 2 层桥接流量
仅对于 MX 系列路由器上的 VPLS 或第 2 层桥接流量,您可以使用单个匹配条件为源或目标 IP 地址字段指定与匹配相同的地址或前缀值。您可以仅使用匹配ip-address条件,而不是创建单独的筛选词来为 和destination-ip-address匹配条件指定相同的地址source-ip-address。如果源 IP 地址或目标 IP 地址与指定的地址或前缀匹配,则会发生匹配。
如果将except关键字与匹配条件一起使用ip-address,则在应用异常之前,如果源 IP 地址和目标 IP 地址都匹配指定值,则会发生匹配。
在指定 source-ip-address 匹配条件或匹配条件的 destination-ip-address 防火墙过滤器术语中,不能同时指定 ip-address 匹配条件。
将地址字段与不连续前缀匹配
仅对于 IPv4 流量,请指定单个匹配条件,以将 IP 源或目标地址字段与指定的任何前缀进行匹配。前缀不必是连续的。也就是说,或destination-address匹配条件下的前缀source-address不需要彼此相邻或相邻。
在以下示例中,如果目标地址与前缀或192.168.0.0/32前缀匹配10.0.0.0/8,则会发生匹配:
[edit firewall family inet filter filter_on_dst_addr term term5 from] user@host# set destination-address 10.0.0.0/8 user@host# set destination-address 192.168.0.0/32 user@host# show destination-address { destination-address 10.0.0.0/8; destination-address 192.168.0.0/32; }
在匹配条件中指定前缀的顺序并不重要。根据匹配条件中的所有前缀评估数据包,以确定是否发生匹配。如果前缀重叠,则使用最长匹配规则来确定是否发生匹配。非连续前缀的匹配条件包含隐式 0/0 except 语句,这意味着任何与匹配条件中包含的任何前缀不匹配的前缀都会被显式视为不匹配。
由于前缀与顺序无关并使用最长匹配规则,因此只要较长的前缀是相同的类型(无论是否指定 except ),较长的前缀就会包含较短的前缀。这是因为任何与较长前缀匹配的内容也会与较短的前缀匹配。
请考虑以下示例:
[edit firewall family inet filter filter_on_src_addr term term1 from] source-address { 172.16.0.0/10; 172.16.2.0/24 except; 192.168.1.0; 192.168.1.192/26 except; 192.168.1.254; 172.16.3.0/24; # ignored 10.2.2.2 except; # ignored }
在匹配条件中 source-address ,将忽略两个地址。该 172.16.3.0/16 值被忽略,因为它属于地址 172.16.0.0/10,这是相同的类型。10.2.2.2 except该值将被忽略,因为它被隐式0.0.0.0/0 except匹配值所包含。
假设此防火墙过滤器评估以下源 IP 地址:
源 IP 地址 172.16.1.2— 此地址与前缀匹配 172.16.0.0/10 ,因此将执行语句中的 then 操作。
源 IP 地址 172.16.2.2— 此地址与 172.16.2.0/24 前缀匹配。由于此前缀被否定(即包含 except 关键字),因此会发生显式 不匹配 。评估筛选器中的下一个项(如果有)。如果没有更多术语,则丢弃数据包。
源 IP 地址 10.1.2.3— 此地址与条件中包含的 source-address 任何前缀都不匹配。相反,它匹配在source-address匹配条件下配置的前缀列表末尾的隐式0.0.0.0/0 except,并被视为不匹配。
172.16.3.0/24该语句将被忽略,因为它属于地址 172.16.0.0/10— 两者的类型相同。
该10.2.2.2 except语句将被忽略,因为它包含在根据匹配条件配置source-address的前缀列表末尾的隐0.0.0.0/0 except式语句中。
当防火墙过滤器术语包括 from address address 匹配条件,而后续术语包括 from source-address address 同一地址的匹配条件时,数据包可能会先由后一项处理,然后再由任何干预术语进行评估。因此,应该预条款拒绝的数据包可能会被接受,或者应该接受的数据包可能会被拒绝。
为防止这种情况发生,我们建议您执行以下操作。对于包含匹配条件的每个 from address address 防火墙过滤器术语,请将该术语替换为两个单独的术语:一个包含匹配条件,另一个包含from source-address addressfrom destination-address address匹配条件。
将地址字段与前缀列表匹配
您可以定义 IPv4 或 IPv6 地址前缀列表,以便在路由策略语句或评估数据包地址字段的无状态防火墙过滤器匹配条件中使用。
要定义 IPv4 或 IPv6 地址前缀的列表,请包含 prefix-list prefix-list 该语句。
prefix-list name { ip-addresses; apply-path path; }
您可以在以下层次结构级别包含该语句:
[edit policy-options]
[edit logical-systems logical-system-name policy-options]
定义前缀列表后,在基于 IPv4 或 IPv6 地址前缀指定防火墙过滤器匹配条件时,可以使用该列表。
[edit firewall family family-name filter filter-name term term-name] from { source-prefix-list { prefix-lists; } destination-prefix-list { prefix-lists; } }