了解单播 RPF(路由器)
对于承载 IPv4 或 IPv6 流量的接口,您可以通过配置单播反向路径转发 (RPF) 来减少拒绝服务 (DoS) 攻击的影响。单播 RPF 有助于确定攻击源,并在启用了单播 RPF 的接口上拒绝来自意外源地址的数据包。
-
您可以通过在网络的边缘(在面向客户的接口上)应用单播 RPF 检查功能来保护网络。在 ISP 环境中,这可能会影响网络,从而对扩展设置施加影响。如果您已经保护了网络边缘,则具有欺骗性 IP 源地址的数据包甚至不会出现在面向核心的接口中。在这种情况下,不需要单播 RPF 检查。启用单播 RPF 功能可能会影响控制平面性能,因此请在需要时使用它。因此,强烈建议不要在网络核心(内部)接口上启用此功能。
目前在 PTX 平台上,配置 BGP 流规范 (flowspec) 会创建一个隐式过滤器来设置 VRF 实例。在 PTX 平台上,筛选器查找先于源/目标 IP 查找。因此,源和目标 IP 查找在 VRF 实例的上下文中进行。
单播 RPF 和默认路由
当无法从路由表中的路由中选择活动路由时,路由器将选择默认路由。默认路由相当于 IP 地址 0.0.0.0/0。如果配置默认路由,并在默认路由使用的接口上配置单播 RPF,则单播 RPF 的行为与其他方式不同。
要确定默认路由是否使用接口,请输入 show route
以下命令:
user@host> show route address
address
是配置的默认路由的下一跃点地址。默认路由使用命令输出 show route
中显示的接口。
以下部分介绍当默认路由使用接口和默认路由不使用接口时单播 RPF 的行为方式:
使用默认路由的单播 RPF 行为
在除具有 MPC 和 MX80 路由器的路由器之外的所有路由器上,如果配置的默认路由使用配置了单播 RPF 的接口,则单播 RPF 的行为如下:
松散模式 — 自动接受所有数据包。因此,我们建议您不要在默认路由使用的接口上配置单播 RPF 松散模式。
严格模式 — 当数据包的源地址与可通过接口访问的任何路由(默认路由或学习路由)匹配时,接受数据包。请注意,路由可以有多个与之关联的目的地;因此,如果其中一个目标与数据包的传入接口匹配,则会接受该数据包。
在所有具有 MPC 和 MX80 路由器的路由器上,如果配置的默认路由使用配置了单播 RPF 的接口,则单播 RPF 的行为如下所示:
松散模式 — 接受除从默认路由获知其源的数据包之外的所有数据包。从默认路由获知其源的所有数据包都将在数据包转发引擎上丢弃。默认路由被视为不存在。
严格模式 — 当数据包的源地址与可通过接口访问的任何路由(默认路由或学习路由)匹配时,接受数据包。请注意,路由可以有多个与之关联的目的地;因此,如果其中一个目标与数据包的传入接口匹配,则会接受该数据包。
在所有路由器上,如果满足以下任一条件,则不接受数据包:
数据包的源地址与路由表中的前缀不匹配。
接口不应接收具有此源地址前缀的数据包。
无默认路由的单播 RPF 行为
如果未配置默认路由,或者默认路由不使用配置了单播 RPF 的接口,则单播 RPF 的行为如 配置单播 RPF 严格模式 和 配置单播 RPF 松散模式中所述。总而言之,没有默认路由的单播 RPF 的行为如下所示:
严格模式 — 当满足以下任一条件时,不接受数据包:
数据包的源地址与路由表中的前缀不匹配。
接口不应接收具有此源地址前缀的数据包。
松散模式 — 当数据包的源地址与路由表中的前缀不匹配时,不接受数据包。
具有路由不对称的单播 RPF
通常,我们建议您不要在网络内部接口上启用单播 RPF,因为内部接口可能存在 路由不对称。路由不对称意味着数据包的传出路径和返回路径不同。与客户或提供商边缘的路由器相比,网络核心中的路由器更有可能出现非对称反向路径。 图 1 显示了路由不对称环境中的单播 RPF。
在 图 1 中,如果在接口 so-0/0/0
上启用单播 RPF ,则发往路由器 A 的流量不会被拒绝。如果在接口 so-1/0/1
上启用单播 RPF,则来自路由器 A 的流量将被拒绝。
如果需要在非对称路由环境中启用单播 RPF,可以使用故障过滤器来允许路由器接受已知通过特定路径到达的传入数据包。有关接受具有特定源地址和目标地址的数据包的故障过滤器的示例,请参阅 配置单播 RPF。
配置单播 RPF 严格模式
在严格模式下,单播 RPF 会检查传入数据包的源地址是否与路由表中的前缀匹配,以及接口是否希望接收具有此源地址前缀的数据包。
如果传入数据包未通过单播 RPF 检查,则接口不接受该数据包。当接口上不接受数据包时,单播 RPF 会对数据包进行计数,并将其发送到可选的故障过滤器。如果未配置故障过滤器,则默认操作是以静默方式丢弃数据包。
可选的故障过滤器允许您将过滤器应用于未通过单播 RPF 检查的数据包。可以定义失败筛选器以执行任何筛选器操作,包括接受、拒绝、日志记录、采样或管制。
在接口上启用单播 RPF 时,接口上不接受引导协议 (BOOTP) 数据包和动态主机配置协议 (DHCP) 数据包。要允许接口接受 BOOTP 数据包和 DHCP 数据包,必须应用失败过滤器,该过滤器接受源地址为、目标地址 0.0.0.0
为的所有 255.255.255.255.
数据包 有关配置示例,请参阅 配置单播 RPF。
有关定义故障过滤器的更多信息,请参阅 《路由策略》、《防火墙过滤器》和《流量监管器用户指南》。
要配置单播 RPF,请包含以下 rpf-check
语句:
rpf-check <fail-filter filter-name>;
您可以在以下层次结构级别包含此语句:
-
[edit interfaces interface-name unit logical-unit-number family (inet | inet6)]
-
[edit logical-systems logical-system-name interfaces interface-name unit logical-unit-number family (inet | inet6)]
使用单播 RPF 在使用流量过滤器实施时可能会产生多种后果:
-
RPF 故障滤波器在输入滤波器之后和输出滤波器之前进行评估。
-
如果为输入过滤器丢弃的数据包配置过滤器计数器,并且想知道丢弃的数据包总数,则还必须为 RPF 检查丢弃的数据包配置过滤器计数器。
-
要对未通过 RPF 检查并被 RPF 故障过滤器接受的数据包进行计数,必须配置过滤器计数器。
-
如果输入过滤器将数据包转发到 inet.0 或 inet6.0 路由表以外的任何位置,则不会执行单播 RPF 检查。
-
如果输入过滤器将数据包转发到为其配置输入接口的路由实例以外的任何位置,则不会执行单播 RPF 检查。
在上述项目符号列表中,第一、倒数第二和最后一点不适用于 MX 平台,因为在 MX 平台上,uRPF 是在执行防火墙过滤器之前处理的。在为静态和动态接口启用任何 FBF(基于过滤器的转发)操作之前,将处理 uRPF 检查以进行源地址检查。这适用于 IPv4 和 IPv6 系列。
在 ACX 和 MX 系列路由器上:
-
uRPF 故障过滤器在 ACX1000、ACX2000、ACX4000 以及 ACX500、ACX5048 和 ACX5096 上受支持。ACX5448、ACX710、ACX7100-32C、ACX7100-48、ACX7509 以及 ACX7000 系列的所有路由器都不支持该过滤器。
- uRPF 故障过滤器无法匹配在入口端口检查(严格模式)时失败的数据包。
- uRPF 故障过滤器可以匹配源 IP 查找失败的数据包,但无法匹配未通过输入接口检查的数据包(严格模式)。
- uRPF 故障过滤器仅适用于特定于接口的防火墙过滤器实例。
- uRPF 故障筛选器不支持拒绝和路由实例操作。
配置单播 RPF 严格模式,并应用允许接口接受 BOOTP 数据包和 DHCP 数据包的故障过滤器。过滤器接受源地址为 0.0.0.0
、目标地址 255.255.255.255
为 的所有数据包。
要在严格模式下配置单播 RPF:
配置单播 RPF 松散模式
默认情况下,单播 RPF 使用严格模式。单播 RPF 松散模式类似于单播 RPF 严格模式,并具有相同的配置限制。松散模式下的唯一检查是数据包在路由表中是否具有具有相应前缀的源地址;松散模式不会检查接口是否期望接收具有特定源地址前缀的数据包。如果未找到相应的前缀,则单播 RPF 松散模式不接受数据包。与严格模式一样,松散模式对失败的数据包进行计数,并选择性地将其转发到故障过滤器,后者接受、拒绝、记录、采样或策略数据包。
要配置单播 RPF 松散模式,请包括:mode
配置具有丢弃数据包功能的单播 RPF 松散模式
单播 RPF 松散模式能够丢弃源地址指向丢弃接口的数据包。使用单播 RPF 松散模式以及远程触发的空路由过滤,提供了一种丢弃来自已知攻击源的数据包的有效方法。边缘路由器中的 BGP 策略可确保具有不受信任源地址的数据包的下一跃点设置为丢弃路由。当数据包使用不受信任的源地址到达路由器时,单播 RPF 会执行源地址的路由查找。由于源地址路由指向丢弃下一跃点,因此将丢弃数据包并递增计数器。IPv4 (inet) 和 IPv6 (inet6) 地址家族都支持此功能。
要配置单播 RPF 松散模式并能够丢弃数据包,请在层次结构级别包含 rpf-loose-mode-discard family (inet | inet6)
语句 [edit forwarding-options]
:
rpf-loose-mode-discard { family { inet; } }
在此示例中,不需要除设备初始化之外的特殊配置。
配置单播 RPF 松散模式,并应用故障过滤器,以允许接口接受 BOOTP 数据包和 DHCP 数据包。过滤器接受源地址为 0.0.0.0
、目标地址 255.255.255.255
为 的所有数据包。
要配置能够丢弃数据包的单播 RPF 松散模式,请执行以下操作:
在 VPN 上配置单播 RPF
通过在接口上启用单播 RPF 并在层次结构级别包含 interface
语句 [edit routing-instances routing-instance-name]
,您可以在 VPN 接口上配置单播 RPF。
您只能在路由实例中指定的接口上配置单播 RPF。这意味着以下内容:
-
对于第 3 层 VPN,客户边缘路由器接口支持单播 RPF。
-
面向内核的接口不支持单播 RPF。
-
对于虚拟路由器路由实例,您在路由实例中指定的所有接口都支持单播 RPF。
-
如果输入过滤器将数据包转发到为其配置输入接口的路由实例以外的任何位置,则不会执行单播 RPF 检查。
在第 3 层 VPN 接口上配置单播 RPF:
[edit interfaces] so-0/0/0 { unit 0 { family inet { rpf-check; } } } [edit routing-instance] VPN-A { interface so-0/0/0.0; }
配置单播 RPF
配置单播 RPF 严格模式,并应用允许接口接受 BOOTP 数据包和 DHCP 数据包的故障过滤器。过滤器接受源地址为 0.0.0.0
、目标地址 255.255.255.255
为 的所有数据包。
[edit firewall] filter rpf-special-case-dhcp-bootp { term allow-dhcp-bootp { from { source-address { 0.0.0.0/32; } address { 255.255.255.255/32; } } then { count rpf-dhcp-bootp-traffic; accept; } } term default { then { log; reject; } } } [edit] interfaces { so-0/0/0 { unit 0 { family inet { rpf-check fail-filter rpf-special-case-dhcp-bootp; } } } }