zulfff/argus

GitHub: zulfff/argus

ARGUS 是一个基于 Rust 和 eBPF/XDP 技术的下一代防火墙与路由器自动化平台,集数据包过滤、路由器配置调和、异常检测、ZTNA Mesh 和可观测性于一体。

Stars: 1 | Forks: 0

# ARGUS — 下一代 eBPF 防火墙与路由器自动化平台 **[![构建](https://img.shields.io/badge/build-passing-brightgreen)]() [![测试](https://img.shields.io/badge/tests-40%20passed-brightgreen)]() [![Clippy](https://img.shields.io/badge/clippy-clean-brightgreen)]() [![审计](https://img.shields.io/badge/security%20audit-27%20fixed-blue)]() [![许可证](https://img.shields.io/badge/license-MIT-blue)]()** 统一、自托管的防火墙 + 路由器自动化平台,结合了内核级 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, 可视化界面, 异常检测, 搜索引擎查询, 测试用例, 系统提示词, 网络流量审计, 网络路由, 自定义请求头, 请求拦截, 运维自动化, 通知系统, 防火墙, 零信任网络