zulfff/argus
GitHub: zulfff/argus
ARGUS 是一个基于 Rust 和 eBPF/XDP 技术的下一代防火墙与路由器自动化平台,集数据包过滤、路由器配置调和、异常检测、ZTNA Mesh 和可观测性于一体。
Stars: 1 | Forks: 0
# ARGUS — 下一代 eBPF 防火墙与路由器自动化平台
**[]()
[]()
[]()
[]()
[]()**
统一、自托管的防火墙 + 路由器自动化平台,结合了内核级 eBPF/XDP 数据包过滤、Rust 控制平面、面向 VyOS 路由器的基础设施即代码,以及全方位的可观测性 —— 全部使用 Rust 编写,全面保证内存安全。
## 功能
- **eBPF/XDP 防火墙** — 线速数据包过滤(CIDR 允许/拒绝、令牌桶速率限制、状态连接追踪、端口扫描检测)
- **路由器自动化** — 以 NetBox 作为唯一事实来源 -> 通过 Ansible + Event-Driven Ansible 实现 VyOS 配置调和、偏差检测、自动回滚
- **可观测性** — Prometheus 指标、Loki 结构化日志、Grafana 仪表盘
- **Web 仪表盘** — 定制赛博朋克/终端风格的 SvelteKit UI(非 Tailwind,非 AI 生成),具备实时统计、规则构建器、连接追踪器
- **CLI + TUI** — clap CLI + ratatui 实时终端监控
- **身份验证 + RBAC** — JWT(HS256,iss/aud/nbf,5秒宽限),Admin/Operator/Viewer 角色,在所有路由上自动装配 middleware
- **统计异常检测** — 统计基线计算(z-score),本地运行,无云依赖
- **威胁情报** — 自动同步 Spamhaus DROP/EDROP + AbuseIPDB
- **GitOps** — Git 中的防火墙规则,CI 验证,自动应用
- **ZTNA Mesh** — 具备身份感知策略引擎的 WireGuard 覆盖网络
- **WASM 插件** — wasmtime 沙箱,fuel 计量,仅限元数据访问
- **审计日志** — SHA-256 哈希链,防篡改,完整性验证
- **多 WAN 故障转移** — 基于健康探测,自动故障恢复
## 快速开始
```
git clone https://github.com/zulfff/argus.git
cd argus
# 安装 build deps
sudo apt-get install -y build-essential pkg-config libssl-dev libpq-dev
# 设置 JWT secret(必需 — 如果没有此项,服务器将拒绝运行)
export ARGUS_JWT_SECRET="change-me-to-a-random-32-plus-character-string"
# 构建并运行
cargo build --release --workspace --exclude argus-ebpf
cargo run --release -p argus-api
# 查看日志以获取自动生成的管理员密码:"Generated admin password: xxxx"
```
### 首次登录
```
# 健康检查
curl http://127.0.0.1:8443/health
# 将 替换为启动日志中的密码
curl -X POST http://127.0.0.1:8443/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":""}'
```
| 设置 | 值 | 备注 |
|---------|-------|-------|
| API URL | `http://127.0.0.1:8443` | HTTP — 生产环境中通过反向代理实现 TLS |
| 用户名 | `admin` | 通过 `ARGUS_ADMIN_USER` 覆盖 |
| 密码 | 自动生成 | 通过 `ARGUS_ADMIN_PASS` 覆盖 |
| JWT 密钥 | **必填** | 设置 `ARGUS_JWT_SECRET` ≥ 32 字节 |
| 日志级别 | `argus=info` | 设置 `RUST_LOG` |
**GitHub Codespaces:** 运行服务器后,打开端口选项卡(底部面板)并确保端口 8443 已转发。然后使用 `curl http://localhost:8443/health`。
**常见问题:**
| 症状 | 可能原因 |
|---------|-------------|
| `curl: (7) Connection refused` | 服务器未启动 —— 检查终端输出中的错误 |
| `HTTP 502 Bad Gateway` | 使用了 HTTPS (`https://`) —— 请使用 HTTP (`http://`) |
| 服务器立即退出 | 未设置 `ARGUS_JWT_SECRET` 或长度 < 32 个字符 |
| `构建失败` | 缺少 `libpq-dev` —— `sudo apt install libpq-dev` |
| `cargo: command not found` | 未安装 Rust —— `curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \| sh` |
### 启用 eBPF 数据平面
```
rustup toolchain install nightly
rustup target add --toolchain nightly bpfel-unknown-none
cargo +nightly build --release -p argus-ebpf
```
## 环境变量
| 变量 | 必填 | 默认值 | 描述 |
|----------|----------|---------|-------------|
| `ARGUS_JWT_SECRET` | **是** | — | JWT 签名密钥(≥32 字节,HS256) |
| `ARGUS_ADMIN_USER` | 否 | `admin` | 初始管理员用户名 |
| `ARGUS_ADMIN_PASS` | 否 | 随机 | 初始管理员密码(未设置则自动生成) |
| `RUST_LOG` | 否 | `argus=info` | 日志级别过滤器 |
| `DATABASE_URL` | 否 | — | PostgreSQL(可选,默认为内存模式) |
| `REDIS_URL` | 否 | — | Redis(可选) |
## 安全性
### 审计状态
完整的安全审计已完成 —— **修复了 27 个发现的问题**(3 个严重,5 个高危,13 个中危,6 个低危)。
主要修复内容:
- 任何地方都没有硬编码的密钥(JWT、密码)
- 所有受保护的路由上都装配了身份验证 middleware
- VyOS 客户端强制执行 TLS(之前为 `danger_accept_invalid_certs`)
- 通过 `Path::canonicalize` + 前缀检查实现路径遍历保护
- WebSocket 需要在 query 参数中提供 JWT token
- 验证 CIDR 前缀防止溢出(安全的 `wrapping_shl`)
- 所有用户输入均在 API 边界进行验证(CIDR、协议、名称长度、URL 方案)
- 登录失败记录包含 IP + 用户名
- JWT:包含 `iss`/`aud`/`nbf` 声明,宽限期从 30 秒减少至 5 秒
- 审计日志哈希链,可验证完整性
- 速率限制:登录 5 req/s,全局 100 req/s
### 漏洞披露
邮箱:**arjunaajalahla100@gmail.com**
请勿公开提交安全漏洞 issue。
收到后 48 小时内确认,5 个工作日内修复。
## 架构
```
┌─────────────────────────────────────────────────────────────┐
│ SvelteKit Dashboard (custom terminal UI) │
│ http://localhost:5173 │
└──────────────────────────┬──────────────────────────────────┘
│ REST + WebSocket (JWT-auth)
┌──────────────────────────▼──────────────────────────────────┐
│ argus-api (Axum 0.7 + Tower) │
│ Auth Middleware · RBAC · Rate Limiting · Audit Log │
└──┬────────────┬────────────┬────────────┬───────────────────┘
│ │ │ │
▼ ▼ ▼ ▼
┌──────┐ ┌──────────┐ ┌────────┐ ┌──────────────────┐
│ eBPF │ │argus-core│ │ NetBox │ │ VyOS Router │
│ XDP │ │11 modules│ │ (SoT) │ │ (via Ansible) │
└──────┘ └──────────┘ └────────┘ └──────────────────┘
│ │ │ │
▼ ▼ ▼ ▼
┌─────────────────────────────────────────────────────────────┐
│ Observability │
│ Prometheus · Grafana · Loki · Alertmanager │
└─────────────────────────────────────────────────────────────┘
```
## 代码仓库
```
crates/
├── argus-ebpf/ aya XDP/TC programs (#![no_std])
├── argus-core/ 11 engines (rule, conn, rate, scan,
│ anomaly, threat, gitops, ztna, wasm,
│ audit, multi-wan)
├── argus-api/ Axum REST + WebSocket + JWT auth
├── argus-orchestrator/ NetBox + VyOS + Ansible + drift
├── argus-observability/ Prometheus + Loki + tracing
├── argus-cli/ clap CLI + ratatui live TUI
└── argus-common/ Types, errors, shared definitions
frontend/ SvelteKit — custom terminal UI
ansible/playbooks/ VyOS reconciliation + backup
deploy/ Docker, docker-compose, Grafana, systemd
docs/ Architecture, threat model, API spec, runbooks
```
## 文档
| 文档 | 描述 |
|-----|-------------|
| [架构](docs/architecture.md) | 5层设计,数据流,组件详情 |
| [威胁模型](docs/threat-model.md) | STRIDE 分析,信任边界,控制矩阵 |
| [API 规范](docs/api-spec.yaml) | OpenAPI 3.0,13 个 endpoint,8 个 schema |
| [部署](docs/deployment.md) | 裸机、Docker、nginx/Caddy TLS |
| [开发](docs/development.md) | 开发设置、约定、eBPF、故障排除 |
| [运维手册](docs/runbooks/) | 10 项操作程序 |
| [安全策略](SECURITY.md) | 披露策略、支持的版本、范围 |
## 许可证
MIT — 详见 [许可证](LICENSE)
标签:Rust, 可视化界面, 异常检测, 搜索引擎查询, 测试用例, 系统提示词, 网络流量审计, 网络路由, 自定义请求头, 请求拦截, 运维自动化, 通知系统, 防火墙, 零信任网络