Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

配置 RPKI:资源公共密钥基础架构

 

Introducing Routing Security章节中,您看到了 RPKI 如何通过验证前缀的宣告来提供路由安全性。您还应该为自己的 IP 前缀创建 ROAs。现在是’登录路由器并设置 RPKI 的时候了!本章将创建运行 RPKI 验证程序的机器,并将您的网络配置为与之交谈,确保您的路由器可以使用 RPKI 验证前缀公告。

安装 RPKI 验证器

您的路由器实际上并不执行证书的加密检查。而是在您自己的网络中从信任锚点下载 ROAs 的机器上运行,并为您的路由器提供与之交谈的服务。故事从您自己的网络中的某个位置安装验证器开始。

撰写本文时,有两个生产就绪的 RPKI 验证程序可用。随着越来越多的网络实施 RPKI,未来可能会出现更多的验证程序。为帮助您入门,我们’将覆盖 RIPE NCC 开发和维护的一个验证器。

其他生产级验证程序已开发完毕,由 NLnet Labs 维护。有关此验证程序的更多信息,请访问:https://nlnetlabs.nl/projects/rpki/routinator/. (这’并非作者希望将您推入两个方向–之一,只需为示例选择一个验证器即可。)

RIPE RPKI 验证程序以 Java 编写,它需要至少安装 2 GB RAM、1 CPU 和 OpenJDK 8 的计算机(物理或虚拟)。确保机器可以到达互联网(用于将 ROAs 与信任锚点同步),并确保可从路由器访问该机器。

Tip

出于安全原因,您应在防火墙中实施独立且严格的安全规则,以确保只有机器的正确部分可到达,特别是面向 Internet 的侧面(显然需要特别注意)。

RIPE RPKI 验证程序项目由两个独立的可部署单元构成:

  • RPKI 验证器本身:这会下载并处理证书、清单、Crl、ROAs、路由器证书和 ghostbuster 记录等所有对象。它将缓存 RPKI 数据,并有一个(web)用户界面用于故障排除和允许列表。

  • RPKI-RTR 服务器:这就是路由器实际连接的内容。

RPKI-RTR 服务器被设置为单独的实例,因为并非所有人都需要运行此操作,更重要的是,如果您确实需要运行此功能,则单独的守护进程允许您运行多个实例来实现冗余(即使验证程序关闭,也始终保持状态)。

Note

在网络中运行冗余验证程序就像运行冗余路由器一样,也是一个好的策略。由于有多个验证程序可用,因此也可能运行多供应商设置。好的事情是:如果没有可用的验证器,则路由表中的所有路由都将标记为未知,因此您将仅松散验证状态,并且不会产生任何实际路由信息。

Schematically,这就是通信流的方式:

Figure 1: RPKI 的通信流-RTR
RPKI 的通信流-RTR

要安装 RIPE NCC 验证器 v3,请遵循以下位置的安装说明:https://github.com/RIPE-NCC/rpki-validator-3/wiki/RIPE-NCC-RPKI-Validator-3-Production.

默认情况下,验证器将仅侦听 localhost。为了能够到达 web 界面(您可以检查路由状态以及应用 allowlist 条目),请编辑验证器配置文件:

并确保取消注释并更改服务器。地址行:

这使得您的验证者网站在服务器’的公共 IP 地址上处于全局可用,这可能不是您所希望的。因此,您可以使用 iptables 来关闭访问,方法是确保在配置中包含以下行:

Replace <management-prefix>以允许访问 web 界面的前缀。

所有 RIRs 的信任密钥定位器(TAL)都包含在软件分发中,但有一个例外:ARIN. 遗憾的是,在您的验证过程中,必须采取一些繁琐的额外步骤来将其信任密钥包括在内。为了获取 ARIN TAL,请转至https://www.arin.net/resources/rpki/tal.html的网页,确保您同意所述条款,并下载 RIPE NCC 验证器格式的 TAL。将 TAL 文件放在验证器服务器的主目录中。

最后,使用 upload-tal.sh将 ARIN TAL 上传到验证器的脚本:

然后重新启动验证程序:

现在您可以浏览到验证器的公共 IP 地址,端口8080,您将看到列出已配置信任锚点的网页,如中Figure 2所示。

Figure 2: RPKI 验证器信任密钥
RPKI 验证器信任密钥

现在需要对 RPKI-RTR 软件执行相同的练习。这是与您的路由器进行交谈并使其能够创建其验证数据库的部分。安装后 edit /etc/rpki-rtr-server/application.properties要取消对线路的注释,告知应用程序为(未来) web 界面和 RTR 服务侦听哪个 IP 地址:

最后,如果您使用 iptables 限制对端口8081(RTR web 界面)和8323(RTR 服务)的访问,则对 web 接口的访问可能与刚才讨论的验证程序软件相同,对 RTR 服务的访问应限制为路由器将访问验证程序的 IP 地址(这通常是 lo0 地址或接口上与服务器“最接近”的地址,因此用于向服务器传出流量):

重新启动 RPKI-RTR 服务器:

将路由器连接到验证器

在瞻博网络路由器中使用原始验证数据的第一步是设置与验证程序的通信。在此示例中,验证器具有 IPv6 地址2001: db8:: f00: baa,而路由器地址为2001: db8::1。此操作还将使用 IPv4。

显然,两者都’不必在同一个子网上。但它们必须能够在 RTR 端口上相互通信(在标准配置中,即 TCP 端口8323)。请确保您已在中的任何防火墙上打开此端口,并且’不要忘记调整路由器’的回传接口上的防火墙过滤器以允许与验证器通信。使用了术语缓存验证程序;缓存是验证程序的一部分,可容纳 ROA 信息。在这种情况下,我们使用术语验证器来识别两者,并且不会区分缓存和验证器:

实现此配置的命令包括:

提交候选配置后,路由器将设置验证会话。您可以使用以下方法查看会话状态:

如果会话未出现,则故障排除路由器与运行该验证器的机器之间的连接。请记住,在路径中调整路由器的回传防火墙过滤器和/或任何 iptables 或防火墙,或者验证器上的防火墙。一定要考虑路由器上使用的源地址。

将路由器配置为标记 RPKI 有效路由

验证数据库是路由器’内存中的一个单独实体。验证数据库中的条目不会自动将其放入路由表中(仅供转发表)。为您的网络做 RPKI 工作意味着您必须配置一个策略,以查看每个前缀的状态并标记路由表中的相应路由。现在,路由表中的路由的 RPKI 状态将连接到这些路由。最后一步是使用 RPKI 状态来接受或拒绝路由(或根据需要采用其他 ac 时),如中Figure 3所示。

Figure 3: 验证数据库顺序
验证数据库顺序

接受和拒绝 RPKI 选中广告

随着 RPKI 验证程序已安装并在您的路由器上可用,您的路由表尚未发生任何变化。现在是’更新路由策略的时候了,实际上是要对 RPKI 信息执行一些操作!

验证数据库包含前缀、前缀长度和自治系统编号。您的路由策略使用此信息来决定从路由信息库(筋)中获取哪些路由并安装到转发信息库(FIB)中。

验证数据库中有三个可能的 RPKI 状态:有效、无效和未知。由于世界上大多数网络仅在 RPKI 实施的开始阶段,大多数路由将处于未知状态。您的任务是接受有效和未知路由,并拒绝无效的路由。此外,添加 BGP 社区–每个路由都带有的标志。这将使故障排除变得更简单,并使您的客户能够查看您的 RPKI 信息。

在下面的配置片段中,我们创建了一个可从其他路由策略调用的策略。它在验证数据库中采用 RPKI 状态,然后在路由转到筋时设置相应的验证状态。此外,该策略还将 BGP 社区设置为标志,以显示前缀的 RPKI 状态。请注意,此策略中的任何条款实际上都接受或拒绝路由;该策略纯粹用于标记要转到筋的前缀。

您可通过剪切和粘贴以下各行来输入此策略:

此外,还可定义使用的社区:

这些社区是众所周知的大型社区,用于使用网络中显示的 RPKI 状态标记路由。RPKI 有效和 RPKI 未知路由的社区仅为 informa-tional 目的而添加。但是,您将使用社区来 RPKI 无效路由,以便在以后主动拒绝这些 RPKI 无效路由。

Note

该策略 RPKI-CHECK实际上并不接受或拒绝路由。它只是查看传递它的每个路由的验证数据库,并设置筋中这些路由的 RPKI 状态,以及添加信息 BGP 社区。

您现在可以将策略 RPKI-检查到网络上每个导入策略的最开始位置,这一点在 BGP 会话上很有意义:

  • 传输提供商

  • 对等方

  • 客户

最佳实践是将 RPKI-CHECK部分所有导入策略。例如,您应该在路由器上的每个导入策略的开头添加:

再次注意,这实际上不会拒绝 RPKI 无效路由。因此,RPKI 安全路由表的最后一步是添加(术语 RPKI-检查)这一术语:

如果立即提交这些更改,您将’开始拒绝 RPKI 无效路由。在这次写时(2019早期),’大约6000个无效前缀,不会出现在路由表中!您可以使用以下命令验证路由:

路由表中所有无效路由都不应处于活动状态。

如果您’不确定这些策略在事物的整体方案中如何配合,请继续阅读。在Configuring Routing Policies一章’,我们将提供一个统一的导入策略,它是您的安全路由表的基础。

路由器供应’商对 RPKI 的支持

这本书是 Juniper’的Day One系列的一部分,讨论了在 JUNIPER 路由器上部署 RPKI 的技术和食谱。但是,为了使 RPKI 验证生效,所有(边缘)路由器都需要实施。您从其他各方(客户、同行、通过)中学到的所有路由都必须进行验证。如果您的(边缘)路由器不支持 RPKI,它们仍将接受无效路由并将其安装到网络’的路由表中。

为了让您更轻松地了解 RPKI 实施的成功情况,我们编译了支持 RPKI 的路由软件列表:

  • 自 Junos OS 版本12.2 起,瞻博网络支持下面列出的路由软件(建议将 PR1309944)。

  • Cisco

    • XR 4.2.1 (CRS-x、ASR9000、c12K)/XR 5.1.1 (NCS6000、XRv)

    • XE 3.5 (C7200、c7600、ASR1K、CSR1Kv、ASR9k、ME3600…)

    • IOS 15.2 (1) S

  • Alcatel Lucent 自 SR-OS 12.0 R 4 起到了支持。

  • Nokia (R 12.0 R 4):

    • 7210 SAS

    • 7750 SR

    • 7950 XRS

    • VSR

  • Quagga 通过 BGP-SrX 或 RTRLib 提供支持。

  • 鸟支持 ROA,并支持2.0 版或 RTRLib 的 RPKI RTR

  • GoBGP

  • FRRouting

  • OpenBGPD (通过静态配置支持源验证)

总结

您现在已设置了一个 RPKI 验证程序,路由器正在与之交谈。您的路由器现在有一个验证数据库和每个前缀,它知道它是有效、无效还是未验证。此信息已成为路由表,RPKI 无效路由被拒绝。如果您想实现这一切,请祝贺您,您可以跳过第4章,然后直接转到第5章,其中讨论了故障排除 RPKI。但是,我们希望您只需继续阅读!

Configuring Routing Policies一章中’,您将继续执行安全寻找,并将路由策略应用到’从通过、对等方和客户中学到的路由。