编程 自托管 LLM 防火墙:给 OpenAI 兼容端点加 RBAC、策略过滤与多 Provider 路由

2026-09-07 17:12:12

自托管 LLM 防火墙:给 OpenAI 兼容端点加 RBAC、策略过滤与多 Provider 路由

把 LLM 端点暴露给用户时风险独特:prompt injection 能让模型无视系统指令,数据泄漏让模型吐出敏感信息,没有细粒度访问控制时任何持有合法 API key 的用户都能调用昂贵的模型或不该用的工具。传统输入清洗、输出过滤不是太粗就是太细,而且都不解决核心问题:你需要一个同时理解应用上下文和 LLM 行为的策略层

脆弱的方式

一个简单 FastAPI 端点直接代理 OpenAI:无认证、无策略执行、无过滤、无日志——任何人可调用,用户可请求任何模型任何工具任何 prompt,恶意或违规内容原样通过。这是大多数内部 demo 的真实状态。

Resk 的架构

Resk 是自托管、全栈的 LLM 防火墙,可部署在任何 OpenAI 兼容 provider 前面。启动:克隆仓库跑 ./start.sh(建 venv、装依赖、种 SQLite 默认管理员、起后端 :8000、前端 :5173),或手动分别起 backend(uvicorn)和 frontend(bun)。请求经 JWT 认证进入防火墙端点,核心组件:

  • RBAC:JWT 携带用户角色和 capabilities_mask(64 位能力位掩码)。bit 0 控制能否调用工具,未设置直接 403。
  • 策略编译:禁用短语编译成 token 级禁用(装 resklogits 用 ShadowBanProcessor 做 logits 级过滤;未装则回退 naive 子串后过滤)。
  • Provider 路由X-Provider-Id 头指定后端(OpenAI、vLLM、Ollama、自定义),缺失时回退 LLM_BACKEND_URL/LLM_BACKEND_API_KEY 环境变量。
  • 日志:每个请求写 RequestLog,完整可审计。

诚实的局限

部署有复杂度:生产要 PostgreSQL,JWT_SECRET_KEY、PROVIDER_ENCRYPTION_KEY 等环境变量要仔细配置。logits 级过滤加延迟,naive 后过滤快但不精确。它不是银弹:拦不住所有 prompt injection,是防御层不是完整方案。最佳效果依赖单独安装的 resklogits,没有它只能用更简单的过滤。

实践建议

自托管 LLM 网关的合理基线是:JWT 认证 + 按角色的能力位掩码 + 策略编译(优先 token/logits 级过滤,回退子串过滤)+ provider 路由 + 全量请求日志。先把"谁能调用哪个模型/工具"写进代码之外的可配置策略,再把过滤做成可开关的策略而不是硬编码关键词。对多数团队,这些能力开源实现已足够,不必先买商业方案。

来源:How to Build a Self-Hosted LLM Firewall with Resk: A Practical Tutorial - DEV Community

复制全文 生成海报 AI 安全 LLM 网关 自托管

推荐文章

程序员茄子在线接单