BGP数据收集
是的,目前有多个开源的 BGP 监测系统,它们利用 BGPStream、MRT 数据解析器或其他技术,实现对全球或局部 BGP 路由的实时/历史监控、异常检测(如劫持、泄露、震荡)和可视化。以下详细介绍几个主流且活跃的开源项目:
1. Artemis
🌟 最成熟、功能最全的开源 BGP 劫持实时检测与响应系统
🔗 官方地址
✅ 核心特性
- 实时 BGP 劫持检测:基于用户配置的“合法前缀-AS”策略(monitoring prefixes),对比实时 BGP 流,识别非法宣告。
- 多数据源支持:集成 BGPStream,可从 RouteViews、RIPE RIS、本地 Kafka 或 BMP 流获取数据。
- 自动响应机制:
- 发送 BGP 撤回(Withdrawal)
- 触发 RPKI 验证
- 调用外部 API(如 Slack、邮件告警)
- 与路由器联动(通过 ExaBGP 或 FRRouting)
- Web UI:提供事件时间线、地图可视化、AS 路径分析、历史回溯。
- 支持 RPKI 集成:验证路由是否符合 ROA(Route Origin Authorization)。
- 模块化架构:使用 Docker 容器化部署(PostgreSQL + Redis + Python + React)。
🧩 技术栈
- 后端:Python(基于 BGPStream 和 ExaBGP)
- 前端:React + Mapbox
- 数据库:PostgreSQL(存储配置和事件)、Redis(缓存)
- 消息队列:RabbitMQ 或 Kafka(可选)
📌 适用场景
- 企业/ISP 自主监控自身 IP 前缀是否被劫持
- 研究机构构建 BGP 安全实验平台
- 教育用途:演示 BGP 劫持原理与防御
💡 示例配置(YAML)
prefixes:
- prefix: "192.0.2.0/24"
asns: [64500]
rules:
- prefix_group: "my_prefixes"
origin_asns: [64500]
mitigation: "manual"
2. BGPKIT Broker + BGPKIT Parser
⚡ 高性能 Rust 编写的 BGP 数据处理工具链(非完整“系统”,但可构建监测平台)
🔗 官方地址
- GitHub: https://github.com/bgpkit
- 网站: https://www.bgpkit.com/
✅ 核心组件
| 组件 | 功能 |
|---|---|
| BGPKIT Parser | 超快 MRT/BMP 文件解析器(Rust),支持流式处理,速度比 C 库快 2–5 倍 |
| BGPKIT Broker | 提供统一 API 查询全球 BGP 数据(类似 BGPStream 的索引服务) |
| BGPKIT Monitor(实验性) | 实时 BGP 异常检测原型 |
🌟 优势
- 极致性能:单核每秒解析 100 万+ BGP 消息
- 现代语言:Rust 内存安全,无 GC 停顿
- CLI 工具友好:
bgpkit-parser --tsv updates.20231001.0000.bz2 | grep "8.8.8.0/24" - 可嵌入应用:提供 Rust/C/Python 绑定
📌 适用场景
- 构建自定义 BGP 分析流水线
- 大规模历史数据分析(如互联网拓扑演化)
- 替代 BGPStream 用于性能敏感场景
❗ 注意:它本身不是“开箱即用”的监测系统,但可作为底层引擎开发上层应用。
3. Hijack Reporter (by NLnet Labs)
🔍 轻量级 BGP 劫持检测工具,专注 RPKI 验证
🔗 地址
✅ 特性
- 实时监听 BGP 更新流(通过 BMP 或 MRT)
- 对每条路由进行 RPKI 验证(使用 Routinator 或 OctoRPKI)
- 输出无效路由(Invalid by RPKI)并生成报告
- 支持 Prometheus 指标导出,便于集成 Grafana 监控
🧩 架构
BGP Source → Hijack Reporter → RPKI Validator → Alert / Metrics
📌 适用场景
- RPKI 部署后的合规性监控
- 网络运营商验证自身路由是否被错误宣告
4. ExaBGP + 自定义脚本
🛠️ “胶水”方案:用 ExaBGP 接收 BGP 流,配合 Python 脚本实现监测
🔗 ExaBGP
✅ 原理
- ExaBGP 作为 BGP 对等体,接收来自真实路由器或 Route Collector 的 BGP 消息
- 将 UPDATE/Withdrawal 以 JSON 格式输出到 stdout 或管道
- 用户编写 Python/Shell 脚本解析并触发告警
📌 示例流程
# exabgp.conf
process monitor {
run /usr/local/bin/bgp-monitor.py;
}
neighbor 192.0.2.1 {
router-id 192.0.2.2;
local-as 64500;
peer-as 64501;
local-address 192.0.2.2;
family {
ipv4 unicast;
}
}
# bgp-monitor.py
import sys, json
for line in sys.stdin:
msg = json.loads(line)
if 'update' in msg:
as_path = msg['neighbor']['message']['update']['attribute']['as-path']
if suspicious(as_path):
send_alert()
📌 适用场景
- 小型网络自建监控
- 快速原型验证
- 与现有 BGP 路由器深度集成
5. CAIDA’s BGPStream-based Tools
🧪 学术研究导向的分析工具集
CAIDA 提供多个基于 BGPStream 的命令行工具:
| 工具 | 功能 |
|---|---|
bgpreader |
读取并过滤 BGP 数据(类似 tcpdump for BGP) |
bgpstream-idx |
为 MRT 文件建立索引,加速前缀查询 |
pybgpstream 示例脚本 |
如 detect-hijacks.py, analyze-convergence.py |
这些工具适合离线分析,而非 7×24 实时监测系统。
对比总结
| 系统 | 实时性 | 可视化 | 自动响应 | 部署复杂度 | 适合人群 |
|---|---|---|---|---|---|
| Artemis | ✅ 强 | ✅ Web UI | ✅ 支持 | 中(Docker) | 企业/研究者 |
| BGPKIT | ⚠️ 需自建 | ❌ | ❌ | 低(CLI) | 开发者/分析师 |
| Hijack Reporter | ✅ | ❌(Prometheus) | ⚠️ 告警 | 低 | RPKI 用户 |
| ExaBGP + 脚本 | ✅ | ❌ | ✅(自定义) | 高(需 BGP 配置) | 网络工程师 |
| CAIDA 工具 | ❌(离线) | ❌ | ❌ | 低 | 学术研究 |
如何选择?
- 想要开箱即用的 Web 系统? → 选 Artemis
- 需要极致性能处理 TB 级数据? → 选 BGPKIT
- 已部署 RPKI,想监控无效路由? → 选 Hijack Reporter
- 有 BGP 路由器,想深度集成? → 用 ExaBGP
- 做学术研究,分析历史数据? → 用 BGPStream + pybgpstream
补充:商业 vs 开源
| 类型 | 代表 | 特点 |
|---|---|---|
| 商业 | BGPmon, ThousandEyes, Kentik | 托管服务、SLA 保障、高级可视化 |
| 开源 | Artemis, BGPKIT | 免费、可定制、需自行运维 |
对于预算有限或注重数据主权的组织,开源方案是理想选择。
结语
开源 BGP 监测生态已相当成熟,Artemis 是目前最接近“企业级”功能的开源系统,而 BGPKIT 代表了下一代高性能解析方向。结合 RPKI、BMP、Kafka 等技术,完全可以构建一个媲美商业产品的自主可控 BGP 安全监测平台。
📌 建议:从 Artemis 入手体验完整工作流,再根据需求选择底层引擎(BGPStream 或 BGPKIT)。
浙公网安备 33010602011771号