noisegratte/proxmox-trivy-scanner

GitHub: noisegratte/proxmox-trivy-scanner

一款专为 Proxmox VE 环境定制的 Trivy 漏洞扫描器,通过 LXC 容器和 QEMU Guest Agent 实现全基础设施的集中化 CVE 监测与仪表板可视化管理。

Stars: 0 | Forks: 0

# Proxmox Trivy 扫描器 一款使用 [Trivy](https://github.com/aquasecurity/trivy) 针对 Proxmox VE 环境的自动化 CVE 漏洞扫描工具。 该工具在每个 Proxmox 节点上部署一个专用的 LXC 容器,并通过 Web 仪表板扫描和监控整个基础设施中的漏洞。 ## 功能特性 - 遵循 [community-scripts/ProxmoxVE](https://github.com/community-scripts/ProxmoxVE) 规范的单行安装 - 基于 Trivy 的 CVE 扫描(聚合 OSV.dev + NVD 数据库) - 支持暗色模式的 Web 仪表板(端口 8080),采用 API 密钥认证 - 通过 SSH + `pct exec` 远程扫描 LXC 容器 - 通过 QEMU Guest Agent (`qm guest exec`) 远程扫描 VM - 支持 dpkg (Debian/Ubuntu)、apk (Alpine) 和 pacman (Arch Linux) 包管理器 - 支持按需扫描和每日定时扫描 - 提供 REST API 以便与监控工具集成 - “仅可修复”过滤器,专注于可操作的漏洞 - 采用 Gunicorn WSGI 服务器,具备输入验证、路径白名单和安全头 ## 快速安装 在您的 Proxmox 主机上运行: ``` bash -c "$(curl -fsSL https://raw.githubusercontent.com/noisegratte/proxmox-trivy-scanner/main/ct/trivy.sh)" ``` 这将创建一个 Debian 13 LXC(2 CPU,1GB 内存,8GB 磁盘),并预配置好 Trivy 和仪表板。 ## 安装后设置 ### 1. 获取您的 API 密钥 ``` pct exec -- cat /opt/trivy-dashboard/.api_key ``` ### 2. 远程扫描 远程扫描在安装过程中已**自动配置**: - `config.json` 已填入 Proxmox 主机 IP 和容器 ID - 生成的 SSH 密钥已在主机上授权 - 主机指纹已添加到容器的已知主机中 如需覆盖配置,请编辑 LXC 内部的 `/opt/trivy-dashboard/config.json`: ``` { "pve_host": "", "pve_user": "root", "self_ctid": "" } ``` ### 3. VM 扫描要求 VM 通过 QEMU Guest Agent 进行扫描。启用步骤: - 在每个 VM 内部安装 `qemu-guest-agent` - 在 Proxmox VM 设置中启用代理(选项 > QEMU Guest Agent) 未安装 Guest Agent 的 VM 将在远程扫描中被跳过。 ## 架构 ``` Proxmox Host | +-- LXC "trivy" (Debian 13) |-- Trivy binary |-- Gunicorn + Flask dashboard (:8080) |-- Daily scan timer (3am) |-- Remote scanner | |-- LXC containers (SSH -> pct exec) | +-- VMs (SSH -> qm guest exec) +-- /opt/trivy-results/ (JSON scan history) ``` ## 仪表板 访问地址 `http://:8080`(需要 API 密钥) - 严重等级分类卡片(CRITICAL / HIGH / MEDIUM / LOW) - 远程容器和 VM 概览,显示健康指标和漏洞条形图 - CVE 表格,包含 NVD 链接、软件包版本、修复可用性 - 从 UI 触发本地或远程扫描 - 按严重等级过滤,切换“仅可修复” - 点击任意容器/VM 查看其 CVE 详情 ## API 所有 API 端点都需要通过 `Authorization: Bearer ` 请求头、`?key=` 查询参数或会话 Cookie 进行认证。 | 端点 | 方法 | 描述 | |---|---|---| | `/api/results/latest` | GET | 最新的本地扫描结果 | | `/api/results` | GET | 列出所有扫描文件 | | `/api/scan` | POST | 启动本地扫描 | | `/api/scan/status/` | GET | 检查扫描任务状态 | | `/api/remote/scan` | POST | 扫描所有远程 CT 和 VM | | `/api/remote/summary` | GET | 最新的远程扫描摘要 | | `/api/remote/results/` | GET | 特定 CT 或 VM 的结果 | ### 示例:启动扫描 ``` curl -X POST http://:8080/api/scan \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"scan_type":"fs","target":"/","severity":"HIGH,CRITICAL"}' ``` ## 安全 完整的的安全模型和加固建议请参阅 [SECURITY.md](SECURITY.md)。 关键点: - 仪表板受 API 密钥认证保护(256 位,恒定时间比较) - SSH 使用 `StrictHostKeyChecking=yes`(不自动接受) - 扫描路径根据白名单进行验证 - 容器/VM ID 验证为数字以防止注入 - 严重性参数根据显式允许列表进行验证 - 使用 Gunicorn 生产服务器(非 Flask 开发服务器) - 安全头(X-Frame-Options, X-Content-Type-Options, CSP 等) - 线程安全的扫描作业管理,带有自动剔除机制 - 自动清理 30 天前的扫描结果 ## 配置 | 文件 | 描述 | |---|---| | `/opt/trivy-dashboard/config.json` | PVE 主机、用户、自身 CTID | | `/opt/trivy-dashboard/.api_key` | 仪表板认证密钥 | | `/etc/systemd/system/trivy-scan.timer` | 每日扫描计划 | 环境变量 `PVE_HOST`、`PVE_USER`、`SELF_CTID` 可覆盖配置文件中的值。 ## 路线图 - [x] 基于扫描邻居 LXC 容器的 SSH - [x] 通过 QEMU Guest Agent 扫描 VM - [ ] 多节点聚合仪表板 - [ ] 扫描历史比较(新出现/已解决 的 CVE) - [ ] Webhook 通知(Gotify, Ntfy)当出现新的 CRITICAL 级别漏洞时 - [ ] Docker 镜像扫描支持 - [ ] 用于 helper-scripts.com 的 metadata.json ## 许可证 MIT - 详见 [LICENSE](LICENSE) Trivy 由 Aqua Security 根据 [Apache 2.0](https://github.com/aquasecurity/trivy/blob/main/LICENSE) 授权。 community-scripts 构建框架根据 [MIT](https://github.com/community-scripts/ProxmoxVE/blob/main/LICENSE) 授权。 Flask 根据 [BSD-3-Clause](https://github.com/pallets/flask/blob/main/LICENSE.txt) 授权。 Gunicorn 根据 [MIT](https://github.com/benoitc/gunicorn/blob/master/LICENSE) 授权。
标签:Debian, DevSecOps, GPT, LXC容器, PE 加载器, Proxmox VE, Python, QEMU, REST API, SSH, Web Dashboard, Web报告查看器, 上游代理, 内联执行, 基线扫描, 安全合规, 指令遵循, 无后门, 无线安全, 漏洞管理, 网络代理, 网络安全审计, 网络测绘, 自动化运维, 虚拟化安全, 身份验证强制, 逆向工具