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。

注意:

在 Junos OS 20.1R3、20.2R3、20.3R2、20.4R2、21.1R1 之前,启用 RPKI 身份验证时,Junos OS 会自动打开 TCP 端口 2222,恕不另行通知。您可以应用过滤器来阻止和保护此端口。

从 Junos OS 20.1R3、20.2R3、20.3R2、20.4R2、21.1R1 版开始,启用 RPKI 身份验证时,Junos OS 不再自动打开 TCP 端口 2222。

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

图 1 显示了示例拓扑。

图 1:用于源验证 Network diagram showing two sites within AS 100. Site 1 has a PoP with a cache server; both sites have interconnected routers.的示例拓扑

支持的标准

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

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

  • RFC 6811,BGP 前缀源验证

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

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

源验证的工作原理

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

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 播发长度至少为 24 且不超过 26 的任何以 200.4.66 开头的前缀,以及特定前缀 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《 BGP 前缀源验证》中的第 2 节。

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

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

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

图 2 显示了该过程。

图 2:BGP 和路由验证
Architecture and workflow of RPKI for securing BGP routing, featuring components like remote distributed RPKI repository, RPKI cache server, RPKI-RTR protocol, route validation database, BGP routing table, and event-based reevaluation of import policy.

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

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

图 3:导入和导出路由策略 Diagram of network routing process showing flow of routing info from neighbors through import policies into routing table, then to export policies and neighbors. Forwarding table is derived from routing table for packet forwarding.

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

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

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

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

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

  • 源验证状态有效

  • 源验证状态无效

  • 来源验证状态未知

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

具有 RPKI 会话的路由器

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

没有 RPKI 会话的 IBGP 对等路由器

不间断主动路由和源验证

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

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

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

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

将前缀范围标记为永不允许

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

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

BGP 源验证的用例和好处

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

例如,假设客户网络中的管理员错误地播发了将流量定向至客户的服务提供商 AS 1 的路由(例如 10.65.153.0/24)。此 /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,有效完成劫持。

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

源验证使提供商能够限制其从客户那里接受的播发,从而帮助克服传递信任的漏洞。机制涉及基于扩展的 BGP 社区属性的路由策略的通信。

示例:为 BGP 配置源验证

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

要求

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

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

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

概述

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

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

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

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

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

例如:

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

图 4 显示了示例拓扑。

图 4:源验证 Network topology diagram with Cache 1 server, central router R0 in AS 65100, R1 router in AS 65100 via IBGP, and R2 router in AS 65200 via EBGP.拓扑

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

配置

CLI 快速配置

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

设备 R0

设备 R1

设备 R2

配置设备 R0

分步程序

下面的示例要求您在各个配置层级中进行导航。有关导航CLI的信息,请参阅《Junos OS CLI 用户指南》中的在配置模式下使用CLI编辑器

要配置设备 R0:

  1. 配置接口。

  2. 配置 BGP。

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

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

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

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

    注意:

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

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

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

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

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

结果

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

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

配置设备 R1

分步程序

下面的示例要求您在各个配置层级中进行导航。有关导航CLI的信息,请参阅《Junos OS CLI 用户指南》中的在配置模式下使用CLI编辑器

要配置设备 R1:

  1. 配置接口。

  2. 配置 BGP。

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

    配置与设备 R0 的 IBGP 会话。

  3. 配置 OSPF。

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

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

结果

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

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

配置设备 R2

分步程序

下面的示例要求您在各个配置层级中进行导航。有关导航CLI的信息,请参阅《Junos OS CLI 用户指南》中的在配置模式下使用CLI编辑器

要配置设备 R2:

  1. 配置接口。

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

  2. 配置 BGP。

  3. 配置路由策略。

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

结果

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

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

验证

确认配置工作正常。

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

目的

验证设备 R0 和设备 R1 上的 BGP 路由是否具有预期的验证状态和预期的本地优先级。

行动

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

意义

路由具有预期的验证状态和本地优先级值(基于从 RPKI 缓存服务器接收的信息)。

使用追踪操作

目的

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

行动
  • 在设备 R0 上,配置跟踪。

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

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

意义

路由验证按预期运行。

显示验证信息

目的

运行各种验证命令。

行动