m4rba4s/Aegis-eBPF
GitHub: m4rba4s/Aegis-eBPF
一个基于 eBPF/XDP 和 Rust 的高性能防火墙与流量分析工具,提供内核态实时过滤与可视化监控。
Stars: 20 | Forks: 2
# Aegis: eBPF 安全矩阵




## 截图

## 概述
**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扫描, 令牌桶限速, 内存安全, 内核级过滤, 可视化界面, 安全矩阵, 开源防火墙, 数据统计, 状态连接跟踪, 空扫描, 端口扫描, 网络流量可视化, 网络流量审计, 网络防护, 通知系统, 零拷贝, 高性能防火墙