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), 日志审计, 自动化攻击