gladyshernandez/bulwark

GitHub: gladyshernandez/bulwark

Bulwark 是一个 OpenAI 兼容的 LLM prompt injection 防火墙代理,通过三层机制筛查并度量大模型流量中的提示注入攻击。

Stars: 0 | Forks: 0

# Bulwark **一个可度量的 LLM prompt-injection 防火墙** —— 一个语言无关的代理,它通过三层机制筛查 LLM 流量中的 prompt injection,并真实地度量每一层拦截了什么、遗漏了什么以及错误拦截了什么。 ## 这里的内容 (Day 1) 一个 OpenAI 兼容的代理。将任何 OpenAI 客户端的 base URL 指向 Bulwark,它就会原封不动地将 `POST /v1/chat/completions` 转发给上游提供商,并中继响应。默认的上游是 Anthropic 的 OpenAI 兼容层(Claude 模型);修改 `UPSTREAM_BASE_URL` 即可指向任何其他兼容 OpenAI 的提供商。检测在转发*之前*运行,从 Day 2 开始(参见 `ChatProxyController` 中的 hook)。 ``` bulwark/ ├── pom.xml ├── Dockerfile # Railway build ├── docker-compose.yml # local Postgres (used Day 3+) ├── .env.example └── src/main/java/com/bulwark/ ├── BulwarkApplication.java ├── HealthController.java # GET /health ├── config/UpstreamProperties.java └── proxy/ ├── ChatProxyController.java # POST /v1/chat/completions (Day 2 screening hook) └── UpstreamClient.java # forwards to the upstream provider ``` ## 本地运行 需要 JDK 21 和 Maven(或者使用下文的 Docker 方式)。 ``` export ANTHROPIC_API_KEY=sk-ant-... # your upstream provider key (Claude by default) mvn spring-boot:run ``` 验证: ``` # 健康状态 curl http://localhost:8080/health # -> {"status":"ok"} # 代理补全(使用您的 ANTHROPIC_API_KEY 对接 upstream provider) curl http://localhost:8080/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{"model":"claude-3-5-haiku-latest","messages":[{"role":"user","content":"hello"}]}' ``` **完成标志:** 指向 Bulwark URL 的 OpenAI 客户端能获得正常的 completion 返回。 ## 配置 | 环境变量 | 默认值 | 用途 | | --- | --- | --- | | `ANTHROPIC_API_KEY` | — | 上游提供商 API key(必填);用作 bearer token | | `UPSTREAM_BASE_URL` | `https://api.anthropic.com` | 上游提供商 base URL(Anthropic 的 OpenAI 兼容层) | | `PORT` | `8080` | 在生产环境中由 Railway 注入 | ## 部署到 Railway 1. 创建一个 Railway 项目(Hobby plan)并添加一个 PostgreSQL 数据库(从 Day 3 开始使用)。 2. 连接此 GitHub repo —— Railway 通过 `Dockerfile` 进行构建,并在推送到 `main` 分支时自动部署。 3. 在服务的 Variables 中设置 `ANTHROPIC_API_KEY`。 4. 访问 `https://.up.railway.app/health` → 预期返回 `{"status":"ok"}`。 ## 下一步 - **Day 2** — 第一层 regex 筛查 + block / flag-only 模式(hook 已在 `ChatProxyController` 中标记)。 - **Day 3** — 将审计日志记录到 Postgres,配置 Micrometer metrics,公开的 Grafana dashboard。
标签:AI安全, Chat Copilot, DLL 劫持, JS文件枚举, Spring Boot, 反向代理, 域名枚举, 大语言模型, 安全监控, 测试用例, 网络安全防护, 请求拦截