基于地址字段的防火墙过滤器匹配条件
您可以配置 防火墙过滤器 匹配条件,以便根据指定的地址或前缀值评估数据包地址字段(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 术语会丢弃匹配流量,而 INTRUDERS-COUNT 计数器显示在操作模式命令的 show firewall 输出中:
[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使用匹配条件,而不是创建为source-address和destination-address匹配条件指定相同地址的单独过滤器术语。如果源 IP 地址或目标 IP 地址与指定的地址或前缀匹配,将发生匹配。
如果将关键字与address匹配条件一起使用except,则当源 IP 地址和目标 IP 地址均与指定值匹配时,将发生匹配,然后才会例外。
在指定匹配条件或匹配条件的source-address防火墙过滤器术语中destination-addressaddress,您也不能指定匹配条件。
匹配 VPLS 或 2 层桥接流量中的 IP 地址字段
仅适用于 MX 系列路由器上的 VPLS 或第 2 层桥接流量,您可以使用单个匹配条件将相同的地址或前缀值指定为源或目标 IP 地址字段的匹配值。您只能ip-address使用匹配条件,而不是创建为source-ip-address和destination-ip-address匹配条件指定相同地址的单独过滤器术语。如果源 IP 地址或目标 IP 地址与指定的地址或前缀匹配,将发生匹配。
如果将关键字与ip-address匹配条件一起使用except,则当源 IP 地址和目标 IP 地址均与指定值匹配时,将发生匹配,然后才会例外。
在指定匹配条件或匹配条件的source-ip-address防火墙过滤器术语中destination-ip-addressip-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 address 匹配条件,另一个包含 from 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; } }