distantgeek/pve-sentinel

GitHub: distantgeek/pve-sentinel

专为 Proxmox VE 设计的 LLM 驱动安全顾问代理,将 CVE 漏洞追踪、包级扫描与智能修复建议整合到一个带权限控制和反幻觉验证的交互式 CLI 中。

Stars: 0 | Forks: 0

/ _ \ | / / __/___/ __/ __/ |/ /_ __/ _/ |/ / __/ / / ___/ |/ / _//___/\ \/ _// / / / _/ // / _// /__ /_/ |___/___/ /___/___/_/|_/ /_/ /___/_/|_/___/____/ 由 LLM 驱动的 Proxmox VE 安全顾问代理。 由 GLM-5.1 提供支持的漏洞监控、CVE 追踪和智能 基础设施指导 — 带有闭环权限控制。 ## Sentinel 的功能 | 功能 | 说明 | |------------|---------------| | **CVE 情报** | 将 NVD、MITRE 和 Proxmox PVE-SA 公告聚合为统一的漏洞源,提供每日扫描和每周摘要 | | **包级别扫描** | 针对 Proxmox 主机和 LXC 容器上已安装的包检测 CVE —— 不仅是版本匹配,还具备 PVE 仓库感知能力 | | **Proxmox 感知修复** | 将发现的问题与 Proxmox 精心策划的软件包通道进行关联。绝不建议可能导致 PVE 崩溃的上游版本锁定 | | **LLM 顾问聊天** | GLM-5.1 提供情境指导、变通方案和缓解策略 —— 受安全框架护栏约束 | | **系统健康监控** | 通过 Proxmox API 实时获取 CPU、RAM、存储、磁盘 S.M.A.R.T.、服务状态以及历史 RRD 指标 | | **对话记忆** | 记录聊天历史并提取主题。系统上下文(仓库、健康、服务)被缓存并注入到每次对话中 | | **权限控制** | 读操作自动批准。写操作需要明确确认。破坏性操作需要随机令牌 | | **安全护栏** | LLM 响应受限于 NIST CSF AI Profile、CIS Ubuntu Level 1、CIS AI Controls Matrix 或通用的安全优先策略 | | **数据验证 ("灵魂")** | LLM 不能做出它无法验证的声明。防止误报和幻觉命令。为每个发现引用数据源 | | **数据库管理** | 分级大小警告(50/75/100MB),支持 VACUUM,带有归档表的安全清理,支持基于主题检索的对话历史 | | **API 高效设计** | 扫描期间缓存系统上下文。聊天无需额外的 API 调用。轻量级 `/refresh` 用于按需更新 | | **计划自动任务** | 用于每日 CVE 扫描和每周摘要报告的 systemd 定时器。包含快速启动命令的 SSH 登录 MOTD 横幅 | ## 快速开始 ``` # 克隆并安装 git clone https://github.com/distantgeek/pve-sentinel.git cd pve-sentinel uv sync # 配置 cp config.yaml.example config.yaml # 使用你的 Proxmox 主机详细信息编辑 config.yaml # 创建 .env 文件 cat > .env << EOF OPENCODE_GO_API_KEY=your-key-here PROXMOX_TOKEN_VALUE=your-uuid-secret-here # 可选:将 NVD API 速率限制从 5 提升至 50 req/6s # NVD_API_KEY=your-nvd-key-here EOF # 验证连接 uv run python -m src.setup verify # 启动 CLI uv run python cli.py ``` ### 在 LXC 中 通过 SSH 登录 LXC 后,MOTD 会显示快速启动命令: ``` Launch CLI: cd ~/advisory && uv run python -m cli Quick scan: cd ~/advisory && uv run python -m src.scanner_cli Setup verify: cd ~/advisory && uv run python -m src.setup verify ``` LXC 上的关键文件位置: | 路径 | 用途 | |------|---------| | `~/advisory/config.yaml` | 主配置文件 | | `~/advisory/.env` | API 密钥和令牌 | | `~/advisory/sentinel.db` | SQLite CVE 数据库 | | `~/.config/systemd/user/cve-*.timer` | 定时扫描任务 | ## CLI 命令 ``` /digest Run full CVE scan and LLM summary (caches system context) /cve check Deep-dive a specific package /cve scan Run host-only CVE scan /status Proxmox resource overview /health [subcmd] System health: full, rrd [timeframe], services /refresh [type] Update cached context: repos/health/services/all /db [subcmd] Database: status/vacuum/prune/history /proxmox Proxmox API operation (write = confirm required) /guardrails [preset] Show or switch security framework preset /history Recent scan history /help Command reference /quit Exit the shell ``` 自由文本输入将直接发送给 LLM 进行顾问聊天。系统上下文 (仓库、健康、服务)在 `/digest` 或 `/refresh` 期间缓存,并 带有时间戳属性注入到每条聊天消息中。 ## 设置助手 ``` uv run python -m src.setup cert # Fetch Proxmox CA cert (user-level) uv run python -m src.setup verify # Test Proxmox API + LLM connectivity ``` `cert` 命令通过 `openssl s_client` 获取 Proxmox 根 CA 证书, 并将其保存到 `~/.local/share/ca-certificates/pve-root-ca.crt`。 **注意:** 请勿将 `SSL_CERT_FILE` 设置为此文件 —— 它仅包含 Proxmox CA,会导致外部的 HTTPS(NVD,MITRE)请求失败。对于家庭实验室环境,请 在 `config.yaml` 中设置 `verify_ssl: false`。 ## 架构 ``` LXC: pve-sentinel (Debian 13, 4C/8GB/32GB, unprivileged) ├── OpenCode Go REST API → GLM-5.1 (direct HTTPS, no local server) ├── Python orchestrator → CLI, CVE scanner, Proxmox tools ├── CVE sources → NVD API, MITRE CVE, PVE-SA wiki feed ├── Proxmox API → proxmoxer (API-only, no pvesh subprocess) ├── SQLite → CVE database, package inventory, advisories, conversation log ├── .env → API keys, tokens (auto-loaded via dotenv) ├── systemd timers → Daily scans (00:06), weekly digests (Mon 08:00) └── MOTD → SSH login banner with quick-start commands ``` ## 数据验证 ("灵魂") 所有 LLM 响应都受 `VALIDATION_DIRECTIVE` 约束 —— 这是 `src/guardrails.py` 中的一个单一常量,用于强制执行真实性: - 永远不要对你无法验证的系统状态做出声明 - 无 root 权限的顾问,仅通过 API 访问 —— 对 Proxmox 主机无 shell 访问权限 - 对于无法访问的数据标记为“待验证”,并带有时间戳属性的缓存上下文 - 除非明确要求,否则不要建议安装或运行第三方工具 - 在执行 API 操作之前,先讨论并规划基础设施的变更 - 优先使用特定于 Proxmox 的包管理,而非通用的 Debian 命令 - 不要推荐已经配置过的操作 - 为发现结果引用具体的数据源 这可以防止诸如在已启用仓库时“启用 Proxmox 仓库”之类的误报, 并阻止诸如 `pveum audit cve-scan`(该命令不存在)之类的幻觉命令。 LLM 从缓存的快照中接收真实的系统数据,并能做出明智的建议。 ## 安全护栏 四个命名预设用于约束 LLM 的顾问视角: | 预设 | 框架 | |--------|-----------| | `general` | 务实的安全优先顾问(默认) | | `cis-ubuntu-l1` | CIS Ubuntu Linux 基准测试 Level 1 | | `cis-ai` | CIS AI 控制矩阵 | | `nist-cyber-ai` | NIST CSF AI Profile (NIST IR 8596 iprd) | 在 `config.yaml` 中配置: ``` guardrails: enabled: true preset: nist-cyber-ai ``` ## 模型配置 默认:通过 OpenCode Go 使用 GLM-5.1(付费)。也支持 OpenCode Zen(免费层,GLM-4): ``` model: provider: opencode-go # or opencode-zen for free tier model_id: glm-5.1 # glm-4 for zen # Alternatives: openai, anthropic, google, ollama, or custom OpenAI-compatible API ``` ## 测试 ``` # Standard tests (快速,无 API 调用): uv run pytest tests/ -v # Conversation tests (live LLM,env-gated): PVE_SENTINEL_TEST_LLM=1 uv run pytest tests/test_conversation.py -v ``` 跨越 10 个模块的 97 个标准测试:config、cve_scanner、database、db_maintenance、 guardrails、opencode_client、permission_gate、proxmox_tools、setup、snapshot。 另外还有 13 个对话测试(受环境变量控制),用于验证 LLM 护栏的合规性: 无幻觉命令、无主动提供的工具建议、正确的验证 格式、先计划后执行的行为以及预设框架。 ## 许可证 MIT — 详见 [LICENSE](LICENSE)
标签:Anthropic, CIS基准, DevSecOps, DLL 劫持, GLM-5.1, GPT, IT运维, Linux服务器, LLM代理, LXC容器, MITRE, NIST CSF, NVD, Proxmox VE, S.M.A.R.T., Socks5代理, 上游代理, 人工智能, 人机协同, 大语言模型, 威胁情报, 存储监控, 安全合规, 安全基线, 安全扫描, 安全护栏, 密码管理, 开发者工具, 教学环境, 数据库管理, 数据验证, 无线安全, 时序注入, 智能安全顾问, 权限控制, 漏洞管理, 漏洞追踪, 用户模式Hook绕过, 系统健康监控, 网络代理, 网络安全审计, 自动化运维, 虚拟化安全, 误报防范, 逆向工具