防火墙根据地址字段过滤匹配条件
您可以配置 防火墙过滤器 匹配条件,根据指定的地址或前缀值评估数据包地址字段(IPv4 源和目标地址、IPv6 源和目标地址或媒体访问控制 (MAC) 源和目标地址)。
用于基于地址字段的防火墙过滤器匹配条件的“0/0 例外”地址上的隐含匹配
每个基于一组地址或地址前缀的防火墙过滤器匹配条件都与地址 0.0.0.0/0 ( 对于 IPv4 或 VPLS 流量)或 0:0:0:0:0:0:0:0/0 ( 对于 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 地址的默认前缀长度
如果未为 IPv4 地址指定 /prefix-length ,则前缀长度默认为 /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 地址的默认前缀长度
如果未为 IPv6 地址指定 /prefix-length ,则前缀长度默认为 /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 地址的默认前缀长度
如果未为 VPLS、第 2 层 CCC 或第 2 层 桥接数据包的媒体访问控制 (MAC) 地址指定 /prefix-length ,则前缀长度默认为 /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 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 术语无法丢弃匹配的流量,并且 show firewall 操作模式命令的输出中缺少 INTRUDERS-COUNT 计数器:
[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-address {
0.0.0.0/0;
}
source-prefix-list {
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 地址字段与单个值进行匹配
仅对于 MX 系列路由器上的 IPv4 和 IPv6 流量以及 VPLS 和第 2 层 桥接流量,您可以使用单个匹配条件将单个地址或前缀值与源或目标 IP 地址字段进行匹配。
匹配 IPv4 或 IPv6 流量中的任一 IP 地址字段
对于 IPv4 或 IPv6 流量,您可以使用单个匹配条件来指定与源或目标 IP 地址字段匹配项相同的地址或前缀值。不要创建单独的过滤器术语来为 源-地址 和 目标-地址 匹配条件指定相同的地址,而是仅使用 地址 匹配条件。 如果源 IP 地址 或 目标 IP 地址与指定的地址或前缀匹配,则发生匹配。
如果将 except 关键字与地址匹配条件一起使用,则在例外应用之前,如果源 IP 地址和目标 IP 地址都与指定值匹配,则会发生匹配。
在指定 源地址 或 目标地址 匹配条件的防火墙过滤器术语中,不能同时指定 地址 匹配条件。
匹配 VPLS 中的 IP 地址字段或第 2 层桥接流量
仅对于 MX 系列路由器上的 VPLS 或第 2 层 桥接流量,您可以使用单个匹配条件来指定与源或目标 IP 地址字段匹配项相同的地址或前缀值。不要创建单独的过滤器术语来为 源 IP 地址 和 目标 IP 地址 匹配条件指定相同的地址,而应仅使用 ip 地址 匹配条件。 如果源 IP 地址 或 目标 IP 地址与指定的地址或前缀匹配,则发生匹配。
如果将 except 关键字与 ip-address 匹配条件一起使用,则在例外应用之前,如果源 IP 地址和目标 IP 地址都与指定值匹配,则会发生匹配。
在指定 源 IP 地址 或 目标 IP 地址 匹配条件的防火墙过滤器术语中,不能同时指定 IP 地址 匹配条件。
将地址字段与不连续前缀匹配
仅对于 IPv4 流量,指定一个匹配条件,以便将 IP 源或目标地址字段与指定的任何前缀进行匹配。前缀 不必是连续的。也就是说, 源地址 或 目标地址 匹配条件下的前缀不必彼此相邻或相邻。
在以下示例中,如果目标地址与 10.0.0.0/8 前缀或 192.168.0.0/32 前缀匹配,则为匹配:
[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 语句,这意味着任何与匹配条件中包含的任何前缀不匹配的前缀都会被显式视为不匹配。
由于前缀与顺序无关并使用最长匹配规则,因此只要较长的前缀是相同的类型(无论是否指定 ex ),较长的前缀就会包含较短的前缀。这是因为任何与较长前缀匹配的内容也将与较短的前缀匹配。
考虑以下示例:
[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
}
在 源地址 匹配条件中,将忽略两个地址。 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 — 此地址与 源地址 条件中包含的任何前缀都不匹配。相反,它与隐式 0.0.0.0/0 匹配,但在 源地址 匹配条件下配置的前缀列表末尾除外,并被视为不匹配。
172.16.3.0/24 语句将被忽略,因为它属于地址 172.16.0.0/10,两者是相同的类型。
10.2.2.2 except 语句将被忽略,因为它包含在源地址匹配条件下配置的前缀列表末尾的隐式 0.0.0.0/0 except 语句中。
如果防火墙过滤器术语包含 发件人地址 address 匹配条件,且后续术语包含同一地址的 发件人-源地址 address 匹配条件,则数据包可能先由后一项进行处理,然后再通过任何中间术语进行评估。因此,可能会接受应被中间条款拒绝的数据包,或者可能会拒绝应接受的数据包。
为防止这种情况发生,我们建议您执行以下操作。对于每个包含 发件人地址 address 匹配条件的防火墙过滤器术语,请将该术语替换为两个单独的术语:一个包含 发件人源地址 address 匹配条件,另一个包含 发件人目标地址 address 匹配条件。
将地址字段与前缀列表匹配
您可以定义一个 IPv4 或 IPv6 地址前缀列表,用于路由策略语句或用于评估数据包地址字段的无状态防火墙过滤器匹配条件。
要定义 IPv4 或 IPv6 地址前缀列表,请包含 prefix-list prefix-list 语句。
prefix-list name {
ip-addresses;
apply-path path;
}
您可以在以下层级包含该语句:
[编辑政策选项]
[编辑逻辑系统 logical-system-name 策略选项]
定义前缀列表后,您可以在基于 IPv4 或 IPv6 地址前缀指定防火墙过滤器匹配条件时使用它。
[edit firewall family family-name filter filter-name term term-name]
from {
source-prefix-list {
prefix-lists;
}
destination-prefix-list {
prefix-lists;
}
}