4、BGP安全基础:BGPsec(BGP安全扩展)原理与部署

聊到BGP安全,很多人第一反应就是“加个密码认证不就完了?”
嗯,我当年也是这么想的。直到有一次在运营商项目里,亲眼看到一条伪造的BGP路由把整个AS的流量都吸到了某个黑洞里……
说白了,BGP的信任模型太天真了——它默认所有邻居说的话都是真的。这在互联网早期还行,现在?简直是开着门做生意。

所以,BGPsec应运而生。它不是简单的补丁,而是从根上解决“谁有权宣告这条路由”的问题。

4.1 为什么需要BGPsec?

先看一个经典攻击场景:
攻击者伪造一个源AS为“AS 100”的路由,宣告说“/8这个段在我这里”。
你的路由器一看,嗯,路径更短,更新到RIB里。然后全网流量都去了攻击者那里。

这就是BGP的“信任漏洞”——它只检查AS_PATH的长度,不验证AS_PATH的真实性。

我参与过一个金融客户的项目,他们的核心网就被这种“路由劫持”搞瘫过4小时。事后排查发现,攻击者只是租了一台VPS,配了个简单的Quagga就搞定了。
你说气不气?

核心痛点: BGP无法验证路由宣告者的身份,也无法保证AS_PATH未被篡改。

4.2 BGPsec的核心原理

BGPsec的思路其实很朴素:
每个AS在宣告路由时,用自己的私钥对AS_PATH签名。下游AS收到后,用上游AS的公钥验证签名。

这样一来,攻击者想伪造路径?除非他拿到沿途所有AS的私钥。这难度,你想想看。

4.2.1 关键组件

  • RPKI(资源公钥基础设施):负责分发AS号与公钥的绑定关系。说白了,就是一本“电话簿”。
  • BGPsec路径属性:新增一个可选传递属性,里面装着签名数据。
  • 签名算法:目前主流是ECDSA P-256,性能比RSA好不少。

4.2.2 工作流程

我画了一张图,帮你理解整个流程:

AS 100 源AS(发起路由) AS 200 中间AS(转发+签名) AS 300 接收AS(验证签名) 签名链构建过程 ① AS 100 用私钥签名路由 → 生成 Sig_100 ② AS 200 收到后,用 AS 100 公钥验证 Sig_100 ③ AS 200 追加自己的签名 Sig_200 → 转发给 AS 300 ④ AS 300 依次验证 Sig_200 和 Sig_100 → 确认路径真实 ✅ 验证通过

你看,每个AS只负责验证上一跳的签名,然后加上自己的签名。这就是所谓的“逐跳签名验证”。

我的经验: 在实际部署中,签名验证的CPU开销确实存在。我建议在核心路由器上开启硬件加速,或者用专用线卡处理BGPsec。否则,当路由表达到80万条时,CPU可能会飙到80%以上。

4.3 BGPsec与RPKI的关系

很多人搞混这两个概念。我简单说一下:

特性 RPKI BGPsec
验证对象 IP前缀与AS号的绑定关系 AS_PATH的真实性
防御能力 防止前缀劫持 防止路径篡改 + 前缀劫持
部署难度 较低(只需配置ROA) 较高(需要全链路支持)
签名开销 无(仅验证) 有(每个AS需签名)

说白了,RPKI是“这个IP应该由谁宣告”,BGPsec是“这条路径是否被篡改”。
我建议你先部署RPKI,再考虑BGPsec。别一口吃成胖子。

4.4 BGPsec部署实战

嗯,这里我拿Cisco IOS-XR举例。其他厂商的命令大同小异。

4.4.1 前提条件

  • 路由器支持BGPsec(需要高级许可证)
  • 已部署RPKI缓存服务器
  • 已申请并导入本AS的私钥和证书

4.4.2 配置步骤

第一步:配置RPKI

router bgp 65001
  rpki server 192.168.1.100
   port 323
   refresh-time 600
   transport tcp
  !
  rpki bestpath-use-origin-validation
!

第二步:启用BGPsec

router bgp 65001
  bgpsec encryption algorithm ecdsa-p256
  bgpsec path-validation time 300
  !
  neighbor 10.0.0.2
   remote-as 65002
   address-family ipv4 unicast
    bgpsec enable
   !
  !
!

第三步:验证状态

show bgp bgpsec summary
show bgp bgpsec path-validation
避坑指南: 我曾经在部署时忘记配置“bgpsec path-validation time”,结果导致签名验证超时,所有BGPsec路由都被丢弃。这个值建议设成300秒(5分钟),既保证及时性,又不会太频繁。

4.5 部署中的常见问题

  1. 性能问题:签名验证确实吃CPU。我建议在边界路由器上只对关键前缀启用BGPsec,比如/24以上的大段。
  2. 兼容性问题:老设备不支持BGPsec。我的做法是:在支持BGPsec的邻居之间启用,不支持的走普通BGP,配合RPKI做兜底。
  3. 证书管理:私钥泄露等于白干。建议用HSM(硬件安全模块)存储私钥,别放在路由器硬盘里。

4.6 总结

BGPsec不是银弹,但它确实把BGP的安全性提升了一个档次。
从“裸奔”到“穿防弹衣”,中间需要RPKI、证书管理、设备升级等一系列工作。
我个人建议:先从RPKI开始,等跑顺了再上BGPsec。别一上来就想全量部署,容易翻车。

记住一句话:安全是过程,不是终点。

核心要点回顾:
✅ BGPsec通过逐跳签名验证AS_PATH真实性
✅ 依赖RPKI提供公钥基础设施
✅ 部署需考虑性能、兼容性和证书管理
✅ 建议分阶段实施:先RPKI,后BGPsec

公众号:蓝海资料掘金营,微信deep3321