littlewolf9527/xsight GitHub: littlewolf9527/xsight
一个基于 XDP/eBPF 与流数据的分布式 DDoS 检测与响应平台,实现线速分析与自动缓解。
Stars: 5 | Forks: 0
xSight
基于 XDP/eBPF 的分布式 DDoS 检测与响应平台——线速流量分析并具备自动缓解能力。
[](https://go.dev)
[](https://vuejs.org)
[](LICENSE)
[](https://claude.com/product/claude-code)
[中文文档](README.zh.md)
## 什么是 xSight?
xSight 是一个分布式 DDoS 检测与响应平台,结合了 XDP/eBPF 线速包计数与基于流的分析(sFlow、NetFlow、IPFIX)。它监控镜像/ERSPAN 端口上的流量或从路由器与交换机摄取流数据,使用硬阈值与动态基线检测体积攻击,并触发自动响应——从 BPF 层面防火墙规则到 BGP 黑洞宣告。
系统包含两个组件:
- **Node** — 部署在每个观测点,通过 XDP 或接收流数据,按 IP/协议统计计数,并通过 gRPC 流式传输到控制器
- **Controller** — 中央管理平面,运行检测引擎,将时间序列数据存储于 TimescaleDB,触发响应动作,并提供 Web UI
| 经典主题 | 琥珀主题 |
|:---:|:---:|
|  |  |
```
┌──────────────────────────────────────────────────────────────────────────┐
│ Controller (Detection Plane) │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌───────────┐ │
│ │ Web UI │ │ HTTP API │ │Detection │ │ Response │ │TimescaleDB│ │
│ │ (Vue 3 + │ │ (Gin) │ │ Engine │ │ Actions │ │ (PG) │ │
│ │ EPlus) │ │ │ │ │ │ │ │ │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ └───────────┘ │
└────────────────────────────────┬─────────────────────────────────────────┘
│ gRPC (stats streaming + config publish)
┌───────────────────┼───────────────────┐
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Node 1 │ │ Node 2 │ │ Node N │
│ (XDP mode) │ │ (Flow mode) │ │ (XDP mode) │
│ ┌─────────┐ │ │ ┌─────────┐ │ │ ┌─────────┐ │
│ │ BPF/XDP │ │ │ │ sFlow │ │ │ │ BPF/XDP │ │
│ │ counter │ │ │ │ NetFlow │ │ │ │ counter │ │
│ └─────────┘ │ │ └─────────┘ │ │ └─────────┘ │
└─────────────┘ └─────────────┘ └─────────────┘
Mirror/ERSPAN Router/Switch Mirror/ERSPAN
```
## 关键特性
### 双重捕获模式
| 模式 | 工作原理 | 适用场景 |
|------|-------------|----------|
| **XDP** | 在镜像/ERSPAN 端口上的 BPF 程序以线速计数数据包 | 高精度、每包可见性 |
| **流** | 支持 sFlow、NetFlow v5/v9、IPFIX 接收与多源集成 | 路由器/交换机集成,无需内核依赖 |
### 检测引擎
- **硬阈值检测** — 为 TCP、TCP SYN、UDP、ICMP 和 IP(基于 PPS 与 BPS)设置每解码器限制
- **动态基线检测** — 使用 168 槽每周剖面(每小时一个槽);基于学习基线的百分比偏差触发告警
- **双向检测** — 独立监控入向与出向流量
- **全局地毯式轰炸检测** — 0.0.0.0/0 聚合阈值,可捕获分散至多个 IP 的分布式攻击
- **每解码器粒度** — 为每个协议解码器设置独立阈值与基线
### 响应系统
| 动作 | 描述 |
|--------|-------------|
| **xDrop** | 向 xDrop 节点推送 BPF 防火墙规则,实现线速阻断 |
| **BGP RTBH** | 通过 BGP 宣告 /32 黑洞路由,实现上游空路由 |
| **Webhook** | HTTP 回调至外部系统(SIEM、Slack、PagerDuty 等) |
| **Shell** | 执行本地脚本以实现自定义自动化 |
- **自动 `tcp_flags` 注入** — SYN 泛洪事件自动在 xDrop 规则中添加 `tcp_flags=SYN`,实现精准阻断且避免 collateral damage
- **动态过期** — 响应规则自动过期,并在每次检测周期重新评估
### 流量分析
- **流指纹** — 攻击期间进行 5 元组采样,识别 top talkers 与协议分布
- **传感器日志** — 包含完整解码器分类的每事件结构化日志
- **每 IP 跟踪** — 可配置聚合窗口下的实时每目标 PPS/BPS
### Web UI
- **双主题** — 经典(Stripe 风格简洁)与琥珀(DSEG14 LCD 复古美学)
- **国际化** — 完整支持英文与中文(ZH/EN 切换)
- **实时仪表板** — 流量概览、逐 IP 深入分析、告警时间线与响应历史
- **配置管理** — 在浏览器中管理检测配置、响应动作与节点配置
### 数据管道
- **TimescaleDB** — 用于高效时间范围查询的连续聚合、自动压缩与可配置保留策略
- **配置发布管道** — 控制器通过 gRPC `ControlStream` 向节点推送检测/响应配置,确保所有节点无需轮询即可保持同步
## 仓库结构
```
xsight/
├── controller/ # Management plane (Go + Vue 3)
│ ├── internal/ # API, detection engine, tracker, actions, store
│ └── web/ # Vue 3 + Element Plus frontend
├── node/ # Data plane (Go + BPF/XDP)
│ ├── internal/ # BPF loader, reporter, sampler, flow decoder
│ └── bpf/ # XDP kernel program (C)
├── shared/ # Shared decoder package
├── proto/ # gRPC service definition
├── scripts/ # Build & service management
├── deploy/ # systemd unit files
└── .github/assets/ # Logo, screenshots, sponsor
```
## 要求
| 组件 | 要求 |
|-----------|-------------|
| 控制器 | Go 1.25+、Node.js 18+(前端构建)、PostgreSQL 15+ 搭配 TimescaleDB |
| 节点(XDP 模式) | Linux 内核 5.4+、clang/llvm 11+、Go 1.25+、root / CAP_NET_ADMIN |
| 节点(流模式) | Go 1.25+,无需特殊内核或 root 权限 |
**硬件(控制器 — 包含 PostgreSQL + TimescaleDB):**
| | CPU | 内存 | 磁盘 | 用途 |
|--|-----|-----|------|----------|
| **最低** | 4 核 | 8 GB | 40 GB SSD | 小型网络,前缀较少 |
| **推荐** | 8 核 | 16 GB | 80 GB SSD | 生产环境,高流量场景 |
**硬件(节点):**
| | CPU | 内存 | 磁盘 | 说明 |
|--|-----|-----|------|-------|
| XDP 模式 | 2+ 核 | 2 GB+ | 10 GB | 轻量级——大部分工作在 BPF 内核空间 |
| 流模式 | 2+ 核 | 2 GB+ | 10 GB | 随流导出器数量线性扩展 |
如需逐步环境搭建指南,请参考 **[入门](GETTING_STARTED.md)**。
## 快速开始
### 1. 构建
```
# 构建控制器 (前端 + Go 二进制文件)
./scripts/build-controller.sh
# 构建节点 (BPF 程序 + Go 二进制文件) — 在 Linux 主机上运行
./scripts/build-node.sh
```
### 2. 配置
```
# 控制器
cp controller/config.example.yaml controller/config.yaml
# 编辑:设置数据库 DSN、gRPC 监听地址、检测配置文件
# 节点
cp node/config.example.yaml node/config.yaml
# 编辑:设置捕获模式 (xdp/flow)、接口、控制器 gRPC 地址
```
### 3. 启动
```
# 控制器 (无需 root 权限)
./scripts/controller.sh start
# 节点 — XDP 模式 (需要 root 权限)
sudo ./scripts/node.sh start
# 节点 — Flow 模式 (无需 root 权限)
./scripts/node.sh start
# 检查状态
./scripts/controller.sh status
./scripts/node.sh status
```
Web UI 可在 `http://
:8080` 访问。默认登录:**admin / admin** — 首次登录后请立即修改密码。
## 许可证
MIT — 参见 [LICENSE](LICENSE)。
BPF/C 内核程序(`node/bpf/`)需遵循 GPL-2.0 许可,符合 Linux 内核 BPF 子系统要求。
## 赞助方
本项目由 [Hytron](https://www.hytron.io/) 赞助,提供开发工具支持。
完全使用 Claude Code 构建——包括 XDP/BPF 内核程序、gRPC 流式传输、检测引擎与 Vue 前端。 标签: BGP黑洞, BPF防火墙, DDoS响应, Docker镜像, ERSPAN, EVTX分析, Go, gRPC, IPFIX, NetFlow, pipx 安装, pip 包, Python工具, Ruby工具, sFlow, TimescaleDB, Vue, Wire-speed, XDP, 中心管理平台, 中文文档, 分布式DDoS检测, 动态基线, 安全研究社区, 实时检测, 按IP统计, 按协议统计, 文件系统扫描, 日志审计, 流量监控, 硬阈值, 自动化缓解, 观测点, 镜像端口