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, 反向代理, 域名枚举, 大语言模型, 安全监控, 测试用例, 网络安全防护, 请求拦截