4. BGP对等会话安全加固

BGP会话建立在TCP之上,默认使用179端口,一旦对等体关系被伪造或劫持,攻击者就可能向路由器注入大量虚假路由,导致流量被牵引、黑洞或泄露。BGP对等会话安全加固的目标,是让“只有合法的邻居、在合法的网络路径上、发送合法数量的前缀”才能建立并维持会话。本节围绕TCP-AO、MD5、GTSM、TTL安全、最大前缀限制以及防伪造攻击配置展开,重点说明它们各自解决什么问题、如何配合使用,以及配置后如何判断生效。

一、会话认证:从TCP MD5到TCP-AO

TCP MD5(RFC 2385)通过在TCP报文段中携带基于共享密钥的摘要,使双方能够验证报文来源。它配置简单,但只保护TCP头部的部分字段,且MD5本身已不再被视为强算法,密钥轮换也缺乏标准机制。TCP-AO(TCP Authentication Option,RFC 5925)是更现代的替代方案,它使用MAC(消息认证码)覆盖整个TCP报文段,支持多种加密算法(如HMAC-SHA-1、AES-CMAC),并支持在同一会话中平滑更换密钥。

以Cisco IOS-XR为例,TCP-AO的配置思路是:先定义key chain,再在邻居上引用。示例参数如下(仅为教学示例,实际密钥应使用高强度随机值):

key chain BGP-AO
 key 1
  cryptographic-algorithm hmac-sha-1
  key-string 7 ExampleKey_2024!
!
router bgp 65001
 neighbor 192.0.2.2
  remote-as 65002
  ao BGP-AO

配置完成后,可用 show bgp neighbor 192.0.2.2 查看会话状态,若显示“Established”且TCP-AO相关信息正常,说明认证通过。若密钥不一致,会话会停留在“Active”或“Idle”,此时应检查key chain名称、算法和密钥是否两端一致。

二、GTSM与TTL安全:限制会话来源路径

GTSM(Generalized TTL Security Mechanism,RFC 5082)的核心思想是:BGP邻居通常直连或经过有限跳数,因此可以要求收到的BGP报文TTL值必须在一个预期范围内。例如,若邻居是直连,则发送方TTL为255,接收方期望收到254或255;若经过多跳,则按实际跳数设置阈值。这样,远程伪造的BGP报文即使能到达,也会因TTL不符而被丢弃。

TTL安全(TTL Security)是GTSM的常见实现名称。配置时通常指定“hop-count”,表示允许的最大跳数。例如:

router bgp 65001
 neighbor 192.0.2.2
  ttl-security hops 1

该配置表示只接受TTL不小于254的报文(即直连场景)。若实际经过2跳,则应改为 hops 2,否则会话无法建立。判断是否生效,可观察邻居状态是否稳定,并用抓包工具确认收到的BGP报文TTL值是否符合预期。

三、最大前缀限制:防止路由表被灌满

最大前缀限制(Maximum Prefix Limit)用于控制从某个邻居接收的前缀数量上限。当邻居发送的前缀数超过阈值时,路由器可以告警、记录日志,甚至直接关闭会话。这能有效防止因邻居配置错误或恶意注入导致本地路由表爆炸。

配置示例:

router bgp 65001
 neighbor 192.0.2.2
  maximum-prefix 1000 80 warning-only

上述配置表示:当接收前缀达到1000条时触发限制,达到80%(即800条)时产生告警,但仅告警不关闭会话。若希望超限后直接断开会话,可去掉 warning-only。实际部署中,阈值应根据该邻居正常路由数量合理设置,例如正常约500条,可设为800~1000条,并保留一定余量。

四、防伪造攻击配置:uRPF与ACL配合

除了会话层认证,还应在数据平面防止源地址伪造。uRPF(单播反向路径转发)可检查进入接口的报文源地址是否与路由表匹配,若不匹配则丢弃。对于BGP邻居所在的接口,可启用严格或松散模式。严格模式要求源地址必须通过该接口可达;松散模式只要求路由表中存在该源地址的路由。此外,可结合ACL只允许BGP邻居地址访问179端口,进一步缩小攻击面。

interface GigabitEthernet0/0/0
 ip verify unicast source reachable-via rx
!
ip access-list extended BGP-PROTECT
 permit tcp host 192.0.2.2 host 192.0.2.1 eq 179
 deny tcp any any eq 179

上述ACL表示只允许特定邻居访问本地179端口,其他BGP连接请求一律拒绝。配置后可用 show ip interface 查看uRPF状态,用 show access-lists 查看匹配计数,判断是否生效。

BGP对等会话安全加固分层示意 合法邻居 192.0.2.2 / AS 65002 TCP-AO 密钥一致 TTL = 255(直连) 伪造攻击者 伪造源地址 192.0.2.2 无正确TCP-AO密钥 TTL 较小(远程) BGP路由器安全加固层 ① TCP-AO / MD5 认证 校验MAC,密钥不匹配则丢弃 ② GTSM / TTL安全 检查TTL范围,远程伪造包被丢弃 ③ 最大前缀限制 超阈值告警或断会话,防路由表爆炸 ④ uRPF + ACL 防伪造 源地址校验,仅放行合法邻居179端口 会话建立并稳定维持 仅合法邻居可注入路由 通过 被阻断 四层防护依次过滤:认证 → 路径 → 数量 → 源地址,任一不满足即无法建立会话

五、配置检查与结果判断

完成上述配置后,建议按以下顺序检查:首先用 show bgp neighbor 确认会话状态为Established,并查看TCP-AO或MD5是否启用;其次用 show bgp neighbor <ip> received-routes 查看接收前缀数量,确认未超过最大前缀限制;再次用 show ip interface 确认uRPF已启用;最后用ACL匹配计数确认只有合法邻居的179端口流量被放行。若会话频繁中断,应优先检查密钥、TTL跳数和最大前缀阈值是否与实际网络一致。

TCP-AO与MD5不能同时配置在同一邻居上,迁移时应先在一端启用TCP-AO,确认会话稳定后再切换另一端,避免中断。GTSM的hops值必须与实际跳数匹配,过大或过小都会导致会话无法建立。
最大前缀限制的阈值不宜设置过低,否则邻居正常路由增长时可能触发断连。建议先以warning-only模式运行一段时间,观察实际峰值后再决定是否启用断连动作。

综合来看,BGP对等会话安全加固不是单一手段,而是认证、路径限制、数量限制和源地址校验的组合。TCP-AO解决“你是谁”,GTSM解决“你从哪里来”,最大前缀限制解决“你能带多少”,uRPF和ACL解决“你的包是否可信”。四者配合,才能在不影响正常邻居的前提下,有效抵御伪造和注入攻击。