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、 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 可以包含前缀 200.4.66/24(最大长度为 26)以及前缀 200.4.66.0/28(最大长度为 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、 BGP 前缀源验证的第 2 节。

注:

RPKI 验证仅在主实例中提供。如果为路由实例配置 RPKI 验证,则 RPKI 验证会因以下错误消息 RV instance is not running而失败。

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 和路由验证

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

如 中 图 3所示,您使用导入路由策略来控制路由表中的 BGP 位置,并导出路由策略来控制 BGP 从路由表播发到其邻接方的路由。

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

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

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

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

前缀验证仅针对外部 BGP (EBGP) 更新完成。在 AS 中,您可能不希望在每个内部 BGP (IBGP) 路由器上运行 RPKI 会话。相反,您需要一种方法来跨 IBGP 网状传输验证状态,以便所有 IBGP 发送方均具有一致的信息。这是通过在非过渡扩展社区中承载验证状态来实现的。公共组属性在 IBGP 邻接方之间宣布并接收前缀的验证状态。

Junos OS 支持以下知名扩展社区进行路由验证:

  • 源-验证-状态-有效

  • 源-验证-状态-无效

  • 源-验证-状态-未知

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

具有 RPKI 会话的路由器

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

不带 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 路由比将流量定向至 AS 2 的实际内容提供商 (10.65.152.0/22) 使用的路由更为具体。由于路由器的工作方式,大多数路由器选择更具体的路由并将流量发送到 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 前缀进行身份验证。

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

概述

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

以下配置语句支持源 AS 验证:

此示例将默认设置用于验证参数。

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

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

例如:

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

图 4 显示了示例拓扑。

图 4: 源验证拓扑 源验证拓扑

在此示例中,设备 R0 具有与设备 R1 的 IBGP 连接和与设备 R2 的 EBGP 连接。设备 R0 使用互联网草案 draft-ietf-sidr-rpki-rtr-19 中定义的协议从缓存服务器接收路由验证 (RV) 记录, 发送 RV 记录。RPKI 路由器协议在 TCP 上运行。RV 记录由设备 R0 用于构建本地 RV 数据库。在设备 R1 上,验证状态基于通过路由接收的 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 上,检查追踪文件。

意义

路由验证正在如预期的那样运行。

显示验证信息

目的

运行各种验证命令。

行动