Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

BGP 起源验证

了解 BGP 的源验证

源验证有助于防止意外播发路由。有时,网络管理员会错误地将路由播发到他们无法控制的网络。您可以通过配置源验证(也称为安全域间路由)来解决此安全问题。源验证是一种机制,通过该机制,可以验证路由播发是否源自预期的自治系统 (AS)。源验证使用一个或多个资源公钥基础结构 (RPKI) 缓存服务器对指定的 BGP 前缀执行身份验证。为了验证前缀,路由器(BGP 扬声器)查询从缓存服务器下载的已验证前缀到 AS 映射的数据库,并确保前缀源自预期的 AS。

注:

启用 RPKI 身份验证后,Junos OS 会自动打开 TCP 端口 2222,恕不另行通知。您可以应用过滤器来阻止和保护此端口。

Junos OS 支持 IPv4 和 IPv6 前缀的源验证。

图 1 显示了示例拓扑。

图 1: 用于源验证的示例拓扑用于源验证的示例拓扑

支持的标准

Junos OS 源验证实施支持以下 RFC 和草案:

  • RFC 6810, 资源公钥基础架构 (RPKI) 到路由器协议

  • RFC 6811,BGP 前缀源验证

  • 互联网草案 draft-ietf-sidr-origin-validation-signaling-00,BGP 前缀源验证状态扩展社区 (部分支持)

    Junos OS 路由策略支持扩展社区(源验证状态)。不支持路由选择过程中的指定更改。

原产地验证的工作原理

RPKI 和源验证使用 X.509 证书以及 RFC 3779、 IP 地址和 AS 标识符的 X.509 扩展中指定的扩展名。

RPKI 由分布式信息集合组成。每个证书颁发机构在特定位置发布其最终实体 (EE) 证书、证书吊销列表 (CRL) 和签名对象。所有这些存储库构成了一组完整的信息,可供每个 RPKI 缓存服务器使用。

每个 RPKI 缓存服务器通过定期将本地缓存中的每个元素与原始资料库发布点同步来维护整个分布式资料库集合的本地缓存。

在路由器上,数据库条目的格式设置为 路由验证 (RV) 记录。RV 记录是一个(前缀、最大长度、源 AS)三元组。它匹配前缀与 RV 前缀匹配、前缀长度不超过 RV 记录中给出的最大长度且源 AS 等于 RV 记录中给出的源 AS 的任何路由。

RV 记录是 路由源授权 (ROA) 的简化版本。ROA 是一个数字签名对象,它提供了一种方法来验证 IP 地址块持有者是否已授权 AS 发起至地址块中一个或多个前缀的路由。ROA 不会直接用于路由验证。缓存服务器将简化版本的 ROA 作为 RV 记录导出到路由器。

最大长度值必须大于或等于授权前缀的长度,并且小于或等于地址族中 IP 地址的长度(以位为单位)(IPv4 为 32,IPv6 为 128)。最大长度定义 AS 有权播发的 IP 地址前缀。

例如,如果 IP 地址前缀为 200.4.66/24,最大长度为 26,则 AS 有权播发 200.4.66.0/24、200.4.66.0/25、200.4.66.128/25、200.4.66.0/26、200.4.66.64/26、200.4.66.128/26 和 200.4.66.192/26。当不存在最大长度时,AS 仅被授权准确播发 RV 中指定的前缀。

再例如,RV 可以包含最大长度为 26 的前缀 200.4.66/24,以及最大长度为 28 的前缀 200.4.66.0/28。此 RV 将授权 AS 通告以 200.4.66 开头且长度至少为 24 且不大于 26 的任何前缀,以及特定前缀 200.4.66.0/28。

路由原点由 AS_PATH 属性中最右侧的 AS 编号表示。源验证的方式是将路由更新中的源 AS 与 RV 记录中发布的已授权来源 AS 进行比较。

对于顽固的攻击者,仅使用源验证的话,安全性非常弱,因为当此类攻击者欺骗来源 AS 时,完全无法防范。也就是说,源验证提供了针对意外公告的有用保护。

尽管可以通过让每个路由器直接参与 RPKI 来实现源验证,但这被视为过于资源密集型(因为验证 RPKI 数据需要许多公钥加密操作)以及在每个路由器上设置和维护 RPKI 配置的操作密集型。因此,单独的 RPKI 缓存服务器会执行公共密钥验证,并生成一个已验证的前缀到 AS 的映射数据库。经过验证的数据库通过安全的 TCP 连接下载到客户端路由器。因此,路由器几乎不需要有关 RPKI 基础架构的信息,并且除了加密传输密码外,没有公钥加密要求。路由器随后使用下载的数据来验证收到的路由更新。

配置服务器会话时,可以将会话分组在一起,并为组中的每个会话配置会话参数。路由器会定期尝试设置可配置的最大缓存服务器连接数。如果连接设置失败,则会定期进行新的连接尝试。

同时,将验证导入策略应用于 BGP 会话后,无论缓存会话状态(打开或关闭)和 RV 数据库(空或不空)如何,都会执行路由验证。如果 RV 数据库为空或没有任何缓存服务器会话启动,则每个路由的验证状态将设置为未知,因为不存在用于评估收到的 BGP 前缀的 RV 记录。

重试尝试周期是可配置的。成功连接到缓存服务器后,路由器将查询最新的数据库序列号,并请求 RPKI 缓存传输属于该版本数据库的所有 RV 条目。

每条入站消息都会重置 RPKI 缓存服务器的活动计时器。获知所有更新后,路由器会根据可配置的时间间隔执行定期实时性检查。这是通过发送串行查询协议数据单元 (PDU) 来完成的,该数据单元的序列号与缓存服务器在其最新通知 PDU 中报告的序列号相同。缓存服务器使用零个或多个更新和数据结束 (EOD) PDU 进行响应,这也会刷新缓存服务器的活动状态并重置记录生存期计时器。

从外部 BGP (EBGP) 对等方接收到前缀时,导入策略会对其进行检查,并将其标记为有效、无效、未知或未验证:

  • 有效 - 指示在数据库中找到前缀和 AS 对。

  • 无效 — 指示已找到前缀,但从 EBGP 对等方接收的相应 AS 不是数据库中显示的 AS,或者 BGP 更新消息中的前缀长度超过数据库中允许的最大长度。

  • 未知 - 指示前缀不在数据库中的前缀或前缀范围之内。

  • 未验证 - 指示未针对数据库验证前缀的来源。这是因为数据库已填充,并且 BGP 导入策略中未调用验证,尽管启用了源验证,或者未为 BGP 对等方启用源验证。

如果验证数据库中存在路由的任何潜在匹配项,则该路由必须与其中一个匹配项才能有效。否则,它是无效的。任何匹配都足以使路由有效。它不一定是最好的匹配。仅当没有潜在的匹配项时,路由才会被视为未知。有关前缀到 AS 的映射数据库逻辑的更多信息,请参阅互联网草案 draft-ietf-sidr-pfx-validate-01 中的第 2 节, BGP 前缀源验证。

注:

RPKI 验证仅在主实例中可用。如果为路由实例配置 RPKI 验证,则 RPKI 验证将失败,并显示以下错误消息 。RV instance is not running

BGP 与路由验证数据库的交互

路由验证 (RV) 数据库包含路由器从 RPKI 缓存服务器下载的 RV 记录集合。在 RV 数据库中填充 RV 记录后,RV 数据库会扫描 RIB 本地路由表,以确定 RIB 本地中是否存在任何可能受数据库中 RV 记录影响的前缀。(RIB-Local 包含命令输出 中显示的 IPv4 和 IPv6 路由。show route protocol bgp

此过程会触发 BGP 导入策略(而不是导出策略)的 BGP 重新评估。

图 2 显示了该过程。

图 2: BGP 和路由验证

导入策略将应用于 RIB-In。理解这一点的另一种方法是,导入策略应用于命令输出 中显示的路由,而导出策略应用于命令显示 的路由。show route receive-protocol bgpshow route advertising-protocol bgp

如 中 所示,您可以使用导入路由策略来控制 BGP 在路由表中放置哪些路由,并使用导出路由策略来控制 BGP 从路由表播发到其邻居的路由。图 3

图 3: 导入和导出路由策略导入和导出路由策略

配置路由验证导入策略时,策略配置使用 匹配条件。validation-database 此匹配条件会在 RV 数据库中触发对给定路由实例中前缀验证状态的查询。默认操作是查询与路由实例匹配的验证数据库。如果未找到路由验证实例,则查询主实例。

在以下 BGP 导入策略中,条件会 触发路由器 RV 数据库中的查找。from validation-database 如果验证状态有效,则执行操作。操作是接受路由并将路由表中的设置为 有效。validation-state

用于向 IBGP 邻居通告 RPKI 验证状态的社区属性

前缀验证仅适用于外部 BGP (EBGP) 更新。在 AS 中,您可能不希望在每台内部 BGP (IBGP) 路由器上都运行 RPKI 会话。相反,您需要一种方法来在整个 IBGP 网格中携带验证状态,以便所有 IBGP 说话方都具有一致的信息。这是通过在非传递扩展社区中携带验证状态来实现的。社区属性宣布并接收 IBGP 邻居之间的前缀的验证状态。

Junos OS 支持以下众所周知的路由验证扩展社区:

  • 源验证状态有效

  • 源验证状态无效

  • 来源验证状态未知

以下示例 BGP 导入策略是在与 RPKI 服务器有会话的路由器上配置的。

具有 RPKI 会话的路由器

以下示例 BGP 导入策略是在与 RPKI 服务器没有会话的 IBGP 对等路由器上配置的。

不带 RPKI 会话的 IBGP 对等路由器

不间断的活动路由和源验证

在具有双路由引擎且启用了 不间断活动 路由的路由器上配置源验证时,主路由引擎和备用路由引擎均具有 RV 数据库的副本。这两个 RV 数据库彼此保持同步。

路由器不会与 RPKI 服务器保持两个相同的会话。RPKI-RTR 协议仅在主路由引擎上运行。在备用路由引擎上,RPKI 缓存服务器会话始终关闭。

RV 数据库由主路由引擎通过其与 RPKI 服务器的会话进行主动维护。此数据库在备用路由引擎上复制。虽然备用路由引擎 上的会话已关闭,但复制的 RV 数据库确实包含 RV 记录。当备用路由引擎切换并成为主路由引擎时,它已具有完全填充的 RV 数据库。

要查看两个数据库的内容, 请使用和 命令。show validation databaseshow validation replication database

将前缀范围标记为“从不允许”

路由验证模型有一个主要缺点:它只提供积极的更新。它可以声明哪个 AS 是前缀的合法所有者。但是,它不能显式传达负面更新,例如:此前缀从不源自给定 AS。此功能可以在一定程度上使用 AS 0 解决方法提供。

Junos OS 实现不会尝试限制其来自缓存的输入。例如,如任何其他操作一样,安装并匹配包含源 AS 0 的 RV 记录。这样能够将某个前缀范围标记为永不允许通告,因为 AS 0 不是有效的 AS。RV 记录中的 AS 永远不会与从 EBGP 对等方接收的 AS 匹配。因此,任何匹配的前缀都会被标记为无效。

BGP 原产地验证的用例和优势

如果自治系统 (AS) 的管理员开始播发另一家公司分配的全部或部分网络,BGP 没有内置方法来识别错误并以避免服务中断的方式进行响应。

例如,假设客户网络中的管理员错误地播发了一条路由(假设为 10.65.153.0/24),将流量定向到客户的服务提供商 AS 1。此 /24 路由比实际内容提供程序 (10.65.152.0/22) 使用的路由更具体,后者将流量定向到 AS 2。由于路由器的工作方式,大多数路由器会选择更具体的路由,并将流量发送到 AS 1 而不是 AS 2。

当传输路由器传播更新的路径信息时,被劫持的前缀在互联网上广泛可见。无效路由可以在互联网上广泛分布,因为默认自由区 (DFZ) 中的路由器携带被劫持的路由。最终,正确的 AS 路径将还原到 BGP 对等方,但在此期间,服务可能会中断。

由于 BGP 依赖于传递信任模型,因此客户和提供商之间的验证非常重要。在以上示例中,服务提供商 AS 1 未验证 10.65.153.0/24 的错误播发。通过接受此播发并将其重新播发至对等方和提供商,AS 1 传播了错误的路由。从 AS 1 接收路由的路由器选择了此路由,因为它更具体。在错误发生之前,实际的内容提供商正在宣传 10.65.152.0/22。/24 是一个更小(更具体)的广告。按照通常的BGP路由选择过程,然后选择/24,有效地完成了劫持。

即使内容提供商快速检测和反应并与其他提供商合作,其前缀的服务也可能中断数分钟至数小时。中断的确切持续时间取决于您在互联网上的有利位置。当此类事件发生时,人们对解决此漏洞的方法重新产生了兴趣。BGP 是提供商关系的基础,不会很快消失。此示例演示使用源验证的解决方案。此解决方案依赖于对 BGP 的加密扩展和分布式客户端-服务器模型,以避免路由器 CPU 负担过重。

源验证使提供商能够限制其从客户接受的广告,从而有助于克服传递信任的脆弱性。这些机制涉及基于扩展 BGP 社区属性的路由策略通信。

示例:为 BGP 配置源验证

此示例说明如何通过确保从预期的自治系统 (AS) 发送(发起)收到的路由通告,在 BGP 对等方之间配置源验证。如果源 AS 已通过验证,则可以使用策略指定依次播发前缀。

要求

此示例具有以下硬件和软件要求:

  • 资源公钥基础结构 (RPKI) 缓存服务器,使用第三方软件对 BGP 前缀进行身份验证。

  • 在通过 TCP 连接与缓存服务器通信的路由设备上运行的 Junos OS 12.2 或更高版本。

概述

有时,由于操作员错误,无意中通告了路由。为了防止此安全问题,您可以配置 BGP 来验证始发 AS 并拒绝这些无效公告。 此功能使用缓存服务器对前缀或前缀范围进行身份验证。

以下配置语句启用源 AS 验证:

此示例使用验证参数的默认设置。

大多数可用的配置语句都是可选的。所需设置如下:

层次结构级别使您能够在路由设备上配置静态记录,从而覆盖从 RPKI 缓存服务器接收的记录。[edit routing-options validation static]

例如:

您可以配置基于路由前缀的验证状态运行的路由策略。您可以使用社区属性通告和接收外部 BGP (EBGP) 和内部 BGP (IBGP) 对等方之间的前缀的验证状态。在某些路由器上使用路由策略可能比配置与 RPKI 服务器的会话更方便。此示例演示了如何在 IBGP 对等方之间使用验证状态社区属性。

图 4 显示了示例拓扑。

图 4: 用于源验证的拓扑用于源验证的拓扑

在此示例中,设备 R0 具有与设备 R1 的 IBGP 连接和与设备 R2 的 EBGP 连接。设备 R0 使用互联网草案 draft-ietf-sidr-rpki-rtr-19( RPKI/路由器协议) 中定义的协议从缓存服务器接收路由验证 (RV) 记录,以发送 RV 记录。RPKI 路由器协议通过 TCP 运行。设备 R0 使用 RV 记录来构建本地 RV 数据库。在设备 R1 上,验证状态基于称为验证状态的 BGP 社区设置,该社区随路由一起接收。

配置

CLI 快速配置

要快速配置此示例,请复制以下命令,将其粘贴到文本文件中,删除所有换行符,更改与您的网络配置匹配所需的任何详细信息,然后将命令复制并粘贴到层次结构级别的 CLI 中。[edit]

设备 R0

设备 R1

设备 R2

配置设备 R0

分步过程

下面的示例要求您在各个配置层级中进行导航。有关导航 CLI 的信息,请参阅《Junos OS CLI 用户指南》中的在配置模式下使用 CLI 编辑器。在配置模式下使用 CLI 编辑器https://www.juniper.net/documentation/en_US/junos/information-products/pathway-pages/junos-cli/junos-cli.html

要配置设备 R0:

  1. 配置接口。

  2. 配置 BGP。

    应用导出策略,以便将直接路由从路由表导出到 BGP 中。send-direct

    应用导入策略, 为从设备 R0 的 EBGP 对等方导入(或接收)的所有路由设置验证状态和 BGP 社区属性。validation

    配置与设备 R1 的 IBGP 会话。配置与设备 R2 的 EBGP 会话。

  3. 在面向 IBGP 对等方的接口和环路接口上配置 OSPF(或其他内部网关协议 [IGP])。

    注:

    如果在 IBGP 语句中使用环路接口地址,则必须在环路接口上启用 IGP 。neighbor 否则,不会建立 IBGP 会话。

  4. 配置将路由表中的直接路由导出到 BGP 的路由策略。

  5. 配置路由策略,根据每个 BGP 路由的验证状态指定要修改的属性。

  6. 配置与 RPKI 缓存服务器的会话。

  7. 配置自治系统 (AS) 编号。

成果

在配置模式下,输入 show interfacesshow protocolsshow policy-optionsshow routing-options 命令,以确认您的配置。如果输出未显示预期的配置,请重复此示例中的说明,以便进行更正。

如果完成设备配置,请从配置模式输入 commit

配置设备 R1

分步过程

下面的示例要求您在各个配置层级中进行导航。有关导航 CLI 的信息,请参阅《Junos OS CLI 用户指南》中的在配置模式下使用 CLI 编辑器。在配置模式下使用 CLI 编辑器https://www.juniper.net/documentation/en_US/junos/information-products/pathway-pages/junos-cli/junos-cli.html

要配置设备 R1:

  1. 配置接口。

  2. 配置 BGP。

    应用导入策略,为从设备 R1 的 IBGP 对等方接收的所有路由设置验证状态和 BGP 社区属性。validation-ibgp

    配置与设备 R0 的 IBGP 会话。

  3. 配置 OSPF。

  4. 配置路由策略,该策略根据从设备 R0 接收的 BGP 路由的验证状态 BGP 社区属性指定要修改的属性。

  5. 配置自治系统 (AS) 编号。

成果

在配置模式下,输入 show interfacesshow protocolsshow policy-optionsshow routing-options 命令,以确认您的配置。如果输出未显示预期的配置,请重复此示例中的说明,以便进行更正。

如果完成设备配置,请从配置模式输入 commit

配置设备 R2

分步过程

下面的示例要求您在各个配置层级中进行导航。有关导航 CLI 的信息,请参阅《Junos OS CLI 用户指南》中的在配置模式下使用 CLI 编辑器。在配置模式下使用 CLI 编辑器https://www.juniper.net/documentation/en_US/junos/information-products/pathway-pages/junos-cli/junos-cli.html

要配置设备 R2:

  1. 配置接口。

    环路接口上配置了多个地址作为演示目的的路由。

  2. 配置 BGP。

  3. 配置路由策略。

  4. 配置自治系统 (AS) 编号。

成果

在配置模式下,输入 show interfacesshow protocolsshow policy-optionsshow routing-options 命令,以确认您的配置。如果输出未显示预期的配置,请重复此示例中的说明,以便进行更正。

如果完成设备配置,请从配置模式输入 commit

验证

确认配置工作正常。

验证修改后的属性是否显示在路由表中

目的

验证设备 R0 和设备 R1 上的 BGP 路由是否具有预期的验证状态和预期的本地首选项。

操作

在操作模式下,输入 show route 命令。

意义

根据从 RPKI 缓存服务器接收的信息,路由具有预期的验证状态和本地首选项值。

使用跟踪操作

目的

配置用于源验证的追踪操作,并监控新播发的路由的结果。

操作
  • 在设备 R0 上,配置跟踪。

  • 在设备 R2 上,通过在环路接口上添加另一个地址来添加路由。

  • 在设备 R0 上,检查跟踪文件。

意义

路由验证按预期运行。

显示验证信息

目的

运行各种验证命令。

操作