Dr-Lada/homelab-soc

GitHub: Dr-Lada/homelab-soc

记录了一套从单台树莓派发展而来的 Proxmox VE 家庭实验室与 SOC 环境的完整设计、部署与调优过程,兼顾基础设施可靠性设计与安全检测管道构建。

Stars: 0 | Forks: 0

# 基于 Proxmox VE 的家庭实验室与 SOC 环境 ## 概述 本仓库记录了我个人家庭实验室和安全运营中心(SOC)的设计、部署与运行调优过程。该项目最初只是单一用途的硬件(一台运行 Pi-hole 的 Raspberry Pi),如今已发展成为一个托管在专用 Proxmox VE 节点上的、具备监控和冗余能力的环境。 该项目有两个目标: 1. **基础设施可靠性** — 提供高可用的核心服务(冗余 DNS、Zero Trust 远程访问、自动化容灾备份),且实验室本身不会引入任何单点故障。 2. **安全监控与分诊** — 构建真实的检测管道:被动式网络 IDS、集中式 SIEM 数据接入、量化的噪声基线、通过 `wazuh-logtest` 验证的自定义规则调优,以及实时告警推送。 以下每份文档不仅描述了构建了*什么*,还详细说明了*为什么*做出每项决策、在此过程中出现了什么问题,以及是如何进行根因分析的——因为故障排查才是核心所在。 ## 架构 ``` [ Internet / WAN ] │ ┌─────┴─────┐ │ ONT │ └─────┬─────┘ │ ┌───────────▼────────────┐ │ TP-Link TL-SG105E │ WAN-side managed switch │ (port mirroring) │ └─────┬────────────┬─────┘ WAN feed │ │ Mirror feed (copy of all WAN traffic) ┌─────▼─────┐ ┌────▼─────────────────────────────┐ │ Router │ │ Proxmox VE host (MS-A2) │ │ (BE550) │ │ │ └─────┬─────┘ │ vmbr0 (mgmt) ── all guests │ │ │ vmbr1 (promisc, no IP) │ LAN 192.168.0.0/24 │ │ │ │ ┌────▼────────┐ │ ┌─────────────────┤ │ │ Suricata VM │ ens19, passive │ │ │ │ └────┬────────┘ │ ┌─────▼──────┐ │ │ │ eve.json (alerts) │ │ Primary │ │ │ ┌────▼────────┐ │ │ Pi-hole │ │ │ │ Wazuh SIEM │ rules + triage │ │ (Pi Zero) │ │ │ └────┬────────┘ │ └────────────┘ │ │ │ level 7+ only │ ┌────────────┐ │ │ ▼ │ │ Fedora │◄─────────┼───────┤ Discord webhook (SOC channel) │ │ desktop │ NFS │ │ │ │ (backup │ backups │ │ Also hosts: │ │ target) │ │ │ ├─ Replica Pi-hole VM │ └────────────┘ │ │ ├─ nebula-sync LXC (DNS sync) │ │ │ └─ twingate-connector LXC │ │ └──────────────▲───────────────────┘ │ │ outbound-only ZTNA │ ┌────────┴────────┐ │ │ Remote client │ │ │ (mobile/laptop) │ │ └─────────────────┘ ``` ## 项目索引 | 文档 | 核心技术 | 目标 | |---|---|---| | [01 — Zero Trust 远程访问](./docs/01-ztna-twingate.md) | Twingate ZTNA, LXC, Debian | 无任何开放入站端口的逐资源远程访问 | | [02 — 网络 IDS](./docs/02-ids-suricata.md) | Suricata 7, 端口镜像, Proxmox 网桥 | 对所有有线和无线 WAN 流量进行被动检查 | | [03 — SIEM 与告警分诊](./docs/03-siem-wazuh-discord.md) | Wazuh, 自定义 XML 规则, Python, Discord webhooks | 基线测量、噪声抑制、经验证的告警管道 | | [04 — 冗余 DNS 与同步](./docs/04-dns-pihole-nebula.md) | Pi-hole v6, Nebula Sync, REST API, systemd 定时器 | 具备自动化配置一致性的 HA 本地 DNS | | [05 — 自动化备份](./docs/05-backups-proxmox-nfs.md) | Proxmox vzdump, NFS, Fedora | 为整个虚拟化技术栈提供容灾恢复 | ## 关键 SOC 经验与里程碑 * **在调优前测量了真实的告警基线。** 将完整的 IDS→SIEM 管道在满负载模式下运行了约 36 小时,并在编写任何抑制规则之前,直接从 `eve.json` 中分析了约 30,000 条告警——调优决策由统计数据驱动,而非凭空猜测。 * **定位了方向分类 Bug 的根因。** 所谓的“出站 TFTP”告警实际上是*入站*互联网扫描器被错误分类所致,因为在 pre-NAT 分接点上未设置 `HOME_NET`——在 WAN 侧镜像中,`HOME_NET` 必须是公网 IP,而不是 RFC1918 地址段。修复此问题恢复了所有方向感知签名的实际意义。([文档 02](./docs/02-ids-suricata.md)) * **弄清了 Wazuh 规则优先级的实际运作方式。** 基于文件顺序的“先抑制后提升”悄然失效;可靠的模式是通过 `if_sid` 将降级规则设为提升规则的*子规则*。已通过 `wazuh-logtest` 进行了端到端验证。([文档 03](./docs/03-siem-wazuh-discord.md)) * **发现每天有约 100 万条事件被静默丢弃。** Wazuh 的 JSON 解码器拒绝了字段过多的 Suricata 事件,超过了其默认的 256 个字段限制——除了 `ossec.log` 中的错误外,这几乎是不可见的。通过 `analysisd.decoder_order_size` 进行了修复,并验证了丢弃计数器已停止增长。([文档 03](./docs/03-siem-wazuh-discord.md)) * **方向感知告警策略。** 来自信誉列表 IP 对 NAT 后的 WAN 端口的入站命中属于背景干扰(在 level 3 静默记录);而指向相同 IP 的*出站*连接则表明内部已被入侵,仍会升级至 level 7+。 * **处处贯彻 Zero Trust。** 实验室中没有任何入站端口——远程访问仅限出站、基于资源、绑定身份的 ZTNA。 ## 仓库结构 ``` . ├── README.md └── docs/ ├── 01-ztna-twingate.md ├── 02-ids-suricata.md ├── 03-siem-wazuh-discord.md ├── 04-dns-pihole-nebula.md └── 05-backups-proxmox-nfs.md ```
标签:Proxmox VE, 入侵检测系统, 安全数据湖, 安全运营中心, 家庭实验室, 网络映射, 逆向工具, 高可用架构