littlewolf9527/xdrop

GitHub: littlewolf9527/xdrop

基于 XDP/eBPF 的分布式高性能包过滤系统,通过中央 Controller 统一管理多节点规则,实现驱动层线速丢弃、限速与放行。

Stars: 11 | Forks: 0

XDrop

XDrop

分布式 XDP/eBPF 防火墙,具备线速包过滤能力和中央管理 Controller。

[![Go](https://img.shields.io/badge/Go-1.21%2B-00ADD8?logo=go)](https://go.dev) [![Vue](https://img.shields.io/badge/Vue-3-4FC08D?logo=vuedotjs)](https://vuejs.org) [![License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) [![Built with Claude Code](https://img.shields.io/badge/Built%20with-Claude%20Code-orange?logo=anthropic)](https://claude.com/product/claude-code) [中文文档](README.zh.md)
## 什么是 XDrop? XDrop 是一个基于 Linux XDP (eXpress Data Path) 构建的分布式、高性能包过滤系统。它将 BPF 程序直接挂载到网络接口驱动上——完全绕过内核网络栈——以便在接收路径中尽可能早的阶段对流量进行丢弃、放行或限速处理。 该系统包含两个组件: - **Node Agent** — 运行在每个过滤主机上,管理 BPF 数据平面,并暴露 REST API - **Controller** — 中央管理平面,带有 Web UI,将规则存储在 SQLite 中,并将其推送到所有注册的节点 ![XDrop Dashboard](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/c5f9cfe466020822.png) ``` ┌──────────────────────────────────────────────────────────────────────┐ │ Controller │ │ │ │ ┌──────────────┐ ┌─────────────┐ ┌────────────┐ ┌────────┐ │ │ │ Web UI │ │ REST API │ │ Sync │ │SQLite │ │ │ │ (Vue 3 + │ │ (Gin) │ │ Scheduler │ │ DB │ │ │ │ ECharts) │ │ │ │ │ │ │ │ │ └──────────────┘ └─────────────┘ └────────────┘ └────────┘ │ └─────────────────────────────────┬────────────────────────────────────┘ │ HTTP (rule push / health poll) ┌───────────────────┼───────────────────┐ ▼ ▼ ▼ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ Node 1 │ │ Node 2 │ │ Node N │ │ Agent │ │ Agent │ │ Agent │ │ ┌────────┐ │ │ ┌────────┐ │ │ ┌────────┐ │ │ │XDP/BPF │ │ │ │XDP/BPF │ │ │ │XDP/BPF │ │ │ └────────┘ │ │ └────────┘ │ │ └────────┘ │ └────────────┘ └────────────┘ └────────────┘ Wire-speed ↑ Wire-speed ↑ Wire-speed ↑ ``` ## 核心特性 ### BPF 数据平面 - **线速过滤** — XDP 程序在 `sk_buff` 分配之前运行;即使在普通硬件上也能接近线路速率 - **五元组匹配** — 源/目的 IP、源/目的端口、协议 - **IPv4 和 IPv6** — 统一的规则格式;IPv4 在内部存储为 IPv4-mapped IPv6 - **CIDR 规则** — 每个方向使用 LPM trie (源或目的前缀);支持 /0–/128 - **Whitelist** — 在任何黑名单规则之前检查 hash map 绕过 - **动作** — `drop` (丢弃)、`rate_limit` (令牌桶限速,可配置 PPS)、`pass` (放行) - **包长度过滤** — `pkt_len_min` / `pkt_len_max` (L3 总长度) - **位图优化** — 64 位位图编码了 34 种字段组合中哪些具有活动规则;BPF 跳过没有规则的组合,保持热路径 O(1) - **每规则统计** — Agent 聚合每个 CPU 的 `match_count` 和 `drop_count` ### AtomicSync (双缓冲规则发布) 规则更新遵循 RCU 风格的双缓冲协议,以消除写入规则和更新查找位图之间的竞争条件: 1. 将规则写入 BPF hash map 2. 在影子配置 map 中构建更新的配置(位图、计数) 3. 单次原子写入翻转 `active_config` 选择器 — BPF 原子切换 这保证了 BPF 数据路径永远不会看到不一致的位图/规则状态。 ### 部署模式 | 模式 | 描述 | |------|-------------| | **传统模式** | 单网卡,XDP 内联挂载在一个接口上 | | **快速转发** | 双网卡网关 — 在入站和出站接口上均挂载 XDP;透明 L2 网桥 | ### 管理平面 - 中央规则存储在 SQLite 中,提供完整的 CRUD 和批量 API - 可配置的同步间隔,带有强制同步端点 (`POST /api/v1/nodes/:id/sync`) - 节点健康监控,自动更新在线/离线状态 - Web UI:实时流量仪表盘、节点概览、规则管理、Whitelist 编辑器 - Controller 和 Node 均可选配 API Key 认证 ## 仓库布局 ``` xdrop/ ├── node/ │ ├── bpf/ # XDP program in C (xdrop.c / xdrop.h) │ └── agent/ # Go agent — BPF loader, API server, AtomicSync engine ├── controller/ │ ├── cmd/ # Binary entry point │ ├── internal/ # API, service, repository, scheduler, client │ └── web/ # Vue 3 + Element Plus + ECharts frontend └── scripts/ # Build and service management scripts ``` - [Node Agent →](node/README.md) — XDP 数据平面、BPF maps、AtomicSync、API - [Controller →](controller/README.md) — 管理平面、Web UI、同步引擎 ## 系统要求 | 组件 | 要求 | |-----------|-------------| | Node Agent | Linux kernel ≥ 5.4, clang ≥ 11, Go ≥ 1.21, root / CAP_NET_ADMIN | | Controller | Go ≥ 1.21, Node.js ≥ 18 (仅构建时需要) — 可运行于任何 OS | 有关分步环境设置指南,请参阅 **[快速入门](GETTING_STARTED.md)**。 ## 快速开始 ### 1. 构建 ``` # Build controller (frontend + Go binary) ./scripts/build-controller.sh # Build node agent (BPF program + Go binary) — run on a Linux host ./scripts/build-node.sh ``` ### 2. 配置 ``` # Controller cp controller/config.example.yaml controller/config.yaml # Edit: set jwt_secret, external_api_key, and add nodes under the nodes: section # Node agent cp node/config.example.yaml node/config.yaml # Edit: set interface name, node_api_key, sync_key ``` ### 3. 启动 ``` # Controller (no root required) ./scripts/controller.sh start # Node agent (requires root — XDP needs CAP_NET_ADMIN) sudo ./scripts/node.sh start # Check status ./scripts/controller.sh status sudo ./scripts/node.sh status ``` Web UI 默认可通过 `http://:8000` 访问。 ## API 概览 Controller 和 Node 均在 `/api/v1/` 暴露版本化的 REST API。 | 资源 | 端点 | 备注 | |----------|----------|-------| | Rules | `GET/POST /api/v1/rules` | 分页: `?page=&limit=` | | Rule | `GET/PUT/DELETE /api/v1/rules/:id` | | | 批量规则 | `POST/DELETE /api/v1/rules/batch` | | | Whitelist | `GET/POST/DELETE /api/v1/whitelist` | | | Stats | `GET /api/v1/stats` | PPS, 丢弃计数, XDP 信息 | | Nodes | `GET/POST /api/v1/nodes` | 仅 Controller | | 强制同步 | `POST /api/v1/nodes/:id/sync` | 仅 Controller | Node API 需要 `X-API-Key` 头。Controller API Key 是可选的(可配置)。 ## 许可证 MIT — 详见 [LICENSE](LICENSE)。 BPF/C 内核程序 (`node/bpf/`) 按 Linux 内核 BPF 子系统要求采用 GPL-2.0 许可。 完全使用 Claude Code 构建 — 包括 XDP/BPF 内核程序、Go 并发和 Vue 前端。
标签:DDoS防御, Docker镜像, EVTX分析, Go语言, Linux内核, MacOS取证, SQLite, TCP SYN 扫描, Vue3, Web UI, XDP, 仪表盘, 分布式系统, 包过滤, 响应大小分析, 开源, 控制器, 日志审计, 流量控制, 程序破解, 线速处理, 绕过内核协议栈, 网络安全, 网络防护, 节点代理, 防火墙, 隐私保护, 集中管理