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 记录是 a (前缀、最大长度、来源)三层。它匹配其前缀与 RV 前缀匹配的任何路由,其前缀长度未超过 RV 记录中给定的最大长度,其原始位置等于 RV 记录中给定的原点。

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

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

例如,如果 IP 地址前缀为 200.4.66/24,并且最大长度为26,则表示授权公布 200.4.66.0/24、200.4.66.0/26、200.4.66.0/26、200.4.66.64/26 和 200.4.66.128/26。当最大长度不存在时,仅授权准确通告 RV 中指定的前缀。

作为另一个示例,RV 可以包含前缀 200.4.66/24 (最大长度为26)以及前缀 200.4.66.0/28 和最大长度28。此 RV 将授权从200.4.66 开始的任何前缀的长度至少为24、不大于26以及特定前缀 200.4.66.0/28。

路由的原点在 AS_PATH 属性中由最右端表示为编号。原始验证的运行方式是将原点与在 RV 记录中发布的授权来源相比较,而不是在路由更新中。

仅由原始验证提供的安全对于确定的攻击者来说是弱的,因为对于此类攻击者来说,不能防范对源的欺骗。也就是说,来源验证提供对意外公告的有用保护。

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

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

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

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

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

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

  • 有效 — 表示在数据库中AS对前缀和组。

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

  • 未知 — 表示前缀不在数据库中的前缀或前缀范围中。

  • 未经验证 — 指示未针对数据库验证前缀的来源。这是因为数据库已填充,并且不会在 BGP 导入策略中调用验证,但原始验证已启用,或者未对 BGP 对等方启用原始验证。

如果验证数据库中的路由存在任何潜在的匹配项,则路由必须匹配其中之一才能有效。否则,它无效。任何匹配都足以使路由有效。它无需成为最佳匹配。只有在没有潜在的匹配条件时,路由才被视为未知。有关前缀到 AS 映射数据库逻辑AS请参阅互联网草案 draft-ietf-sidr-pfx-validate-01 第 2 节,BGP 前缀源验证 。

注:

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

与路由验证数据库 BGP 交互

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

此过程会触发 BGP 导入策略(非出口政策)的 BGP 重新计算。

图 2显示了流程。

图 2: BGP 和路由验证

导入策略适用于筋-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的设置有效。

用于向 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 缓存服务器会话始终处于关闭状态。

主系统通过与 RPKI 服务器的会话主动路由引擎 RV 数据库。此数据库将复制到备用路由引擎上。尽管会话在备用路由引擎,但复制的 RV 数据库确实包含 RV 记录。当备用 路由引擎交换机切换成为主要路由引擎时,它已有一个完全填充的 RV 数据库。

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

将前缀范围标记为 "从不允许的"

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

Junos OS 实施不会尝试限制其从缓存中的输入。例如,安装和匹配来源为0的 RV 记录就像其他任何其他一样。这将允许解决方法将前缀范围标记为 "从不允许发布,因为 0" 不是有效 AS。AS in RV 记录决不会与从 EBGP 对等方接收的一样。因此,任何匹配的前缀都将标记为无效。

BGP 的来源验证用例和优势

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

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

由于传输路由器传播更新的路径信息,在 Internet 上广泛地发现被劫持的前缀。如果默认自由区域(DFZ)中的路由器携带截获的路由,则可在 Internet 上广泛分布无效路由。最终,正确的方法是将路径恢复至 BGP 对等方,但在此期间会出现服务中断。

由于 BGP 依赖于可传递信任模式,因此在客户和提供商之间进行验证至关重要。在上面的示例中,服务提供商1未验证 10.65.153.0/24 的错误通告。接受此通告并将其 readvertising 至其对等方和提供商,因为1传播了错误的路由。从1开始选择路由的路由器,因为它是更具体的路由。在发生错误之前,实际的内容提供商通告 10.65.152.0/22。/24 是一个较小(且更具体)的广告。根据通常的 BGP 路由选择流程,然后选择/24,有效地完成劫持。

即使对内容提供商进行快速检测和反应并与其他提供商合作,其前缀服务也可以在数分钟内中断几个小时。中断的确切持续时间取决于互联网上的排除优势点。发生这些类事件时,就会对此漏洞的解决方案进行更新。BGP 是提供商关系的基础,不久以后也不会离开。此示例演示使用原始验证的解决方案。此解决方案依赖于 BGP 的加密扩展和可避免 overtaxing 路由器 Cpu 的分布式客户端服务器模型。

原始验证通过使提供商能够限制它从客户处接受的广告,帮助克服可传递信任的漏洞。该机制涉及基于扩展 BGP 社区属性的路由策略的通信。

示例:配置 BGP 的来源验证

此示例演示如何在 BGP 对等方之间配置原始验证,方法是确保从预期自治系统(AS)发送(发起)接收的路由通告。如果原始 AS 已验证,策略可以指定依次通告前缀。

要求

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

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

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

概述

有时由于操作员错误,导致路由意外公布。为了防止此安全问题,您可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 中定义的协议 (RPKI/ 路由器协议)从缓存服务器接收路由验证 (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 interfaces输入、 show protocolsshow policy-options、和show routing-options命令以确认您的配置。如果输出未显示预期的配置,请重复此示例中的说明以更正配置。

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

配置设备 R1

分步过程

下面的示例要求您在配置层次结构中导航各个级别。有关导航指南CLI,请参阅 Junos OS CLI 指南 中的 在配置模式下使用 CLI编辑器

要配置设备 R1:

  1. 配置接口。

  2. 配置 BGP。

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

    使用设备 R0 配置 IBGP 会话。

  3. 配置 OSPF。

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

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

成果

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

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

配置设备 R2

分步过程

下面的示例要求您在配置层次结构中导航各个级别。有关导航指南CLI,请参阅 Junos OS CLI 指南 中的 在配置模式下使用 CLI编辑器

配置设备 R2:

  1. 配置接口。

    回传接口上配置了几个地址,用作演示目的的路由。

  2. 配置 BGP。

  3. 配置路由策略。

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

成果

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

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

针对

确认配置是否正常工作。

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

用途

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

行动

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

含义

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

使用跟踪操作

用途

配置源验证的跟踪操作,并监控新通告路由的结果。

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

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

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

含义

路由验证按预期运行。

显示验证信息

用途

运行各种验证命令。

行动