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 安全的第一道闸门。配置基线应围绕“入方向过滤、属性锁定、状态监控”三条主线展开。以下以 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 入方向设置,可能造成策略混乱。
四、从属性到决策的验证方法
配置完成后,不能只看“邻居是否 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 不能解决所有问题,但它能有效抑制源前缀劫持。
总结来看,AS_PATH、NEXT_HOP、LOCAL_PREF、MED、ORIGIN 等属性既是选路依据,也是攻击面。理解它们在决策过程中的位置,才能设计出有针对性的边界配置基线。入方向过滤、属性归一化、前缀数量限制和日志审计,是边界路由器最值得优先落实的四项措施。