hidemi-k/maf-ebpf-sase
GitHub: hidemi-k/maf-ebpf-sase
基于 eBPF/XDP 和 Microsoft Agent Framework 构建的自主 AI-SASE 框架,实现零信任威胁自动阻断、入侵防御执法与多层网络故障智能诊断。
Stars: 1 | Forks: 0
# 基于 eBPF 与多 Agent 的自主 AI-SASE 框架
所有 AI 编排均统一在 **Microsoft Agent Framework (MAF)** 之上。
## 📺 演示
### ZTNA — 自主威胁阻断(60 秒)
https://github.com/user-attachments/assets/9774ace3-6f57-48ba-8968-17508a5c07c0
### IPS — 人工介入执法(53 秒)
https://github.com/user-attachments/assets/7928db18-4297-4fdc-bc64-0882d5dfc21b
## 🏗 架构
```
[ Threats / Traffic ]
│
┌──────▼──────────────────────────────────────────────────────────┐
│ Data Plane: Rust + eBPF/XDP │
│ Tetragon (kernel syscall monitor) │
└──────┬────────────────────────────────────┬─────────────────────┘
│ stats / XDP maps │ security events
┌──────▼──────────────┐ ┌───────────────▼────────────────────────┐
│ Control Plane (Go) │◄────│ MAF Orchestration │
│ REST API │ │ ┌──────────────┐ ┌────────────────┐ │
│ X-API-Key auth │ │ │ Admin agent │ │ SASE agent │ │
└─────────────────────┘ │ ├──────────────┤ ├────────────────┤ │
│ │ Tetragon mon │ │ Ticket/Policy │ │
┌─────────────────────┐ │ │ Rate monitor │ │ management │ │
│ Infra: Containerlab│ │ └──────────────┘ └────────────────┘ │
│ VPP + Juniper cRPD │ │ │ GPT-OSS-120B via Groq API │
└─────────────────────┘ └─────────┴──────────────────────────────┘
│
┌──────────▼──────────────────────────────┐
│ A2A Protocol (next phase) │
│ a2a-ceos-core: Arista │
└─────────────────────────────────────────┘
```
## 🧠 为什么选择 Microsoft Agent Framework (MAF)?
所有 AI 编排均统一在 **MAF** (`agent_framework`) 之下:
- **原生工具调度**:MAF 会根据函数签名和 docstring 自动调用工具。
- **会话与历史记录管理**:对话历史记录和 token 限制均委托给 MAF 会话层处理。
- **统一的 LLM 接口**:通过兼容 OpenAI 的 API 与 Groq 托管的模型无缝协作。
- **一致的错误处理**:速率限制、错误请求和重试均由 MAF 层处理。
所有模块(从底层的 XDP 安全执行到高层的网络配置管理)均采用了相同的基于 MAF 的 Agent 模式。
## 🛠 技术栈
| 层级 | 技术 |
|---|---|
| **AI 编排** | Microsoft Agent Framework (MAF) |
| **LLM 后端** | openai/gpt-oss-120b(通过 Groq API,兼容 OpenAI) |
| **数据平面** | Rust + eBPF/XDP — 线速数据包过滤 |
| **控制平面** | Go — XDP map 管理与策略 REST API |
| **内核监控** | Tetragon(基于 eBPF 的 syscall 追踪) |
| **基础设施** | Containerlab + VPP + Juniper cRPD/vevo |
| **多供应商(下一步)** | A2A Protocol — Arista cEOS / Cisco / Junos |
## 📁 目录结构
```
my-sase-project/
├── config.ini.example # API key template (copy to config.ini)
├── infra/
│ └── containerlab/
│ └── vpp.clab.yml # Containerlab topology definition
├── ips-maf/ # IPS module — human-in-the-loop enforcement (MAF)
│ ├── go-control-plane/
│ │ ├── go.mod
│ │ └── main.go
│ ├── python-agents/
│ │ ├── api_spec.py
│ │ └── sase_agent.py
│ └── xdp-ebpf/
│ ├── Cargo.toml
│ └── main.rs
├── netmiko-maf/ # Network fault diagnosis via Netmiko + MAF (Jupyter)
│ └── network_diagnostic_agent.ipynb # 5-agent diagnostic pipeline (L2/L3/Self-Correction)
├── LICENSE
├── README.md
└── ztna-tetragon-maf/ # ZTNA module — autonomous blocking (MAF)
├── go-control-plane/
│ ├── go.mod
│ └── main.go # REST API + XDP map management
├── python-agents/
│ ├── admin_agent_maf.py # Security admin agent (MAF)
│ ├── api_spec.py
│ └── sase_agent_maf.py # User-facing SASE agent (MAF)
├── tetragon/
│ └── block-shadow-access.template.yaml # Tetragon policy: blocks shadow /etc/passwd access
└── xdp-ebpf/
├── Cargo.toml
└── main.rs # Rust/XDP line-rate packet filter
```
### Tetragon 策略
`ztna-tetragon-maf/tetragon/block-shadow-access.template.yaml` 是一个 [Tetragon](https://tetragon.io/) `TracingPolicy`,它通过 eBPF 在内核级别检测并阻断对 `/etc/shadow` 和 `/etc/passwd` 的未授权访问。
当 Tetragon 触发 `KPROBE_ACTION_SIGKILL` 事件时,**admin agent (MAF)** 会捕获该事件,将其流式传输到 **Elasticsearch** 以进行证据留存,对威胁进行推理,并指示 Go 控制平面撤销 ZTNA 会话并将攻击者列入黑名单 —— 无需人工干预。
## 🔬 编排:多层诊断
### [`netmiko-maf/`](./netmiko-maf/) — 跨供应商的多层故障诊断
| Agent | 角色 |
|---|---|
| 命令选择器 | 根据症状描述选择正确的命令集 |
| L2 分析师 | 检测接口和 MAC 级别的异常 |
| L3 分析师 | 识别路由和 ARP 问题 |
| 一致性检查器 | 交叉验证 L2/L3 状态,应用 Self-Correction |
| 报告生成器 | 生成带有证据引用的结构化调查结果 |
- **天然支持多供应商**:`VENDOR_KEY` 将 SSH 驱动程序与命令字典解耦 —— 添加新设备类型仅需一个 YAML 条目。
- **Mock 模式**:所有 Agent 均可针对 mock 数据运行,无需物理设备,从而实现利于 CI/CD 的测试。
## 🔗 A2A 迁移(下一阶段)
NETCONF RAG notebook 已被弃用。替代方案是在 [`a2a-ceos-core`](https://github.com/hidemi-k/a2a-ceos-core) 中实现的基于 **A2A (Agent-to-Agent) protocol** 的架构:
## 🏁 入门指南
### 前置条件
| 工具 | 版本 | 链接 |
|---|---|---|
| Microsoft Agent Framework | 最新版 | `pip install agent-framework` |
| Groq API Key | — | [console.groq.com](https://console.groq.com) |
| Go | 1.21+ | [go.dev](https://go.dev/dl/) |
| Rust + cargo | stable | [rustup.rs](https://rustup.rs) |
| Containerlab | 最新版 | [containerlab.dev](https://containerlab.dev) |
### 设置
1. **部署拓扑**:
sudo containerlab deploy -t infra/containerlab/vpp.clab.yml
2. **设置 API 密钥**:
cp config.ini.example config.ini
# 编辑 config.ini 并设置 GROQ_API_KEY
可选 — 启用写入 API 身份验证:
export AGENT_API_KEY=$(openssl rand -hex 32)
3. **构建并启动 Go 控制平面**:
cd ztna-tetragon-maf/xdp-ebpf
cargo build --release
cp target/bpfel-unknown-none/release/xdp-ebpf ../go-control-plane/main.o
cd ../go-control-plane
sudo nsenter -t $PID -n ./sase-agent -iface eth3 -xdp-mode generic
4. **运行 MAF Agents**:
python3 ztna-tetragon-maf/python-agents/admin_agent_maf.py
python3 ztna-tetragon-maf/python-agents/sase_agent_maf.py
python3 ips-maf/python-agents/sase_agent.py
5. **探索 Notebooks**:
- [`netmiko-maf/`](./netmiko-maf/) — 由 MAF agents 驱动的网络诊断
## ⚠️ 已知局限性
### MAF:同步线程中的 asyncio ContextVar
当通过 `asyncio.run()` 从同步线程调用 `Agent.run()` 时,MAF 可能会抛出:
```
ContextVar was created in a different Context
```
本项目通过将非交互式 LLM 调用(`AdminNarrator`、`FWAnalyst`)中的 `asyncio.run(Agent.run())` 替换为直接的 `requests.post()` 到 Groq API 来绕过此问题。交互式聊天(`sase_agent_maf.py`)使用 `asyncio.run(chat_loop())` → `await agent.run()`,因此不受影响。
### MAF 原生 HITL:开放模型的工具调用不稳定性
IPS 模块使用自定义的 `[EXEC:]` 标签解析方法来实现人工介入 (HITL),而不是 MAF 原生的 `approval_mode="always_require"` API。
通过 Groq 提供的 `llama-3.3-70b-versatile` 无法在 MAF 的 HITL 上下文中稳定生成工具调用 JSON。MAF 的 HITL 机制设计是正确的;局限性在于模型本身。使用 MAF 原生的 HITL 需要一个具备稳定工具调用支持的模型,例如 Claude。
## 📄 许可证
[MIT License](./LICENSE) © 2026 hidemi-k
标签:DNS 反向解析, Go, IP 地址批量处理, Ruby工具, Rust, Sysdig, 人工智能, 可视化界面, 日志审计, 用户模式Hook绕过, 网络安全, 网络流量审计, 自动化运维, 逆向工具, 隐私保护