4、监控数据源:BGP Update消息捕获、RIB表分析、NetFlow/sFlow数据采集

做BGP安全监控,第一步不是写规则,也不是调告警。

第一步是搞清楚——数据从哪来?

我见过不少团队,上来就搞机器学习、搞AI检测,结果连BGP Update报文都没抓全。说白了,地基没打好,楼盖得再高也是危房。

这一节,咱们就聊聊监控数据源的三个核心抓手:BGP Update消息捕获RIB表分析NetFlow/sFlow数据采集。这三样东西,就像监控系统的三根支柱,缺一根都站不稳。

4.1 BGP Update消息捕获——最直接的“心跳”

BGP Update消息是什么?说白了,就是路由器之间在喊话:

  • “我有一条新路由,前缀是203.0.113.0/24,下一跳是10.0.0.1。”
  • “我撤回一条路由,192.0.2.0/24我不再可达。”

每一次Update,都意味着网络拓扑发生了变化。攻击者想搞事情,也必然通过Update消息来注入恶意路由。

捕获方式,我一般推荐两种:

  1. 直接抓包:在边界路由器上做端口镜像,把BGP会话的流量(TCP 179端口)复制一份出来。工具用tcpdump或者Wireshark都行。但要注意,BGP会话可能很多,流量不小,别把监控网卡打爆了。
  2. 使用BGP监测工具:比如BGPStream、ExaBGP、OpenBMP。这些工具专门为BGP监控设计,能解析Update消息,提取出前缀、AS_PATH、Community等关键属性。

我个人习惯用BGPStream。它支持从多个数据源同时采集,而且能直接输出JSON格式,方便后续丢进ELK或者Splunk里做分析。

举个例子,用tcpdump抓BGP Update:

# 在边界路由器上执行
tcpdump -i eth0 -s 0 -w bgp_updates.pcap "tcp port 179"

抓下来的pcap文件,可以用Wireshark打开,过滤bgp.update,就能看到每一条Update的详细信息。

避坑指南:我曾经在客户现场遇到过一个问题——抓包文件太大,磁盘写满了。后来我加了个轮转策略,每个文件500MB,保留最近7天。命令改成:tcpdump -i eth0 -s 0 -W 7 -C 500 -w bgp_%Y%m%d.pcap "tcp port 179"。嗯,稳了。

4.2 RIB表分析——看清“全貌”

BGP Update消息是“动态”的,它告诉你发生了什么变化。但光看变化还不够,你还需要知道“当前状态”是什么样的。

这就是RIB(Routing Information Base)表的作用。

RIB表,说白了就是路由器内存里的那张大表。里面记录了所有BGP路由的详细信息:前缀、下一跳、AS_PATH、Local Preference、MED、Community……

为什么要分析RIB表?

  • 攻击者可能不是通过Update注入恶意路由,而是通过篡改现有路由的属性。比如,把某个前缀的AS_PATH改短,让它变成最优路径。
  • 有些攻击是“慢速”的,一天只改几条路由。光看Update消息可能发现不了,但对比前后两天的RIB表,差异就出来了。

获取RIB表的方法

  1. 通过路由器命令行show bgp ipv4 unicast 或者 show bgp ipv6 unicast。但这种方式适合临时查看,不适合持续监控。
  2. 使用BGP监测工具:OpenBMP支持定期从路由器拉取RIB表快照。BGPStream也有RIB解析功能。
  3. 从Route Server或Route Collector获取:比如RouteViews、RIPE RIS。这些项目公开了全球BGP路由表,你可以定期下载并分析。

我建议的做法:每天凌晨2点,从路由器拉一次完整的RIB表,存到数据库里。然后写个脚本,对比今天的表和昨天的表,找出新增、删除、变化的路由。这个脚本,我管它叫“BGP差异分析器”。

RIB表分析的核心指标,我列了个表:

指标 说明 异常信号
前缀数量 RIB表中IPv4/IPv6前缀的总数 突然暴增或骤降
AS_PATH长度 每条路由的AS_PATH包含的AS数量 某条路由的AS_PATH突然变短(可能是路径劫持)
下一跳变化 路由的下一跳IP是否改变 大量路由的下一跳指向同一个IP(可能是黑洞路由)
Community属性 路由携带的Community值 出现未知或异常的Community

4.3 NetFlow/sFlow数据采集——看清“流量”

BGP Update和RIB表告诉你“路由怎么走”,但NetFlow/sFlow告诉你“流量怎么流”。

你想想看,如果攻击者成功劫持了某条路由,流量就会绕道。这个“绕道”的行为,在NetFlow数据里会留下痕迹。

NetFlow vs sFlow,有什么区别?

  • NetFlow:Cisco的协议,基于“流”的概念。一个流就是一组具有相同五元组(源IP、目的IP、源端口、目的端口、协议)的报文。NetFlow会缓存流信息,然后定期导出。
  • sFlow:基于“采样”的协议。它不缓存流,而是随机采样报文,然后立即发送采样结果。sFlow的优点是资源消耗小,适合高速网络。

我个人的选择

  • 如果网络规模不大(几百台设备以内),用NetFlow v9或IPFIX。数据更完整,分析更精确。
  • 如果网络规模很大(几千台设备,或者核心链路带宽超过100Gbps),用sFlow。采样率可以设成1:1000甚至1:10000,够用就行。

我曾经踩过一个坑:在客户的核心路由器上开启了NetFlow,采样率设成了1:1(全量采集)。结果路由器CPU直接飙到90%,差点把业务打挂了。后来我改成1:1000,CPU降到20%,数据也够用。嗯,采样率不是越高越好,够用就行。

NetFlow/sFlow数据怎么用?我一般关注这几个维度:

  • 流量突变:某个前缀的流量突然暴增或骤降。暴增可能是DDoS攻击,骤降可能是路由被劫持导致流量绕道。
  • 异常路径:流量经过的AS路径和BGP路由表里的AS_PATH不一致。这说明流量可能走了“非预期”的路径。
  • 新出现的流量:某个IP段之前几乎没有流量,突然出现大量流量。这可能是攻击者在探测或者扫描。

4.4 三种数据源的协同关系

这三种数据源,不是孤立的。它们之间是互补关系:

  • BGP Update:告诉你“路由变了”。但变了之后,流量有没有受影响?不知道。
  • RIB表:告诉你“路由当前是什么样”。但流量是不是真的按这个路由在走?不一定。
  • NetFlow/sFlow:告诉你“流量实际怎么走”。但流量为什么这么走?需要结合BGP数据来分析。

所以,一个成熟的BGP攻击监控方案,一定是三者结合。用BGP Update和RIB表做“路由层面的检测”,用NetFlow/sFlow做“流量层面的验证”。

下面这张图,是我自己画的一个数据流关系图,你看一眼就明白了:

BGP攻击监控数据源协同关系图 BGP Update 动态变化捕获 RIB表 当前状态快照 NetFlow/sFlow 流量实际路径 更新RIB表 验证流量路径 触发告警与溯源 关联 分析 三者协同:路由变化 → 状态快照 → 流量验证 → 告警溯源

你看,BGP Update捕获到一条新路由,会更新RIB表。RIB表的变化,会触发NetFlow/sFlow去验证流量是否真的走了新路径。如果流量路径和路由表不一致,那就说明有问题了——可能是路由被劫持,也可能是流量被篡改。

注意:这三种数据源的采集频率要协调好。BGP Update是实时的,RIB表可以每天拉一次,NetFlow/sFlow的采样周期建议设为1-5分钟。如果频率太高,数据量太大,存储和计算都扛不住。如果频率太低,又可能漏掉攻击。

好了,数据源这块就聊到这儿。记住一句话:数据是监控的血液,没有数据,一切分析都是空谈。把这三个数据源搞扎实了,后面的告警规则、自动化响应才有意义。


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