2. BGP协议安全机理精要

BGP 的安全问题,本质上不是“协议有没有加密”这么简单,而是“路径属性是否可信、决策结果是否可控”。BGP 依靠 AS_PATH、NEXT_HOP、LOCAL_PREF、MED、ORIGIN、COMMUNITY 等属性在自治系统之间传递可达性信息,任何一条属性被伪造、篡改或误配,都可能让流量偏离预期路径,甚至形成黑洞或劫持。理解这些属性的安全含义,是设计边界路由器配置基线的起点。

一、关键路径属性的安全语义

AS_PATH 记录路由经过的自治系统序列,既用于防环,也用于选路。它的安全含义有两层:一是“长度可信度”,AS_PATH 越短通常越优先,攻击者可通过伪造短 AS_PATH 吸引流量;二是“来源可信度”,AS_PATH 的最后一个 AS 通常被视为前缀起源,若被篡改,就会造成源前缀劫持。因此,边界路由器应启用 AS_PATH 合法性检查,例如对来自客户或对等体的路由限制其携带的 AS 数量,并拒绝包含本 AS 号的路由。

NEXT_HOP 决定下一跳 IP 地址。它的安全含义在于“可达性绑定”:如果 NEXT_HOP 被改为不可达地址,路由虽存在但流量会被丢弃;如果被改为攻击者控制的地址,流量可能被牵引。对于 eBGP,NEXT_HOP 默认是邻居地址;对于 iBGP,通常需要 next-hop-self 或 IGP 可达性保证。边界路由器应确保 NEXT_HOP 与接口、IGP 路由一致,并对异常下一跳进行过滤。

LOCAL_PREF 是 AS 内部选路的最高优先级属性之一,值越大越优先。它只在 iBGP 内传递,不传给 eBGP 邻居。安全含义是“出口控制权”:如果 LOCAL_PREF 被误配或通过路由策略被外部影响,可能导致本 AS 出口流量全部偏向某条链路。边界路由器应在 iBGP 入方向统一设置 LOCAL_PREF,避免从 eBGP 学习到的路由携带不可信的 LOCAL_PREF。

MED 用于向相邻 AS 建议入口点,值越小越优先。它通常只在相邻 AS 之间传递,安全含义是“入口引导”。攻击者可通过伪造低 MED 吸引入向流量。边界路由器应限制 MED 的传播范围,并在入方向对 MED 进行归一化或忽略。

ORIGIN 表示路由来源类型:IGP、EGP、INCOMPLETE。虽然优先级较低,但伪造 ORIGIN 可影响选路。边界路由器应结合前缀列表和 RPKI 验证,确保起源 AS 与前缀授权一致。

二、BGP 决策过程与安全影响

BGP 决策过程按顺序比较:权重、LOCAL_PREF、本地起源、AS_PATH 长度、ORIGIN、MED、eBGP 优于 iBGP、IGP 度量、路由器 ID 等。安全视角下,这个顺序意味着:越靠前的属性,越容易被用来操纵选路。例如,攻击者无法直接修改你的 LOCAL_PREF,但可以通过伪造 AS_PATH 长度影响后续比较;如果本地未设置 LOCAL_PREF,则 AS_PATH 成为关键。因此,边界路由器应在入方向尽早“锁定”关键属性,而不是依赖默认比较。

BGP 属性安全语义与决策链 路径属性(入方向) AS_PATH 防环 / 长度 / 起源 NEXT_HOP 可达性 / 下一跳绑定 LOCAL_PREF 出口控制 / 仅 iBGP MED 入口引导 / 相邻 AS ORIGIN 来源类型 / 优先级低 COMMUNITY 策略标记 / 传递控制 BGP 决策过程(安全视角) ① 权重 / LOCAL_PREF(本地可控) ② 本地起源 / AS_PATH 长度 ③ ORIGIN / MED ④ eBGP 优于 iBGP ⑤ IGP 度量 / 路由器 ID ⑥ 集群列表 / 邻居地址 安全要点:越靠前越易被操纵 入方向尽早锁定 LOCAL_PREF / AS_PATH 边界路由器配置基线 前缀过滤 + RPKI 拒绝未授权起源 AS_PATH 长度限制 拒绝含本 AS 的路由 LOCAL_PREF 统一设置 iBGP 入方向固定值 MED 归一化 / 限制 仅相邻 AS 有效 NEXT_HOP 一致性检查 确保 IGP 可达 最大前缀数 + 日志 防泄漏 / 可审计 风险链:属性伪造 → 决策偏移 → 流量劫持/黑洞 → 需在入方向过滤与锁定

三、边界路由器配置基线

边界路由器是 BGP 安全的第一道闸门。配置基线应围绕“入方向过滤、属性锁定、状态监控”三条主线展开。以下以 Cisco IOS 风格为例,给出可参考的基线片段,实际部署需结合 AS 号、前缀和邻居类型调整。

! 1. 前缀过滤:只允许授权前缀
ip prefix-list PL-CUSTOMER permit 203.0.113.0/24
ip prefix-list PL-CUSTOMER deny 0.0.0.0/0 le 32

! 2. AS_PATH 过滤:拒绝含本 AS 的路由,限制长度
ip as-path access-list 10 permit ^$
ip as-path access-list 10 deny .* 64512 .*
ip as-path access-list 10 permit .*

! 3. 邻居入方向策略
router bgp 64512
 neighbor 198.51.100.1 remote-as 64513
 neighbor 198.51.100.1 prefix-list PL-CUSTOMER in
 neighbor 198.51.100.1 filter-list 10 in
 neighbor 198.51.100.1 maximum-prefix 500 80 restart 30

! 4. LOCAL_PREF 统一设置(iBGP 入方向)
 neighbor 10.0.0.2 route-map RM-LP in
route-map RM-LP permit 10
 set local-preference 200

! 5. NEXT_HOP 检查
 neighbor 198.51.100.1 route-map RM-NH in
route-map RM-NH permit 10
 match ip address prefix-list PL-CUSTOMER
 set ip next-hop peer-address

上述配置中,maximum-prefix 用于防止前缀泄漏或攻击者注入大量路由导致资源耗尽;filter-list 用于 AS_PATH 合法性检查;set local-preference 确保 iBGP 入方向属性可控。需要注意的是,eBGP 邻居不应接受 LOCAL_PREF,因为该属性不跨 AS 传递,若在 eBGP 入方向设置,可能造成策略混乱。

建议在边界路由器上启用 BGP 日志与告警,例如记录邻居状态变化、前缀数量突变和 AS_PATH 异常。日志应包含时间、邻居地址、事件类型和前缀数量,便于事后审计与溯源。

四、从属性到决策的验证方法

配置完成后,不能只看“邻居是否 Established”,还要验证属性与决策结果是否符合预期。常用命令包括:show ip bgp 查看路径属性,show ip bgp neighbors 查看邻居能力与策略,show ip bgp summary 查看前缀数量。重点观察:AS_PATH 是否包含本 AS、LOCAL_PREF 是否统一、NEXT_HOP 是否可达、MED 是否被限制。若发现某条路由的 AS_PATH 异常短或 LOCAL_PREF 异常高,应检查入方向策略是否被绕过。

此外,可结合 RPKI 验证起源 AS 与前缀的绑定关系。当 RPKI 状态为 Invalid 时,应优先拒绝或降低优先级;当为 NotFound 时,可根据业务需求决定是否接受。RPKI 不能解决所有问题,但它能有效抑制源前缀劫持。

BGP 安全不是单一配置能解决的,而是“属性过滤 + 决策锁定 + 持续监控”的组合。任何一条入方向策略缺失,都可能让攻击者通过伪造属性影响全局选路。边界路由器应定期复核前缀列表、AS_PATH 过滤器和最大前缀阈值,确保与当前业务一致。

总结来看,AS_PATH、NEXT_HOP、LOCAL_PREF、MED、ORIGIN 等属性既是选路依据,也是攻击面。理解它们在决策过程中的位置,才能设计出有针对性的边界配置基线。入方向过滤、属性归一化、前缀数量限制和日志审计,是边界路由器最值得优先落实的四项措施。