abdelhaouari/homelab

GitHub: abdelhaouari/homelab

在 Proxmox 裸金属上构建的企业级安全加固 Kubernetes 集群,实现了从 IaC 到运行时监控的完整 DevSecOps 流水线。

Stars: 0 | Forks: 0

# 家庭实验室 — 企业级 DevSecOps 平台 在裸金属 Kubernetes 上实现完整 DevSecOps 管线的生产级家庭实验室。从虚拟机配置到运行时威胁检测的每一层都已实现自动化、安全加固和代码化部署。 **如果服务器被摧毁,一切都将从这个仓库重建。** ``` Terraform (Talos VMs) → talosctl (K8s bootstrap) → Cilium (eBPF networking + NetworkPolicies) → ArgoCD (GitOps, single source of truth) → Trivy + Checkov (shift-left scanning) → Cosign (image signing + SBOM) → Kyverno (admission control) → Vault (secrets injection) → Falco (runtime threat detection) → Prometheus + Grafana + Loki (observability) Also in this repo: Packer (Ubuntu 24.04 golden image) + Ansible (baseline hardening) → reusable for non-K8s VMs (monitoring, SIEM, jump hosts) ``` ## 架构 | 组件 | 详情 | |---------------|----------------------------------------------------| | 虚拟机管理程序 | Proxmox VE 9.1.6,ZFS RAIDZ-1(约 916 GB) | | 防火墙 | OPNsense 26.1(虚拟化,stick 上路由器)| | Kubernetes | Talos Linux v1.12.6 — 3 节点集群(K8s v1.35.2)| | CNI | Cilium(eBPF)替代 Flannel + kube-proxy | | GitOps | ArgoCD v3.3.6(应用集群模式)| | 监控 | Prometheus + Grafana + Loki | | 控制平面 | Windows 11 + WSL Ubuntu | ### 网络分段(通过 OPNsense 的 VLAN) | 区域 | VLAN | 子网 | 用途 | |-------------|------|----------------|-------------------------------| | 管理 | 10 | 10.10.10.0/24 | 管理员访问 | | Kubernetes | 20 | 10.10.20.0/24 | K8s 控制平面和工作节点 | | 存储 | 30 | 10.10.30.0/24 | 持久化存储后端 | | 实验室 / DMZ | 40 | 10.10.40.0/24 | 隔离的安全实验室 | ### Kubernetes 集群 | 节点 | IP | 角色 | 操作系统 | |---------------|-------------|---------------|---------------------------| | talos-ctrl-01 | 10.10.20.10 | 控制平面 | Talos Linux(不可变)| | talos-work-01 | 10.10.20.11 | 工作节点 | Talos Linux(不可变)| | talos-work-02 | 10.10.20.12 | 工作节点 | Talos Linux(不可变)| ### 暴露的服务(MetalLB L2/ARP) | IP | 服务 | 用途 | |----------------|-------------|--------------------------------| | 10.10.20.100 | Hubble UI | 网络流量可观测性 | | 10.10.20.101 | ArgoCD UI | GitOps 仪表板 | | 10.10.20.102 | nginx-test | 加固测试应用 | | 10.10.20.103 | Grafana | 指标和日志仪表板 | ## 安全栈 该实验室在 6 个安全域中实现了纵深防御,使用直接映射到企业和云原生安全角色的工具。 ### 供应链安全 | 工具 | 用途 | 阶段 | |-------------------|--------------------------------------------|-------| | Packer | 可复现、加固的黄金镜像 | 1 | | Trivy | 容器镜像 CVE 扫描 + IaC 错误配置 | 5b | | Checkov | IaC 安全扫描(CIS 基准)| 5b | | Cosign(Sigstore)| 通过 OIDC + Fulcio/Rekor 进行无密钥镜像签名 | 5c | | SBOM(SPDX 2.3)| 附加到镜像的软件物料清单 | 5c | ### 运行时安全 | 工具 | 用途 | 阶段 | |---------|---------------------------------------------------|-------| | Kyverno | Kubernetes 准入控制器 — 强制执行 6 个 ClusterPolicy | 6a | | Vault | 通过 sidecar 注入密钥(Kubernetes 认证,KV v2)| 6b | | Falco | 基于 eBPF 的运行时威胁检测(映射到 MITRE ATT&CK)| 6c | | Cilium NetworkPolicy | Pod 级入口/出口防火墙(默认拒绝)| 7b | ### 可观测性 | 工具 | 用途 | 阶段 | |------------------|--------------------------------------------|-------| | Prometheus | 集群和节点指标(kube-prometheus-stack)| 7a | | Grafana | 仪表板和日志探索 | 7a | | Loki + Promtail | 集中式日志聚合 | 7a | | Hubble(Cilium)| 网络流量可观测性(L3/L4/L7)| 4b | ### 验证的安全控制 使用 Trivy 和 Checkov 迭代加固部署,将发现的问题从 13 减少到 0: | 控制措施 | 实现方式 | 强制执行者 | |---------|---------------|-------------| | 非 root 容器 | `runAsNonRoot: true`,`runAsUser: 10001` | Kyverno(`require-run-as-nonroot`)| | 只读文件系统 | `readOnlyRootFilesystem: true` + emptyDir 挂载 | securityContext | | 丢弃所有能力 | `capabilities.drop: ["ALL"]` | Kyverno(`require-drop-all-capabilities`)| | 资源限制 | CPU 和内存请求/限制 | Kyverno(`require-resource-limits`)| | 无 latest 标签 | 摘要固定(`image@sha256:...`)| Kyverno(`disallow-latest-tag`)| | 镜像签名 | 通过 Sigstore OIDC 进行 Cosign 无密钥签名 | Kyverno(`verify-image-signature`,审计)| | 网络分段 | NetworkPolicy:仅允许出口 DNS + Vault | Cilium | | 密钥注入 | Vault Agent sidecar,应用从不处理密钥 | Vault + Kubernetes 认证 | | 运行时检测 | 容器中的 shell 实时检测 | Falco(T1059 MITRE ATT&CK)| ## 攻击场景 — 纵深防御验证 对加固的 nginx 部署执行了模拟攻击,以验证所有安全层协同工作: | 攻击步骤 | 结果 | 控制措施 | |------------|--------|---------| | 部署不合规的 pod | 在准入时被**拒绝** | Kyverno 策略 | | 在运行中的容器中打开 shell | **检测到** — Falco 告警(T1059)| Falco eBPF | | 读取 `/etc/shadow` | **权限被拒绝** — 非 root 用户 | securityContext | | 安装攻击者工具(`apk add curl`)| **权限被拒绝** — 只读文件系统 | securityContext | | 横向移动到 ArgoCD | **超时** — 出口被阻止 | NetworkPolicy | | 向互联网泄露数据 | **超时** — 出口被阻止 | NetworkPolicy | | 访问 Kubernetes API | **超时** — 出口受限 | NetworkPolicy | | 读取 ServiceAccount 令牌 | 可读(Vault 需要)— **无 RBAC 权限** | 已记录权衡 | 所有告警都通过 Loki 集中到 Grafana 中进行排查。 ## 项目结构 ``` homelab/ ├── packer/ # Phase 1 — Golden image builds │ └── ubuntu-cloud/ # Ubuntu 24.04 hardened template (air-gapped autoinstall) │ ├── terraform/ # Phase 2 & 4 — Infrastructure provisioning │ └── environments/ │ ├── lab/ # Ubuntu VMs (code preserved, VMs destroyed) │ └── talos/ # Talos Linux VMs (active, bpg/proxmox provider) │ ├── ansible/ # Phase 3 — Configuration management │ ├── inventory/ │ ├── roles/baseline/ # UFW, Fail2Ban, sysctl hardening, auditd │ └── site.yml │ ├── talos/ # Phase 4 — Cluster config (excluded from Git — PKI/secrets) │ └── clusterconfig/ │ ├── kubernetes/ # Helm values and configs (applied manually) │ └── monitoring/ │ ├── kube-prometheus-stack-values.yaml │ ├── loki-stack-values.yaml │ └── loki-datasource.yaml │ └── gitops/ # Phase 5+ — Everything deployed by ArgoCD ├── apps/ # ArgoCD Application definitions (App of Apps) │ ├── nginx.yaml │ └── kyverno-policies.yaml └── manifests/ # Kubernetes manifests (source of truth) ├── nginx/ │ ├── namespace.yaml │ ├── deployment.yaml # Fully hardened (see Security Controls) │ ├── service.yaml │ ├── serviceaccount.yaml │ ├── sealedsecret.yaml │ └── networkpolicy.yaml └── kyverno-policies/ ├── disallow-latest-tag.yaml ├── require-run-as-nonroot.yaml ├── require-resource-limits.yaml ├── require-drop-all-capabilities.yaml ├── require-labels.yaml └── verify-image-signature.yaml ``` ## 阶段 - [x] **阶段 0** — Proxmox 基础、ZFS、VLAN 分段、OPNsense 防火墙 - [x] **阶段 1** — 使用 Packer 的黄金镜像(Ubuntu 24.04、离线自动安装、操作系统加固) - [x] **阶段 2** — 使用 Terraform 的基础设施即代码(bpg/proxmox、Cloud-Init、`for_each`) - [x] **阶段 3** — 使用 Ansible 的配置管理(UFW、Fail2Ban、sysctl、auditd) - [x] **阶段 4** — 使用 Talos Linux 的 Kubernetes(不可变操作系统、mTLS、仅 API、etcd 加密) - [x] **阶段 4b** — Cilium(eBPF CNI、kube-proxy 替代)、Hubble、MetalLB(L2/ARP) - [x] **阶段 5a** — GitOps:ArgoCD(应用集群、自愈)、Sealed Secrets - [x] **阶段 5b** — 左移安全:Trivy(CVE + 错误配置)、Checkov(CIS 基准) - [x] **阶段 5c** — 供应链:Cosign 无密钥签名(Sigstore/Fulcio/Rekor)、SBOM(SPDX 2.3) - [x] **阶段 6a** — 策略强制执行:Kyverno(6 个 ClusterPolicy、5 个 Enforce + 1 个 Audit) - [x] **阶段 6b** — 密钥管理:HashiCorp Vault(KV v、Kubernetes 认证、sidecar 注入) - [x] **阶段 6c** — 运行时安全:Falco(eBPF、映射到 MITRE ATT&CK、Falcosidekick) - [x] **阶段 7a** — 可观测性:Prometheus + Grafana(20+ 仪表板)、Loki + Promtail - [x] **阶段 7b** — 网络分段:Cilium NetworkPolicies + 攻击场景验证 ## 快速开始 ### 前置条件 Proxmox VE 8+ 配备 ZFS、用于 VLAN 路由的 OPNsense,以及配备以下工具的 Linux 工作站(或 WSL): `packer` · `terraform` · `ansible` · `talosctl` · `kubectl` · `helm` · `cilium-cli` · `argocd` · `kubeseal` · `trivy` · `checkov` · `cosign` · `vault` ### 重建 Kubernetes 平台 ``` # 配置 Talos 虚拟机 cd terraform/environments/talos terraform apply # 引导 Kubernetes talosctl gen config homelab-k8s https://10.10.20.10:6443 \ --config-patch-control-plane @patches/cni-proxy.yaml talosctl apply-config --insecure -n --file .yaml talosctl bootstrap --endpoints 10.10.20.10 --nodes 10.10.20.10 # 安装网络 helm install cilium cilium/cilium --namespace kube-system [...] helm install metallb metallb/metallb --namespace metallb-system --create-namespace # 安装 GitOps(ArgoCD 从 Git 同步其他所有内容) kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml argocd app create root --repo https://github.com/abdelhaouari/homelab.git \ --path gitops/apps --sync-policy automated --auto-prune --self-heal # 安装安全栈 helm install kyverno kyverno/kyverno --namespace kyverno --create-namespace helm install vault hashicorp/vault --namespace vault --create-namespace --set server.dev.enabled=true helm install falco falcosecurity/falco --namespace falco --create-namespace # 安装可观测性 helm install kube-prometheus-stack prometheus-community/kube-prometheus-stack \ --namespace monitoring --values kubernetes/monitoring/kube-prometheus-stack-values.yaml helm install loki-stack grafana/loki-stack \ --namespace monitoring --values kubernetes/monitoring/loki-stack-values.yaml ``` ### 构建 Ubuntu 黄金镜像(用于非 K8s 虚拟机) Packer 构建一个加固的 Ubuntu 24.04 模板,用于传统虚拟机(监控、SIEM、跳板机)。不用于 Talos — Talos 自带不可变镜像。 ``` cd packer/ubuntu-cloud packer build -var-file=credentials.pkrvars.hcl . # 生成 Proxmox 模板 ID 9000(~8 分钟构建时间) ``` ## GitOps 工作流 所有应用部署都通过 Git 流转: ``` Developer commits to main → ArgoCD detects change (polling or webhook) → Manifests are applied to the cluster → Kyverno validates at admission (blocks non-compliant resources) → Vault Agent injects secrets into pods → Falco monitors runtime behavior → Prometheus scrapes metrics, Promtail collects logs → Grafana displays dashboards and alerts ``` 要部署新应用: 1. 将 Kubernetes 清单添加到 `gitops/manifests//` 2. 将 ArgoCD Application 定义添加到 `gitops/apps/.yaml` 3. `git commit && git push` — ArgoCD 处理其余工作 对集群的手动更改会被 ArgoCD 的自愈功能自动撤销。 ## 安全原则 | 原则 | 实现方式 | |-----------|---------------| | 最小权限 | 每个工具的 API 令牌、每个命名空间的 PodSecurity 标签、限定到命名空间的 RBAC | | 不可变基础设施 | Packer 黄金镜像、Talos Linux(无 SSH、无 shell、仅 API)| | 密钥管理 | Git 的 Sealed Secrets、运行时 Vault sidecar 注入、本地密钥的 `.gitignore` | | 网络分段 | VLAN(OPNsense)、Cilium NetworkPolicies(默认拒绝出口)| | 纵深防御 | 边界防火墙 → VLAN 隔离 → PodSecurity → Kyverno 准入 → NetworkPolicy → Falco 运行时 | | 左移安全 | Trivy + Checkov 在部署前扫描清单和镜像 | | 供应链安全 | Cosign 无密钥签名、SBOM 生成、摘要固定(无可变标签)| | GitOps | Git 是唯一真实来源;偏差会自动纠正 | | 审计跟踪 | Git 提交历史、Kubernetes 审计日志、Loki/Grafana 中的 Falco 告警 | | 可复现性 | 从代码完全销毁和重建 | ## 工具 | 工具 | 类别 | 状态 | |------|----------|--------| | Proxmox VE | 虚拟机管理程序 | 已部署 | | OPNsense | 防火墙/路由器 | 已部署 | | Packer | 镜像构建 | 已部署 | | Terraform(bpg/proxmox)| 基础设施配置 | 已部署 | | Ansible | 配置管理 | 已部署 | | Talos Linux | 不可变 Kubernetes 操作系统 | 已部署 | | Cilium + Hubble | eBPF CNI/网络可观测性 | 已部署 | | MetalLB | 裸金属负载均衡器 | 已部署 | | ArgoCD | GitOps 持续交付 | 已部署 | | Sealed Secrets | Git 中加密的密钥 | 已部署 | | Trivy | CVE + IaC 扫描器 | 已部署 | | Checkov | IaC 安全扫描器(CIS)| 已部署 | | Cosign(Sigstore)| 镜像签名和验证 | 已部署 | | Kyverno | 策略强制执行(准入)| 已部署 | | HashiCorp Vault | 密钥管理 | 已部署 | | Falco | 运行时威胁检测(eBPF)| 已部署 | | Prometheus + Grafana | 指标 + 仪表板 | 已部署 | | Loki + Promtail | 日志聚合 | 已部署 |
标签:Ansible, ArgoCD, Cilium, Cosign, DevSecOps, EC2, ECS, Falco, GitHub Advanced Security, GitOps, Grafana, Homelab, IaC, JSONLines, NPM, OPNsense, Packer, Proxmox, SBOM, Secrets管理, StruQ, Talos Linux, Terraform, Vault, VLAN, Web截图, 上游代理, 企业级, 可复现, 子域名突变, 安全加固, 安全扫描, 容器安全, 敏感词过滤, 日志聚合, 时序注入, 特权提升, 监控告警, 硬件无关, 系统提示词, 网络分段, 网络策略, 自动化部署, 自定义请求头, 裸金属, 镜像签名, 防火墙, 零信任