bossandboss/Ai-Firewall

GitHub: bossandboss/Ai-Firewall

一个部署在应用与 LLM API 之间的安全网关,提供敏感信息脱敏、prompt 注入过滤和 EU AI Act 审计日志功能。

Stars: 0 | Forks: 0

# 🛡️ AI Firewall — LLM 流量的安全网关与反向代理 AI Firewall 是一个位于您的应用程序和 LLM API (OpenAI, Anthropic, Gemini, Ollama, vLLM) 之间的安全网关。它会在 prompt 离开您的网络边界之前对其进行检查,并在 模型输出到达您的用户之前进行审查: - **DLP / 敏感信息脱敏** — AWS 密钥、API token、JWT、私钥头、 SSN、信用卡、电子邮箱、电话号码会被掩码或拦截。 - **Prompt 注入与越狱过滤** — 角色覆盖短语、系统 prompt 窃取尝试、markdown 窃取像素、零宽 隐写术。 - **EU AI Act 标签** — 每个请求都会被分类(第 5 条 禁止性用例 / 附件 III 高风险 / 第 50 条 透明度 / 最低风险)并写入 持久化审计日志。 - **流式拦截** — Go 边缘代理会对 SSE 流中的敏感信息进行脱敏,包括跨 chunk 边界分割的密钥(已通过 单元测试验证)。 ## 本仓库中哪些是真实的 — 哪些不是 这是一个诚实的 MVP。下表是真实情况;除此之外不作任何 声明。 | 组件 | 状态 | | :--- | :--- | | TypeScript 网关 (`server.ts`):检查、多提供商转发 (OpenAI / Anthropic / Gemini / Ollama / vLLM)、文件支撑的持久化、变更 endpoint 上的哈希 API key 认证、审计日志、基于真实流量计算的指标 | **正常运行** | | Go 边缘代理 (`cmd/proxy`):认证 (SHA-256 密钥哈希、恒定时间比较)、请求检查、用于攻击短语的真实 Aho-Corasick 自动机 + 用于敏感信息的 RE2、带进位窗口的 SSE 流脱敏 | **正常运行 — 可编译,`go vet` 无报错,已经过单元测试** | | 运维仪表盘 (React 19 + Tailwind):playground、规则引擎、流可视化工具、审计/SOC 视图、密钥管理器、实时基准测试、自动化测试套件 | **正常运行** | | 实时基准测试界面:在包含 30 个用例的透明标注语料库上(包含正则表达式引擎预期会漏掉的具有难度的改写否定样本),在 **runtime 实测** 的精确率 / 召回率 / F1 / 延迟 | **正常运行 — 没有任何预先录制的数字** | | ML 检测阶段(用于改写 / 多语言攻击的 ONNX transformer 分类器) | **尚未实现 — 在 roadmap 中** | | 分布式部署、速率限制、SIEM 导出、PostgreSQL 存储 | **尚未实现 — 在 roadmap 中** | 明确指出的已知限制:目前的检测层是确定性的 (关键字自动机 + 正则表达式)。它在已知模式上速度快且精准,但在 结构上难以应对改写或多种语言的攻击。基准测试 界面故意暴露了这一差距;使用 ONNX 分类器 (例如通过 `onnxruntime-node` 微调的 DeBERTa-v3 prompt 注入模型)来填补这一空白 是 roadmap 中的首要任务。 ## 快速开始 ### Node 网关 + 仪表盘 ``` npm install cp .env.example .env # add provider keys, or leave FIREWALL_DEMO_MODE=true npm run dev # http://localhost:3000 ``` 首次启动时,系统会生成并打印一次 **admin key**(在 `data/api-keys.json` 中仅存储其 SHA-256 哈希值)。将其粘贴到仪表盘的 密钥管理器中,或在 `.env` 中设置 `FIREWALL_ADMIN_KEY`。规则和密钥的更改 需要它;在没有提供商凭证的情况下,代理会在演示模式下返回带有明确标记的 模拟补全 (`"simulated": true`),否则返回 HTTP 502。 ### Go 边缘代理 ``` go test ./... # unit tests incl. split-secret stream redaction go build ./cmd/proxy UPSTREAM_LLM_URL="https://api.openai.com" \ FIREWALL_CLIENT_KEYS="your-client-key" \ PORT=8080 ./proxy ``` ## API `POST /api/v1/proxy/chat/completions` ``` { "provider": "openai", "model": "gpt-4o-mini", "messages": [{ "role": "user", "content": "My AWS key is AKIAIOSFODNN7EXAMPLE. Summarize earnings." }] } ``` prompt 在转发前会进行净化处理;响应包含一个 `firewall` 块(代理延迟、脱敏次数、EU AI Act 类别、审计日志 ID)以及一个 `simulated` 标志,该标志仅在没有设置提供商凭证时为 `true`。 其他 endpoint:`POST /api/v1/inspect`(dry-run)、`GET/POST/PUT/DELETE /api/v1/rules`(变更:admin)、`GET /api/v1/logs`、`GET /api/v1/metrics` (仅根据真实流量计算)、`GET/POST/DELETE /api/v1/auth/keys` (admin)、 `POST /api/v1/testsuite/run`、`GET /api/v1/proxy/sse/stream`(用于 可视化工具的标注演示流)。 ## 架构 ``` [ CLIENT ] ──> [ Go edge proxy :8080 ] [ Node gateway + dashboard :3000 ] ├─ SHA-256 key auth ├─ multi-provider forwarding ├─ Aho-Corasick keyword automaton ├─ inspection + audit persistence ├─ RE2 secret redaction ├─ hashed API-key management └─ SSE carry-window interceptor └─ live measured benchmarks │ [ UPSTREAM LLM API ] ``` 这两个进程是相互独立的:Go 代理是低延迟的数据路径 组件;Node 网关是管理平面和演示界面。将 仪表盘的规则存储库通过 HTTP 连接到 Go 代理已在 roadmap 中。 ## Roadmap(按优先级排序) 1. 将 ONNX transformer 分类器作为第二检测阶段,并在 公开的 prompt 注入数据集上进行基准测试,同时提供可复现的脚本。 2. Node 管理平面与 Go 代理之间的规则同步。 3. 可复现的负载测试框架 (`k6`),并发布 p50/p99 开销。 4. PostgreSQL 审计存储、保留策略、SIEM (syslog/OTLP) 导出。 5. 每个 API key 的速率限制;代理与管理平面之间的 mTLS。 ## 许可证 Business Source License 1.1 (BUSL-1.1) — 请参阅 [LICENSE](LICENSE) 文件。 简而言之:源代码可见;免费用于非生产环境,以及每天不超过 10,000 次检查请求的生产环境;将该软件作为竞争性 托管/托管服务提供需要商业许可证。在 Change Date (2030-07-23),代码将自动转换为 Apache 2.0。 发布前:请在 LICENSE 参数中填写许可方名称和联系邮箱,并让 IP 律师对最终文本进行审查。
标签:AI防火墙, DLL 劫持, Go, Ruby工具, StruQ, 反向代理, 大语言模型, 安全网关, 提示词注入防护, 插件系统, 数据防泄漏(DLP), 日志审计, 自动化攻击