3、BGP安全设计原则:最小权限、纵深防御、默认拒绝、可审计

聊BGP安全,不能一上来就堆技术细节。你得先想清楚一个事儿:你的网络到底要防什么?

我做了十几年网络,见过太多因为路由劫持导致全网瘫痪的案例。说白了,BGP本身就不安全——它信任所有邻居,默认情况下谁都能给你灌路由。所以,设计BGP安全策略,本质上就是建立一套信任体系

这套体系,我总结为四个核心原则。你把这四个原则吃透了,BGP安全至少能防住90%的常见攻击。

核心观点: BGP安全不是靠单一技术,而是靠原则驱动的分层防御。这四个原则缺一不可。

3.1 最小权限原则

最小权限,说白了就是:只给必要的,不给多余的。

在BGP里,这个原则体现在两个层面:

  1. 邻居关系层面: 只跟真正需要交换路由的AS建立EBGP会话。别跟不认识的AS瞎连。
  2. 路由通告层面: 只通告你该通告的前缀。别把全表都甩给人家。

我在项目中遇到过一家企业,跟三个运营商建了EBGP,结果其中一个运营商把它的默认路由全丢了,导致那家企业把互联网全表都学到了。你想想看,一个企业路由器,内存才多大?直接撑爆,全网断连。

我的习惯: 在每台BGP路由器上,我都会用prefix-listroute-map做严格的入方向和出方向过滤。只允许必要的前缀通过。

举个例子,你只应该从上游学到你的公网IP段,以及必要的默认路由。其他的一律拒绝。

! 出方向过滤:只通告自己的公网段
ip prefix-list MY_PREFIX seq 5 permit 203.0.113.0/24

route-map TO_UPSTREAM permit 10
 match ip address prefix-list MY_PREFIX

neighbor 192.0.2.1 route-map TO_UPSTREAM out

嗯,这里要注意:最小权限不是一次性的。 网络拓扑变了,业务需求变了,你得定期review这些过滤策略。我曾经见过一个策略,三年前写的,三年后还在用,结果新业务段全被过滤掉了。

3.2 纵深防御原则

纵深防御,就是别把鸡蛋放在一个篮子里。BGP安全不能只靠一层防护。

我习惯把BGP纵深防御分成三层:

层级 技术手段 作用
第一层:边界过滤 前缀列表、AS_PATH过滤、RPKI 阻止非法前缀进入
第二层:邻居认证 MD5认证、TCP-AO 防止伪造BGP会话
第三层:路由策略 Local Preference、MED、Community 控制选路,防止路由劫持

你想想看,如果只靠一层过滤,万一那层策略写错了呢?或者被人绕过了呢?纵深防御就是给你留个后手。

我记得有一次,一个客户只做了前缀过滤,没做AS_PATH验证。结果攻击者伪造了一个合法前缀,但AS_PATH里夹带了私货。因为前缀过滤通过了,路由就进来了。这就是典型的单点失效。

避坑指南: 我曾经见过有人只依赖RPKI,觉得有了RPKI就万事大吉。但RPKI只验证前缀的起源AS,不验证路径。攻击者完全可以伪造一个合法前缀,但通过一个恶意路径注入。所以,RPKI只是纵深防御的一环,不是全部。

3.3 默认拒绝原则

默认拒绝,就是没有明确允许,就是拒绝。这个原则在BGP安全里至关重要。

很多人的习惯是:先允许所有,再慢慢拒绝。但这样风险极高。你想想看,万一你漏掉了一条拒绝规则呢?

正确的做法是:先拒绝所有,再逐个允许。

! 默认拒绝所有入方向路由
ip prefix-list DENY_ALL seq 5 deny 0.0.0.0/0 le 32

route-map FROM_UPSTREAM deny 10
 match ip address prefix-list DENY_ALL

! 然后只允许特定前缀
ip prefix-list ALLOWED seq 10 permit 203.0.113.0/24

route-map FROM_UPSTREAM permit 20
 match ip address prefix-list ALLOWED

neighbor 192.0.2.1 route-map FROM_UPSTREAM in

嗯,这里有个细节:默认拒绝不仅适用于前缀,也适用于Community、AS_PATH等属性。 比如,你只允许特定的Community值影响选路,其他的Community一律忽略。

我的经验: 在写BGP策略时,我习惯在每条route-map的最后加一条隐式拒绝。这样即使前面的规则没匹配到,也不会意外放行。

3.4 可审计原则

可审计,就是所有BGP行为都要有记录,能追溯。出了事,你得知道是谁干的、什么时候干的、干了什么。

这个原则往往被忽视。很多人觉得BGP稳定就行,日志无所谓。但一旦出了路由劫持,没有日志,你连根因都找不到。

我建议至少做以下几件事:

  • 开启BGP日志: 记录所有邻居状态变化、路由更新。
  • 记录策略变更: 每次修改route-map、prefix-list,都要有变更记录和审批。
  • 定期审计: 每周或每月检查一次BGP路由表,看看有没有异常前缀。
! 开启BGP日志
router bgp 65001
 bgp log-neighbor-changes
 ! 记录所有路由更新
 neighbor 192.0.2.1 log-updates

我的习惯: 我会把BGP日志集中发送到日志服务器,并设置告警。比如,如果某个前缀突然消失了,或者出现了新的未知前缀,立刻告警。这样能第一时间发现问题。

可审计还有一个好处:合规。 很多行业(比如金融、运营商)都有合规要求,BGP审计日志是必选项。你提前做好了,省得后面补。

避坑指南: 我曾经见过一个团队,BGP日志开了,但日志轮转策略没配。结果日志文件把磁盘撑爆了,导致路由器重启。所以,日志要开,但也要管好。

3.5 四个原则的关系

这四个原则不是孤立的。它们是一个整体:

  • 最小权限 是基础,告诉你该给什么。
  • 纵深防御 是保障,告诉你别只靠一层。
  • 默认拒绝 是底线,告诉你没明确允许就是不行。
  • 可审计 是后手,告诉你出了事能查。

你想想看,如果只做最小权限,不做纵深防御,那万一最小权限的策略写错了呢?如果只做默认拒绝,不做可审计,那出了事你都不知道怎么出的。

所以,这四个原则要一起用。缺一个,你的BGP安全体系就有漏洞。

总结: BGP安全设计,不是买一个设备、配一个策略就能搞定的。它是一套系统工程,需要从原则出发,层层递进。把这四个原则刻在脑子里,你的BGP网络至少能安全一大半。

BGP安全设计原则体系 最小权限 只给必要的 不给多余的 纵深防御 多层防护 不依赖单点 默认拒绝 没有明确允许 就是拒绝 可审计 所有行为可追溯 出了问题能查 四个原则的关系 最小权限是基础 → 纵深防御是保障 默认拒绝是底线 → 可审计是后手 缺一个,体系就有漏洞

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