Quagga 上使用验证加固 BGP 会话安全
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-A | 100 | 10.10.12.1/30 |
router-B | 200 | 10.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 技术交流群。
上一篇: 浅谈 Docker 隔离性和安全性
下一篇: 彻底找到 Tomcat 启动速度慢的元凶
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论