iamanpathak/Secure-LLM-Gateway
GitHub: iamanpathak/Secure-LLM-Gateway
一个面向本地LLM的轻量级安全网关,实时脱敏PII、阻止提示注入并记录不可变审计日志。
Stars: 0 | Forks: 0
# LLM Sentinel: Vulnerability Mitigation Framework
[](https://www.python.org/)
[](https://fastapi.tiangolo.com/)
[](https://ollama.com/)
[](https://www.sqlite.org/)
[](https://jwt.io/)
[](https://opensource.org/licenses/MIT)
嘿!我叫 Aman。我创建 **Sentinel** 来展示组织如何在不损害用户隐私或系统安全的情况下安全地集成大型语言模型(LLM)。我不是将终端用户直接连接到 AI,而是设计了一个本地托管的中间件,作为安全代理,动态过滤敏感数据并实时阻止恶意输入。
## 🧩 问题与解决方案
**问题:** 将原始用户输入直接连接到 LLM 会引入两个重大攻击向量:
1. **数据外泄:** 用户意外共享个人身份信息(PII),如信用卡、Aadhaar 号码或地址。
2. **提示注入:** 攻击者使用恶意指令绕过系统防护,劫持 AI 逻辑或提取后端机密。
**解决方案:** 一个轻量级、高性能的安全网关,采用 FastAPI 构建。它拦截每个请求,运行多阶段净化引擎(正则表达式 + 上下文检查)来脱敏 PII,主动阻止提示注入签名,并将所有事件记录到不可变的审计追踪中——所有这些都在数据到达目标 LLM 之前完成,确保零依赖的安全防御层。
## 🏗️ 系统架构与数据流
我采用“设计即隐私”的架构设计该网关。处理 100% 在本地完成,确保数据不会离开主机。
```
[Web UI / Client] ──(HTTP POST)──> [FastAPI Security Gateway]
│
▼
[Multi-Pass Sanitization Engine]
├─ 1. PII Redaction (Regex/Context)
└─ 2. Injection Signature Scanning
│
┌─────────────────────────────────┴─────────────────────────────────┐
▼ ▼
[SQLite Audit DB] [Ollama AI Engine]
(Immutable Logging) ◄──────────(AI Response / Block Status)───────── (tinyllama)
```
## 📸 系统运行演示
*注意:以下为开发环境中的实时捕获,展示网关在测试期间的主动防御能力。*
### 1. 安全访问门户
采用 JWT 认证的安全层,确保只有授权管理员可以访问网关的遥测和审计日志。

### 2. 实时遥测仪表板
中央指挥中心。它可视化拦截的 PII 类型、系统健康状态,并提供动态控制面板以切换净化过滤器(姓名、电话、邮箱、地址、银行卡)。**注意:** 政府 ID 永久锁定为开启状态,作为强制性安全协议。关闭过滤器会在风险评估中将泄露数据标记为 `UNMASKED`。

### 3. 主动威胁缓解
演示网关拦截恶意提示注入(`forget all instructions...`)。系统在攻击到达 LLM 之前将其阻止,并即时更新实时热图和威胁指标。同时强制执行严格的上下文防护,防止 AI 泄露此前提供的用户数据。

### 4. 不可变审计追踪
合规日志。记录原始输入(模糊处理以保护隐私)、动态安全输出(显示 ``)、计算的风险等级(`SECURE`、`MEDIUM`、`HIGH`)和时间戳。可以看到 `MEDIUM (UNMASKED)` 标志主动捕捉切换关闭但仍检测到敏感数据的实例。包含一键 **导出** 功能,可生成 `CSV`/`PDF` 报告用于安全审计。

## 📂 项目结构
```
llm-sentinel/
├── assets/ # Live system screenshots for documentation
├── static/
│ ├── script.js # Frontend logic, charts, and API communication
│ └── style.css # UI styling and dark theme
├── database.py # Database connection and table setup
├── index.html # Main interface and dashboard UI
├── main.py # FastAPI application, auth, and API routes
├── sanitizer.py # Core logic for PII masking & injection detection
├── .env.example # Template for environment variables
├── requirements.txt # Backend dependencies
├── LICENSE # MIT License file
└── README.md # Project documentation
```
## ⚖️ 架构权衡与设计选择
* **本地 LLM(Ollama)vs 云提供商:** 我选择 Ollama 以确保 100% 数据主权。
* **权衡:** 相比访问 OpenAI 等大型云 API,本地计算能力有限,但完全消除了外部 API 数据共享风险。
* **正则/启发式 vs NLP 模型进行 PII 识别:** 净化引擎使用优化的正则表达式和上下文可见性检查,而非重型机器学习模型。
* **权衡:** 速度极快(亚毫秒延迟),适合作为实时网关,但可能缺乏专用 NLP 分类模型的深度语义理解。
* **动态风险评分:** 实现智能检测系统,区分无害的会话填充词(如 “I live in”)与实际数据暴露。
* **权衡:** 需要更严格的模式维护,但大幅降低终端用户的误报率。
* **SQLite vs PostgreSQL:** 使用 SQLite 作为审计和历史数据库。
* **权衡:** 非常适合轻量级、零配置的本地网关演示,但在分布式、高并发企业部署中需迁移至 PostgreSQL。
## 🚀 本地运行指南
### 1. 克隆与设置
```
git clone https://github.com/iamanpathak/llm-sentinel.git
cd llm-sentinel
# 创建并激活虚拟环境
python -m venv .venv
# Windows
.\.venv\Scripts\activate
# Mac/Linux
# source .venv/bin/activate
# 安装所需软件包
pip install -r requirements.txt
```
### 2. 启动 AI 引擎
确保 [Ollama](https://ollama.com/) 已安装并在机器上运行,然后拉取所需模型:
```
ollama run tinyllama
```
### 3. 启动网关
启动 FastAPI 服务器:
```
python main.py
```
* **仪表板/网关:** 访问 `http://127.0.0.1:8000`
* **默认管理员凭据:** `admin` / `admin123`
## 📄 许可证
本项目根据 **MIT 许可证** 授权。详细信息请参见 [许可证文件](LICENSE)。
由 Aman Pathak ❤️ 制作
标签:AI风险缓解, API密钥检测, API网关, AV绕过, FastAPI, JWT认证, LLM评估, Ollama, PII脱敏, Python, SQLite, 上下文检查, 不可变日志, 企业级安全网关, 安全中间件, 安全代理, 实时中间件, 审计日志, 密钥泄露防护, 提示注入防护, 敏感信息屏蔽, 无后门, 本地大模型, 机器学习安全, 请求响应过滤, 输入验证, 逆向工具, 零依赖