Kekechi/homelab-proxmox-harness
GitHub: Kekechi/homelab-proxmox-harness
基于 Proxmox VE 的私有云安全平台,将基础设施即代码、信任链基础设施与人类在环 AI 运营管道整合在一起,用于检测工程、可观测性和 AI 安全实践。
Stars: 0 | Forks: 0
# homelab-proxmox-harness
一个基于 Proxmox VE 构建的私有云安全平台。该技术栈涵盖基础设施即代码、双层内部 PKI、支持加密传输的权威 DNS、构件供应链镜像、集中式日志聚合以及 Splunk SIEM —— 它们作为一个信任链被串联在一起,其中每一层都依赖于其下一层。
运营工作由基于 Claude Code 构建的**人类在环 AI pipeline**(Planner → Generator → Evaluator)处理,并在 AI 自身上建立了一个形式化建模的安全边界:网络隔离、IAM 范围限制和基于 hook 的强制执行 —— 应用于基础设施的安全工程原则同样适用于操作它的 agent。
**三大支柱:** 安全基础设施 · 基础设施即代码 · AI 辅助运营
## 平台架构
每个服务层仅依赖于信任链中位于其下方的层:
```
┌──────────────────────────────────────────────────────┐
│ AI Operations Layer │
│ PGE Pipeline (plan → generate → review → apply) │
│ Squid proxy isolation · IAM scoping · Hook gates │
└──────────────────┬───────────────────────────────────┘
│ provisions & configures
┌──────────────────▼───────────────────────────────────┐
│ Compute │
│ Proxmox VE · Terraform (bpg/proxmox) · Ansible │
│ MinIO (S3 state) · sandbox + production isolation │
└──────────────────┬───────────────────────────────────┘
│ base trust for all services
┌──────────────────▼───────────────────────────────────┐
│ PKI (step-ca, two-tier) │
│ Offline root CA VM + Always-on issuing CA (ACME) │
│ All services receive TLS certs from internal CA │
└──────────────────┬───────────────────────────────────┘
│ resolves internal services
┌──────────────────▼───────────────────────────────────┐
│ DNS (PowerDNS Auth + Recursor + DNSdist) │
│ Authoritative · Recursive · DoT/DoH-ready │
│ Per-host DNS query telemetry via dns-collector │
└──────────────────┬───────────────────────────────────┘
│ serves packages to all deployments
┌──────────────────▼───────────────────────────────────┐
│ Artifact Supply Chain (Nexus CE) │
│ APT proxy · OCI registry · Terraform provider mirror │
│ Offline-capable: no internet dependency post-setup │
└──────────────────┬───────────────────────────────────┘
│ receives syslog from all layers
┌──────────────────▼───────────────────────────────────┐
│ Observability │
│ OTel Collector Contrib gateway (all managed hosts) │
│ MinIO S3 archive + Splunk HEC exporter │
└──────────────────┬───────────────────────────────────┘
│ detection + AI analysis
┌──────────────────▼───────────────────────────────────┐
│ SIEM (Splunk Enterprise) │
│ HEC ingest · AI Toolkit · MCP Server integration │
│ DNS query logs · auth events · Proxmox API audit │
└──────────────────────────────────────────────────────┘
```
## 已构建内容
### 基础设施底座
- **Terraform (bpg/proxmox v0.99+)** — 通过三个可重用模块配置 Proxmox 虚拟机 (VM) 和 LXC:`proxmox-vm` (cloud-init)、`proxmox-lxc` (非特权 Debian 容器)、`proxmox-network` (Linux 网桥)
- **Ansible (13 个角色)** — 配置所有已开通的主机;角色具备幂等性,且来源于供应商仓库(非发行版软件包)
- **MinIO** — 自托管的 S3 用于 Terraform 远程状态;每个环境配有独立的存储桶以及受限范围的 IAM 密钥
- **集中式配置** — `config/.yml` 是唯一事实来源;`make configure` 从一个文件中生成 tfvars、Ansible inventory、Squid 白名单和 `.envrc`
- **两个环境** — 沙盒和生产环境具有物理隔离的凭证;生产环境的部署在设计上被禁止(生产令牌永远不会出现在开发容器中)
每个服务都通过 Terraform 的特性标志(`enable_pki`、`enable_dns` 等)进行部署控制,允许分阶段推出和干净的拆除。
### PKI — 双层内部 CA
- **离线根 CA**(VM,按需启动):使用 step-cli 生成自签名根证书;除签名操作期间外,其余时间均保持关机状态
- **签发 CA**(始终在线的 LXC):运行带有 ACME + JWK provisioner 的 step-ca;为 DNS、Nexus、Splunk 和 Ansible 管理的 TLS endpoint 签发证书
- 根证书通过 `common` Ansible 角色分发到系统信任库 —— 新主机开箱即信任内部服务
- 专为 ACME 自动续期而设计;无需手动管理证书
### DNS — 完整解析器栈
- **PowerDNS Authoritative** (SQLite/WAL 后端,仅限回环) — 管理内部区域;通过 API 密钥进行身份验证
- **PowerDNS Recursor** — 递归解析器;内部区域转发给 Auth,其余所有请求转发至上游
- **DNSdist** — 面向客户端的前端;普通 DNS 端口 53,DoT 端口 853,DoH 端口 443(通过 step-ca ACME 进行 TLS);受 ACL 控制的查询源
- **dns-collector** (dmachard/dns-collector) — 按主机部署的轻量级查询探针;通过 syslog 将 DNS 遥测数据转发至 OTel Collector;在 Splunk 中提供按主机划分的 DNS 可见性
### 构件供应链 — Nexus CE
- APT 代理镜像了 Debian 软件包仓库 —— 所有 Ansible 部署均通过 Nexus 安装软件包;在引导启动后,任何受管主机都不需要直接的互联网访问
- 用于容器镜像的 OCI 注册表
- Terraform provider 注册表 —— 离线锁定 provider 版本
- 用于自定义构件(例如 Splunk 应用包、自定义二进制文件)的 Raw 托管仓库
- 带有来自内部 CA 的 TLS 的 nginx 反向代理
### 可观测性 — OTel Collector 网关
- **otelcol-contrib** 作为中央日志网关部署;在端口 1514 上接收来自所有受管主机的 syslog (RFC 5424, TCP)
- Memory limiter + batch processor + resourcedetection 处理器
- 双重导出:MinIO S3 存储桶(`otelcol-logs`,365 天生命周期)用于长期归档,Splunk HEC 用于实时 SIEM 摄取
- 日志来源:DNS 查询日志 (dns-collector)、主机身份验证事件 (rsyslog)、Proxmox API 审计日志、OPNsense 防火墙日志
### SIEM — Splunk Enterprise
- 单实例 Splunk Enterprise(Ubuntu 24.04,大小按 Splunk 最低要求配置)
- 通过 HEC 令牌身份验证从 OTel Collector 摄取
- 配置了 RBAC:拥有 `mcp_tool_execute` 能力的专用 MCP Server 用户,仅限 AI 工具包操作
- 安装了 Splunk AI Toolkit 和 MCP Server —— 支持 AI 辅助搜索和检测规则编写
- Splunk MCP Server 使 Claude Code 能够在检测工程会话期间直接查询 Splunk
## AI 运营 Harness
### Planner-Generator-Evaluator (PGE) 架构
基础设施变更通过三个特定用途的 agent 角色推进,并在每个阶段之间设有人工审批闸门:
| 角色 | 模型 | 职责 |
|---|---|---|
| **iac-planner** | Claude Opus | 阅读现有代码和文档,研究变更,生成结构化计划 —— 不编写任何代码 |
| **iac-generator** | Claude Sonnet | 将*已批准*的计划转换为 Terraform/Ansible 代码 —— 不进行计划或审查 |
| **tf-reviewer** | Claude Sonnet | 审查生成的代码的安全性、正确性以及 bpg/proxmox 规范 —— 返回 `APPROVE` / `WARN` / `BLOCK` |
任何 agent 都不能跳过闸门或授予自己继续执行的权限。操作员在生成代码之前批准计划;操作员在任何 apply 运行之前审查裁决结果。
### AI 的安全边界
应用于基础设施的工程纪律同样适用于操作它的 agent:
| 控制 | 机制 | 防止事项 |
|---|---|---|
| **网络隔离** | 开发容器位于 `internal:true` Docker 网络上;所有流量均通过 Squid 正向代理(白名单:沙盒 VLAN、MinIO、GitHub releases、Terraform 注册表) | Claude 访问生产基础设施或任意互联网 |
| **IAM 范围限制** | Proxmox 令牌 ACL 仅限 `/pool/sandbox`;MinIO 密钥仅限 `tfstate-sandbox` 存储桶;`privsep=1` 阻止特权提升 | Claude 影响生产状态或 Proxmox IAM |
| **PreToolUse hooks** | 在执行前阻止 `terraform destroy`、`state rm`、`force-unlock` —— 独立于任何 Claude 指令 | 意外或被注入的破坏性操作 |
| **凭证隔离** | 生产 Proxmox 令牌永远不会配置在开发容器中 | 即使所有其他控制都被绕过,生产部署也会在身份验证阶段失败 |
完整分析请见 [`docs/threat-model.md`](docs/threat-model.md) —— 包括模型*未能*防护的内容以及残余风险。
### 技能 (斜杠命令)
| 命令 | 功能 |
|---|---|
| `/design ` | 在规划之前探索架构决策 —— 每次一个决策,不涉及代码 |
| `/infra-plan ` | 通过 iac-planner (Opus) 进行结构化基础设施规划 |
| `/generate` | 通过 iac-generator 从已批准的计划编写 Terraform/Ansible |
| `/review [files]` | 通过 tf-reviewer 进行单次代码审查 —— `APPROVE` / `WARN` / `BLOCK` |
| `/polish [code\|plan\|design]` | 迭代审查-修复循环直到 `APPROVE` —— 所有循环均在 subagent 中运行 |
| `/tf-deploy ` | 完整的 Terraform pipeline:设计 → 规划 → 生成 → 审查 → apply |
| `/ansible-deploy ` | 完整的 Ansible pipeline:设计 → 规划 → 生成 → 审查 → 运行 |
| `/ansible-run` | 针对已审查的 Ansible 代码执行预检 + 运行 + 验证 |
| `/assess ` | 结构化项目评估 —— 在修复前显现隐藏假设 |
| `/handoff` | 打包生产计划以供操作员交接 |
| `/retro` | 会话回顾 —— 总结提示工程教训和技能生命周期 |
## 检测工程
可观测性栈旨在生成编写和验证检测规则所需的信号:
- **DNS 查询遥测** — 每台主机上的 dns-collector 通过 OTel 将所有查询馈送到 Splunk;可以检测异常查询模式、C2 信标特征和 DNS 数据外传企图
- **身份验证事件日志记录** — 受管主机上的 rsyslog 将身份验证事件(SSH 登录、sudo、PAM)馈送到 OTel Collector
- **Proxmox API 审计追踪** — API 请求日志显现意外的资源创建、令牌使用异常和横向移动企图
- **防火墙日志** — OPNsense 将 syslog 转发到 OTel Collector;提供跨 VLAN 的网络级可见性
**攻击模拟**(积极开发中):自动化脚本针对摄取的特定数据源 —— DNS 查询、身份验证事件、API 调用 —— 生成已知的恶意模式。检测规则在部署到生产环境之前会针对模拟攻击进行验证。
**Splunk AI Toolkit + MCP Server** — Claude Code 可以在检测会话期间直接查询 Splunk,将日志源进行关联,并在与基础设施变更相同的对话中迭代 SPL 查询。
## 快速开始
要求:Proxmox VE 8.x、Docker + Dev Containers、direnv。
```
git clone && cd homelab-proxmox-harness
cp config/sandbox.yml.example config/sandbox.yml
# 编辑 config/sandbox.yml — Proxmox 节点、网络 CIDR、service flags
make configure # generates tfvars, inventory, Squid allowlist, .envrc
# 填写 .envrc:Proxmox token、MinIO keys(参见 docs/proxmox-iam.md)
direnv allow
make build # rebuild Squid image with updated allowlist
# 在 dev container 中重新打开(VS Code:Ctrl+Shift+P → “Dev Containers: Reopen in Container”)
make verify-isolation # confirm network isolation
make init && make plan # initialize state backend, plan infrastructure
make apply # apply plan file
```
完整指南:[`docs/guides/deployment-guide.md`](docs/guides/deployment-guide.md)
## 文档
**设计记录** — 来自架构会议的决策日志,记录了决定了什么以及为什么:
| 文档 | 主题 |
|---|---|
| [`dns-design.md`](docs/design/dns-design.md) | PowerDNS 栈架构 |
| [`otelcol-design.md`](docs/design/otelcol-design.md) | OTel Collector 网关 |
| [`artifact-server-design.md`](docs/design/artifact-server-design.md) | Nexus CE 选择与布局 |
| [`splunk-hackathon-design.md`](docs/design/splunk-hackathon-design.md) | Splunk AI Toolkit 集成 |
| [`dns-log-pipeline.md`](docs/design/dns-log-pipeline.md) | DNS 遥测 pipeline |
| [`mgmt-vlan-design.md`](docs/design/mgmt-vlan-design.md) | 管理 VLAN 分段 |
| *(以及 `docs/design/` 中的另外 9 个)* | |
**运营指南:**
| 文档 | 内容 |
|---|---|
| [`deployment-guide.md`](docs/guides/deployment-guide.md) | 分阶段沙盒部署(5 个阶段) |
| [`pki-setup.md`](docs/guides/pki-setup.md) | 双层 CA 初始化和证书生命周期 |
| [`splunk-setup.md`](docs/guides/splunk-setup.md) | Splunk Enterprise 与 OTel 的连接 |
| [`trust-root-ca.md`](docs/guides/trust-root-ca.md) | 在工作站上安装内部根 CA |
| [`minio-setup.md`](docs/guides/minio-setup.md) | MinIO 引导与存储桶 IAM |
**架构文档:**
- [`docs/proxmox-iam.md`](docs/proxmox-iam.md) — API 令牌设计、ACL 路径、角色定义
- [`docs/threat-model.md`](docs/threat-model.md) — 隔离模型:覆盖范围、未覆盖范围、残余风险
- [`docs/network-policy.md`](docs/network-policy.md) — Squid 白名单、SSH 隧道架构
## 路线图
截至 2026 年夏季的积极开发优先事项:
1. **检测工程** — 从受管主机摄取防火墙日志和身份验证 syslog;针对 DNS、网络和身份验证数据源的检测规则;用于规则验证的攻击模拟脚本
2. **AI-Agent 滥用防御** — 强化 PreToolUse hook 覆盖范围,审计 agent 工具范围,并记录针对 PGE harness 的对抗性测试用例
3. **Splunk 黑客松** — 将 OTel → Splunk pipeline、AI Toolkit 集成和检测规则集打包作为黑客松参赛的可复现参考架构
4. **管理 VLAN** — 将 DNS、PKI、MinIO 和管理接口隔离到具有严格出入站策略的专用网段上
更远的规划:Keycloak (OIDC/SSO)、GitLab (自托管 CI/CD + GitOps)、Prometheus + Grafana、Wazuh EDR、DNSSEC + RPZ 威胁情报黑名单。请见 [`docs/v.md`](docs/vision.md)。
## 许可证
MIT
标签:AI辅助运维, Proxmox, 安全基础设施, 安全运营, 扫描框架, 智能代码审计, 私有云平台, 系统提示词, 请求拦截