3、BGP安全设计原则:最小权限、纵深防御、默认拒绝、可审计
聊BGP安全,不能一上来就堆技术细节。你得先想清楚一个事儿:你的网络到底要防什么?
我做了十几年网络,见过太多因为路由劫持导致全网瘫痪的案例。说白了,BGP本身就不安全——它信任所有邻居,默认情况下谁都能给你灌路由。所以,设计BGP安全策略,本质上就是建立一套信任体系。
这套体系,我总结为四个核心原则。你把这四个原则吃透了,BGP安全至少能防住90%的常见攻击。
核心观点: BGP安全不是靠单一技术,而是靠原则驱动的分层防御。这四个原则缺一不可。
3.1 最小权限原则
最小权限,说白了就是:只给必要的,不给多余的。
在BGP里,这个原则体现在两个层面:
- 邻居关系层面: 只跟真正需要交换路由的AS建立EBGP会话。别跟不认识的AS瞎连。
- 路由通告层面: 只通告你该通告的前缀。别把全表都甩给人家。
我在项目中遇到过一家企业,跟三个运营商建了EBGP,结果其中一个运营商把它的默认路由全丢了,导致那家企业把互联网全表都学到了。你想想看,一个企业路由器,内存才多大?直接撑爆,全网断连。
我的习惯: 在每台BGP路由器上,我都会用prefix-list或route-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网络至少能安全一大半。
公众号:蓝海资料掘金营,微信deep3321