m4rba4s/Aegis-eBPF

GitHub: m4rba4s/Aegis-eBPF

一个基于 eBPF/XDP 和 Rust 的高性能防火墙与流量分析工具,提供内核态实时过滤与可视化监控。

Stars: 20 | Forks: 2

# Aegis: eBPF 安全矩阵 ![Logo](https://i.ibb.co/xS3StSws/000aqaqaqaqaqaq.png) ![License](https://img.shields.io/badge/license-MIT-blue.svg) ![Rust](https://img.shields.io/badge/built_with-Rust-red.svg) ![eBPF](https://img.shields.io/badge/tech-eBPF%2FXDP%2FTC-green.svg) ## 截图 ![Preview](https://i.ibb.co/nqssBwBC/111111111111111111111111.png) ## 概述 **Aegis** 是一个基于 **eBPF (扩展伯克利数据包过滤器)**、**XDP (快速数据路径)** 和 **TC (流量控制)** 构建的下一代防火墙。它在网络栈的最早点运行,在操作系统内核处理之前过滤入站和出站流量。 ### 为什么要使用 Aegis? | 特性 | iptables/nftables | Aegis | |------|-------------------|-------| | 数据包处理 | 内核 netfilter | XDP (驱动层) | | 性能 | ~1M pps | **10M+ pps** | | 出站过滤 | 是 | 是 (通过 TC) | | 连接跟踪 | Conntrack 模块 | **原生 eBPF** | | 实时 TUI | 否 | **是** | | 内存安全 | C | **Rust** | | 部署 | 多个软件包 | **单一二进制文件** | ## 功能 ### 核心 - **XDP 入站过滤** — 在 NIC 驱动层丢弃数据包 - **TC 出站过滤** — 阻止到恶意目的地的出站连接 - **有状态连接跟踪** — 原生 eBPF conntrack(无需内核模块) - **CIDR 块列表** — 用于高效前缀匹配的 LPM Trie - **IPv4 + IPv6 支持** — 带扩展头安全的双栈过滤 - **IP 允许列表** — 可信 IP 绕过所有检查(通过配置) ### 检测 - **端口扫描检测** — 基于位图的独立端口跟踪与自动封禁 - **SYN 洪水防护** — 令牌桶速率限制 - **TCP 异常检测** — Xmas、Null、SYN+FIN 扫描 - **动态自动封禁** — 洪水/扫描源自动封禁(上限 512 条记录) ### 界面 - **交互式 TUI** (fd-isolated — 零标准输出污染): - 连接视图,支持 **离线 GeoIP** 查询 (MaxMind GeoLite2) - 实时统计信息(含火花线),显示每秒数据包数、每秒丢弃数 - 安全事件日志 - 每个连接的 ISP/地理信息/国家显示 - **模块热键** — 可实时切换端口扫描、速率限制、威胁、连接跟踪、扫描检测、详细日志模块 - **空格键封禁** — 从连接列表中一键封禁 IP - **守护模式** — 后台运行并输出日志 - **JSON 日志** — 便于 SIEM 集成的机器可读输出 - **Shell 补全** — 支持 bash、zsh、fish、PowerShell、elvish ### 操作 - **TOML 配置文件** — `/etc/aegis/config.toml` 用于持久化设置 - **威胁情报源** — 从公共源下载并加载 CIDR 块列表 - **保存/恢复** — 持久化并重新加载封禁规则 - **状态命令** — 通过固定的 BPF Map 查询守护进程状态 - **单一二进制文件** — eBPF 字节码内嵌,无外部文件依赖 - **多发行版安装器** — 支持 Fedora、Ubuntu、Debian、Arch、Alpine - **自动 XDP 模式** — 支持从驱动模式自动回退到 SKB 模式 - **Systemd 集成** — 具备 `CAP_BPF` + `CAP_NET_ADMIN` 权限的加固服务文件 ## 安装 ### 先决条件 - Linux 内核 **>= 5.4** (推荐 5.8+ 以支持 CAP_BPF) - 根权限 (用于加载 eBPF) ### 快速安装(推荐) ### 一键安装(SSH/远程) ``` curl -sSfL https://raw.githubusercontent.com/m4rba4s/Aegis-eBPF/main/install.sh | sudo bash ``` ### 手动安装 ``` # 克隆并安装 git clone https://github.com/m4rba4s/Aegis-eBPF.git cd Aegis-eBPF sudo ./install.sh ``` 安装程序将执行以下操作: - 检测你的发行版并安装依赖项 - 从源代码构建(或使用可用的预构建版本) - 安装 systemd 服务 - 创建配置目录 ### 无需安装直接运行 ``` # 构建 cargo run -p xtask -- build-all --profile release cargo build --release -p aegis-cli # 运行(eBPF 嵌入在二进制文件中) sudo ./target/release/aegis-cli -i eth0 tui ``` ### Docker 构建 ``` # 在 Docker 中构建发布二进制文件 docker build --output=dist . # 输出: # dist/aegis-cli - 主二进制文件(eBPF 嵌入) # dist/aegis - 独立 XDP 对象(可选) # dist/aegis-tc - 独立 TC 对象(可选) ``` ## 使用 ### TUI 模式(推荐) ``` sudo aegis-cli -i eth0 tui sudo aegis-cli -i wg0 tui # VPN interface sudo aegis-cli -i eth0 --no-tc tui # XDP only, no egress filtering ``` **控制键:** | 按键 | 操作 | |------|------| | `Tab` | 切换标签页(连接 / 统计 / 日志) | | `↑/↓` 或 `j/k` | 导航列表 | | `空格` | 封禁/解封选中的 IP | | `1-5` | 切换模块(端口扫描、速率限制、威胁、连接跟踪、扫描检测) | | `6` | 切换详细日志 | | `0` | 切换全部模块 | | `q` | 退出 | ### 守护模式 ``` # 作为后台服务启动 sudo systemctl start aegis@eth0 # 或直接运行 sudo aegis-cli -i eth0 daemon ``` ### CLI 模式 ``` sudo aegis-cli -i eth0 load # 交互式命令: # block 1.2.3.4 # unblock 1.2.3.4 # list # save / restore ``` ### 覆盖嵌入式 eBPF(高级) ``` # 使用自定义 eBPF 对象而非嵌入 sudo aegis-cli \ --ebpf-path /custom/path/aegis.o \ --tc-path /custom/path/aegis-tc.o \ -i eth0 tui ``` ## 架构 ``` ┌─────────────────────────────────────────────────────────────┐ │ KERNEL SPACE │ ├─────────────────────────────────────────────────────────────┤ │ ┌─────────────┐ ┌─────────────┐ │ │ │ aegis-ebpf │ │ aegis-tc │ │ │ │ (XDP) │ │ (TC Egress) │ │ │ │ INGRESS │ │ EGRESS │ │ │ └──────┬──────┘ └──────┬──────┘ │ │ │ │ │ │ └──────────┬──────────────┘ │ │ ▼ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ SHARED BPF MAPS │ │ │ │ BLOCKLIST | CONN_TRACK | CONFIG | STATS | FEEDS │ │ │ └─────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────┘ │ ▼ PerfEventArray ┌─────────────────────────────────────────────────────────────┐ │ USER SPACE │ ├─────────────────────────────────────────────────────────────┤ │ ┌─────────────────────────────────────────────────────┐ │ │ │ aegis-cli (Rust/Tokio) │ │ │ │ ┌──────────────────────────────────────────────┐ │ │ │ │ │ EMBEDDED eBPF BYTECODE (XDP + TC objects) │ │ │ │ │ └──────────────────────────────────────────────┘ │ │ │ │ ┌─────────┐ ┌─────────┐ ┌─────────────────┐ │ │ │ │ │ TUI │ │ Event │ │ Map Management │ │ │ │ │ │(ratatui)│ │ Loop │ │ (aya) │ │ │ │ │ └─────────┘ └─────────┘ └─────────────────┘ │ │ │ └─────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────┘ ``` ## 项目结构 ``` Aegis-eBPF/ ├── aegis-common/ # Shared types (Single Source of Truth) │ └── src/lib.rs # PacketLog, Stats, FlowKey, threat/reason constants ├── aegis-ebpf/ # XDP ingress program (no_std, eBPF target) │ └── src/main.rs # Packet filtering, rate limiting, scan detection ├── aegis-tc/ # TC egress program │ └── src/main.rs # Outbound connection blocking ├── aegis-cli/ # Userspace controller │ ├── build.rs # Embeds eBPF bytecode at compile time │ ├── src/main.rs # Program loader, event handler, REPL │ ├── src/tui/ # Terminal UI (ratatui, fd-isolated) │ ├── src/config.rs # TOML config parser │ ├── src/geo.rs # Offline GeoIP (MaxMind GeoLite2) │ ├── src/compat.rs # Kernel capability detection │ └── src/feeds/ # Threat feed parser/downloader ├── guide/ # Operational guides ├── deploy/ # Systemd service files ├── Dockerfile # Reproducible builds └── install.sh # Multi-distro installer ``` ## 免责声明 本工具仅供 **防御性安全研究** 和 **系统加固** 使用。作者不对任何滥用行为负责。 ## 许可证 MIT *Crafted with Rust & eBPF*
标签:Aegis, CIDR前缀匹配, Docker镜像, GeoIP定位, IPv4 IPv6双栈, IP允许列表, Rust, SYN+FIN扫描, SYN洪水攻击, TCP异常检测, TC流量控制, TUI界面, XDP, Xmas扫描, 令牌桶限速, 内存安全, 内核级过滤, 可视化界面, 安全矩阵, 开源防火墙, 数据统计, 状态连接跟踪, 空扫描, 端口扫描, 网络流量可视化, 网络流量审计, 网络防护, 通知系统, 零拷贝, 高性能防火墙