Fayez-Alba/homelab-cybersecurity
GitHub: Fayez-Alba/homelab-cybersecurity
基于 Proxmox VE 的家庭网络安全实验室,通过 VLAN 隔离、pfSense 防火墙以及 Wazuh SIEM 和 Suricata IDS 的深度集成,模拟企业级 SOC 环境用于威胁检测与事件响应实战演练。
Stars: 0 | Forks: 0
# 🔒 家庭网络安全实验室
一个从零开始搭建在单台迷你主机上的分区家庭网络实验室——具备 VLAN 隔离、专用防火墙/路由器、IDS 监控和集中式 SIEM。旨在模拟企业 SOC 环境,以便进行实际的威胁检测和事件响应演练。
## 🏗️ 架构

```
ISP Gateway (Bridge Mode)
│
[UGREEN USB NIC — Dedicated WAN]
│
┌────┴────┐
│ pfSense │──── VLAN 1 — Management
│ 2.8.1 │──── VLAN 20 — Isolated Lab (attack/defend)
│ │──── VLAN 40 — Guest WiFi (internet-only)
│ │──── VLAN 50 — IoT (restricted)
└────┬────┘
│ Suricata IDS monitoring LAN traffic
│ ↓ EVE JSON alerts forwarded to Wazuh
│
[TP-Link TL-SG108E — 802.1Q VLAN Trunking]
│
┌─────┴──────┐
│ Proxmox │──── Kali Linux (attack VM)
│ VE │──── Ubuntu Server (target + Wazuh agent)
│ M910q │──── Windows 11 (target + Wazuh agent)
│ │──── Wazuh 4.14.2 (SIEM — manager/indexer/dashboard)
└────────────┘
│
[TP-Link Omada EAP723 — 3 SSIDs mapped to VLANs]
```
## 🛠️ 技术栈
| 层级 | 技术 | 作用 |
|---|---|---|
| Hypervisor | Proxmox VE 9.1.1 | 裸机 VM 托管 |
| 防火墙 / 路由器 | pfSense 2.8.1 | VLAN 路由, NAT, DHCP, 防火墙规则 |
| IDS | Suricata 7.0.11 (运行于 pfSense) | LAN 接口上的网络入侵检测 |
| SIEM | Wazuh 4.14.2 | 日志收集、文件完整性监控、告警 |
| 管理型交换机 | TP-Link TL-SG108E | 802.1Q VLAN trunking |
| 无线 AP | TP-Link Omada EAP723 | 3 个由 VLAN 分段的 SSID |
| WAN 适配器 | UGREEN USB NIC (ASIX AX88179) | pfSense 的专用 WAN 上行链路 |
| 攻击 VM | Kali Linux 2025.4 | 进攻性安全测试 |
| 目标 VM | Ubuntu Server, Windows 11 | 带有 Wazuh agent 的端点 |
| 硬件 | 规格 |
|---|---|
| Lenovo ThinkCentre M910q | 32 GB 内存 · 1 TB NVMe |
## 🌐 网络设计
四个在交换机上强制执行并由 pfSense 路由的 VLAN,每个都有专用的 DHCP 作用域和防火墙规则集:
| VLAN | 名称 | 用途 | 网关 |
|---|---|---|---|
| 1 | 管理网络 (Management) | Proxmox 管理,PC2 访问 | — |
| 20 | 实验网络 (Lab) | 隔离的攻防网络 | pfSense LAN |
| 40 | 访客网络 (Guest) | 仅供访客使用的 WiFi | pfSense GUEST |
| 50 | IoT 网络 (IoT) | 受限的智能设备 | pfSense IOT |
ISP 网关 (Rogers Ignite) 运行在桥接模式下,通过一个**专用 USB NIC** 为 pfSense 提供干净的 WAN 路径——让 WAN 流量完全脱离 VLAN trunk。
## 📊 监控技术栈
### Wazuh 4.14.2 (SIEM)
Wazuh 作为专用 VM 运行,包含完整的技术栈(manager、indexer、dashboard)。所有三个目标 VM 上的 agent 都通过端口 1514 发送日志。Filebeat pipeline 将解析后的事件路由到 indexer 中进行仪表板可视化。
当前的监控范围包括文件完整性监控 (FIM)、安全事件关联以及 agent 健康状况追踪。pfSense 防火墙日志通过 syslog 接入。
### Suricata 7.0.11 (网络 IDS)
Suricata 作为 pfSense 软件包运行在 **LAN 接口 (VLAN 20)** 上,检查进出实验室网络的所有流量。它运行在 **IDS 模式**(检测和记录,而不是阻断)下,并启用了 EVE JSON 输出以进行 SIEM 集成。
**规则来源:** Emerging Threats Open (ET Open) —— 拥有 26,000+ 条规则,涵盖扫描检测、漏洞利用特征、恶意软件通信、DNS 滥用和攻击响应模式。
**为什么选择 LAN 而不是 WAN:** 在 WAN 接口上运行 Suricata 基本上会重复 pfSense 默认的“拒绝所有”入站策略。而在 LAN 接口上,它能捕获真正重要的流量——出站的命令与控制 (C2)、横向移动模式以及对攻击工具的响应。
### Suricata → Wazuh 集成
Suricata 的 EVE JSON 告警日志通过自定义的 UDP 转发器脚本从 pfSense 转发到 Wazuh manager。Wazuh 内置的 Suricata 解码器(规则组 `suricata`,规则 ID `86601`)会自动解析传入的告警,并使用 MITRE ATT&CK 分类对其进行扩充。
这使得实验室拥有了一个**单一管理平台**视图:来自 Wazuh agent 的端点安全事件与来自 Suricata 的网络入侵告警并排显示在同一个仪表板中。
## 🧠 经验教训
该 PDF 记录了*什么出现了故障以及我是如何修复它的*。本节涵盖了*这些问题真正教会了我什么*——故障排除背后的思考过程。
### 每一层都会影响其他每一层
这是最重要的一课。当 Proxmox 防火墙标志悄悄阻断了 VM 之间的 ARP 通信时,我花了几个小时怀疑是 pfSense 规则,然后是交换机 trunk 配置的问题,最后才将其定位到一个我原以为不会影响 Layer 2 的 Hypervisor 级别设置。这教会了我要挑战关于问题属于哪一层的假设——答案往往是你没有关注的那一层。
### “能用”并不等于“配置正确”
TL-SG108E 似乎保存了 VLAN 配置,但在重启后又悄悄恢复了原状。Ubuntu VM 获取了正确的静态 IP,直到 cloud-init 在下次启动时悄悄覆盖了它。这两者在测试期间都能正常工作,但在实际运行中却失败了。我现在将“重启后依然存活”视为真正的测试,而不是“现在能用”。
### 安全工具本身也会带来安全问题
SELinux 阻止了 Wazuh agent 在端口 1514 上的通信。快速的解决方法是使用 permissive mode(宽容模式)——我使用了它,并将其记录了下来。但我也记录了这是一种权衡:在生产环境中,正确的做法是编写自定义的 SELinux 策略,而不是禁用强制访问控制。既知道捷径,又知道为什么它是捷径,这就是实验室练习与真正的工程判断之间的区别。
### 变通方法是可行的——未记录在案的变通方法就是债务
让 Rogers 网关进入桥接模式本身就是一次故障排除的实践——它最初很不稳定,需要多次尝试才能可靠配置。tap 接口在每次 Proxmox 重启后都需要 post-up 脚本。这些都不是失败——它们是约束条件。但如果我没有把它们记录下来,下一个人(或者未来的我)就会浪费几个小时去重新发现它们。将其写下来也是修复的一部分。
### 没有遥测数据的工具仅仅是装饰品
搭建 Wazuh 是最简单的部分。困难的部分是 Filebeat pipeline——尽管 agent 正在报告,但仪表板显示零告警。它看起来已经部署了,但它并没有*正常工作*。这种“已安装”和“生成可操作数据”之间的差距是大多数家庭实验室停滞不前的地方。克服这个瓶颈,才能使其成为一个真正的监控技术栈,而不仅仅是为了完成任务的复选框。
### 虚拟环境打破了关于网络行为的假设
在 Proxmox VM 中的 pfSense 上部署 Suricata 揭示了一个问题:标准校验和验证会在虚拟化环境中悄悄丢弃数据包——因为 Hypervisor 在 guest OS 看不到的层级处理了校验和。Suricata 加载了 26,000+ 条规则并处理了流量,但在正确配置校验和验证之前没有产生任何告警。结论是:当一个检测工具能看到流量但没有产生告警时,问题往往出在该工具与环境的交互方式上,而不是规则本身。
### 默认的集成路径并不总是正确的路径
将 Suricata 与 Wazuh 集成看似简单——启用 syslog 转发并让 Wazuh 解析即可。但在实际操作中,pfSense 的 syslog 守护进程会将消息截断为 480 字节,从而悄悄地破坏了 JSON 告警数据。Wazuh agent 无法安装在 pfSense 上(FreeBSD 软件包不可用)。最终的解决方案是一个自定义的 EVE JSON 转发器脚本,它通过 UDP 将告警事件直接输送到 Wazuh。有时候,“官方文档”上的集成路径行不通,真正的技能在于找到切实可行的替代方案。
## 📸 截图
| 视图 | 截图 |
|---|---|
| Proxmox VM 仪表板 |  |
| pfSense 接口分配 |  |
| pfSense 防火墙规则 |  |
| Wazuh 告警仪表板 |  |
| Suricata IDS 告警 |  |
| Wazuh SIEM 中的 Suricata 告警 |  |
| 交换机 VLAN 配置 |  |
## 📁 仓库结构
```
homelab-cybersecurity/
├── README.md
├── LICENSE
├── .gitignore
├── docs/
│ ├── full-lab-writeup.pdf
│ ├── architecture-diagram.png
│ └── screenshots/
│ ├── proxmox-dashboard.png
│ ├── pfsense-interfaces.png
│ ├── pfsense-rules.png
│ ├── wazuh-alerts.png
│ ├── suricata-alert.png
│ ├── suricata-wazuh-integration.png
│ └── vlan-config.png
├── configs/
│ ├── pfsense/
│ │ └── firewall-rules-summary.md
│ ├── wazuh/
│ │ ├── ossec.conf.example
│ │ └── filebeat.yml.example
│ ├── proxmox/
│ │ └── interfaces.example
│ └── switch/
│ └── vlan-assignments.md
└── scripts/
├── post-up-tap.sh
└── suricata-fwd.sh
```
## 🗺️ 路线图
- [x] 部署 Suricata IDS 以进行网络级威胁检测
- [x] 将 Suricata 告警与 Wazuh SIEM 仪表板集成
- [ ] 集成 TheHive 用于事件案例管理
- [ ] 添加 Shuffle SOAR 以实现自动化的响应剧本
- [ ] 通过 MISP 接入威胁情报
- [ ] 使用 Atomic Red Team / Caldera 运行 MITRE ATT&CK 模拟
- [ ] 使用 OpenVAS 添加漏洞扫描
## 🎓 认证
- CompTIA Security+
- Google Cybersecurity Analyst Certificate
## 📄 许可证
该项目基于 [MIT 许可证](LICENSE) 授权。
标签:Metaprompt, pfSense, Proxmox VE, Wazuh, x64dbg, 家庭实验室, 应用安全, 网络安全, 网络隔离, 隐私保护