Quagga 上使用验证加固 BGP 会话安全

发布于 2025-01-18 02:01:50 字数 3128 浏览 3 评论 0

BGP 协议运行于 TCP 之上,因而,它也继承了 TCP 连接的所有漏洞。例如,在一个 BGP 会话内,攻击者可以冒充一个合法的 BGP 邻居,然后说服另一端的 BGP 路由器共享路由信息给攻击者。在攻击者通告并向邻居路由注入伪造的路由时,就会发生这个问题。毫无戒备的邻居路由器就会开始向攻击者发送通信实况,实际上这些信息并没有去向任何地方,仅仅只是被丢弃了。回到 2008 年,YouTube 实际上也 受害于 这样的 BGP 路由中毒,并遭受了长达一个小时的视频服务大量中断。一个更加糟糕的情况是,如果攻击者是个足够懂行的人,他们可以伪装成一台透明路由器,然后嗅探经过的通信以获取敏感数据。你可以想象,这会造成深远的影响。

要保护活跃的 BGP 会话不受攻击,许多服务提供商在 BGP 会话中使用 MD5 校验和及预共享密钥 。在受保护的 BGP 会话中,一台发送包的 BGP 路由器通过使用预共享的密钥生成 MD5 散列值、部分 IP 和 TCP 头以及有效载荷。然后,MD5 散列作为一个 TCP 选项字段存储。在收到包后,接受路由器用同样的方法使用预共享密钥生成它的 MD5 版本。它会将它的 MD5 散列和接收到的某个包的值进行对比,以决定是否接受该包。对于一个攻击者而言,几乎不可能猜测到校验和或其密钥。对于 BGP 路由器而言,它们能在使用包的内容前确保每个包的合法性。

在本教程中,我们将为大家演示如何使用 MD5 校验和以及预共享密钥来加固两个邻居间的 BGP 会话的安全。

准备

加固 BGP 会话安全是相当简单而直截了当的,我们会使用以下路由器。

路由器名称AS 号IP 地址
router-A10010.10.12.1/30
router-B20010.10.12.2/30

常用的 Linux 内核原生支持 IPv4 和 IPv6 的 TCP MD5 选项。因此,如果你从全新的 Linux 机器 构建了一台 Quagga 路由器,TCP 的 MD5 功能会自动启用。剩下来的事情,仅仅是配置 Quagga 以使用它的功能。但是,如果你使用的是 FreeBSD 机器或者为 Quagga 构建了一个自定义内核,请确保内核开启了 TCP 的 MD5 支持(如,Linux 中的 CONFIGTCPMD5SIG 选项)。

配置 Router-A 验证功能

我们将使用 Quagga 的 CLI Shell 来配置路由器,我们将使用的唯一的一个新命令是‘password’。

[root@router-a ~]# vtysh
router-a# conf t
router-a(config)# router bgp 100
router-a(config-router)# network 192.168.100.0/24
router-a(config-router)# neighbor 10.10.12.2 remote-as 200
router-a(config-router)# neighbor 10.10.12.2 password xmodulo

本例中使用的预共享密钥是‘xmodulo’。很明显,在生产环境中,你需要选择一个更健壮的密钥。

注意 : 在 Quagga 中,‘service password-encryption’命令被用做加密配置文件中所有明文密码(如,登录密码)。然而,当我使用该命令时,我注意到 BGP 配置中的预共享密钥仍然是明文的。我不确定这是否是 Quagga 的限制,还是版本自身的问题。

配置 Router-B 验证功能

我们将以类似的方式配置 router-B。

[root@router-b ~]# vtysh
router-b# conf t
router-b(config)# router bgp 200
router-b(config-router)# network 192.168.200.0/24
router-b(config-router)# neighbor 10.10.12.1 remote-as 100
router-b(config-router)# neighbor 10.10.12.1 password xmodulo

验证 BGP 会话

如果一切配置正确,那么 BGP 会话就应该起来了,两台路由器应该能交换路由表。这时候,TCP 会话中的所有流出包都会携带一个 MD5 摘要的包内容和一个密钥,而摘要信息会被另一端自动验证。

我们可以像平时一样通过查看 BGP 的概要来验证活跃的 BGP 会话。MD5 校验和的验证在 Quagga 内部是透明的,因此,你在 BGP 级别是无法看到的。

如果你想要测试 BGP 验证,你可以配置一个邻居路由,设置其密码为空,或者故意使用错误的预共享密钥,然后查看发生了什么。你也可以使用包嗅探器,像 tcpdump 或者 Wireshark 等,来分析通过 BGP 会话的包。例如,带有“-M ”选项的 tcpdump 将验证 TCP 选项字段的 MD5 摘要。

小结

在本教程中,我们演示了怎样简单地加固两台路由间的 BGP 会话安全。相对于其它协议而言,配置过程非常简明。强烈推荐你加固 BGP 会话安全,尤其是当你用另一个 AS 配置 BGP 会话的时候。预共享密钥也应该安全地保存。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

傻比既视感

暂无简介

文章
评论
25 人气
更多

推荐作者

迎风吟唱

文章 0 评论 0

qq_hXErI

文章 0 评论 0

茶底世界

文章 0 评论 0

捎一片雪花

文章 0 评论 0

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文