sahilsinghi/network-segmentation-lab
GitHub: sahilsinghi/network-segmentation-lab
基于 VyOS、Suricata 与 Containerlab 的四区域网络分段实验室,用于演示和验证跨区域横向移动检测及防火墙策略执行。
Stars: 0 | Forks: 0
# 多区域网络分段实验室
**VyOS 1.4 防火墙 · Suricata 7.x IDS · Containerlab 编排 · Wazuh 集成 · Apple Silicon 原生支持**
一个深度防御实验室,用于演示跨 4 个分段网络区域的横向移动检测,
并与现有的 SOC 检测实验室 Wazuh manager 集成,以实现统一的主机 + 网络遥测。
## 架构
```
graph TD
INET["Internet Simulation\nDocker host bridge"]
subgraph FW["VyOS 1.4 Firewall — default-deny stateful"]
GW["vyos-lab-fw\n10.10.x.1 gateways"]
end
subgraph DMZ["DMZ · 10.10.10.0/24"]
NGINX["nginx\n10.10.10.10"]
KALI["kali attacker\n10.10.10.20"]
end
subgraph INT["Internal · 10.10.20.0/24"]
WS["workstation\n10.10.20.10"]
end
subgraph DATA["Data · 10.10.30.0/24"]
PG["postgres\n10.10.30.10"]
end
subgraph MGMT["Management · 10.10.40.0/24"]
ADMIN["jump host\n10.10.40.10"]
end
INET --> GW
GW -->|"HTTP/HTTPS only"| DMZ
GW -->|"PostgreSQL only"| INT
GW -->|"no outbound"| DATA
GW -->|"SSH only"| MGMT
IDS["Suricata 7.x IDS\nAF-PACKET passive tap\nET Open + 15 custom rules"]
FB["Filebeat\nSuricata module"]
WAZUH["Wazuh Manager\n(existing SOC Lab)\nhost + network telemetry"]
DMZ & INT & DATA & MGMT -->|"all traffic mirrored"| IDS
IDS -->|"EVE JSON"| FB
FB -->|"TLS port 5044"| WAZUH
```
## 快速开始
### macOS / Apple Silicon 注意事项
Containerlab 没有原生的 macOS 二进制文件——它需要 Linux kernel 网络命名空间。
在 macOS 上,包含的 `scripts/clab` 包装器会在 Docker Desktop 的
Linux VM 中运行 containerlab,二进制文件在其中正常工作。以下所有命令均使用此包装器。
### 前置条件
```
# Docker Desktop for Apple Silicon 必须正在运行
# 提前拉取大型镜像(Kali 约 3 GB — 在演示前执行此操作)
docker pull kalilinux/kali-rolling
docker pull vyos/vyos:sagitta
docker pull jasonish/suricata:7.0
docker pull ghcr.io/srl-labs/clab:0.76.0 # containerlab runner image
```
### 配置 Wazuh endpoint
编辑 `filebeat/filebeat.yml` 并将 `WAZUH_MANAGER_IP` 替换为您的 Wazuh manager IP。
将 Wazuh CA 证书复制到 `filebeat/certs/wazuh-ca.crt`:
```
scp wazuh-admin@:/etc/wazuh-manager/api/configuration/ssl/root-ca.pem \
filebeat/certs/wazuh-ca.crt
```
### 部署
```
git clone https://github.com/sahilsinghi/network-segmentation-lab
cd network-segmentation-lab
# 通过 macOS wrapper 部署完整实验室(镜像拉取后 < 5 分钟)
./scripts/clab deploy -t topology.clab.yml
# 验证所有 containers 已启动
sudo containerlab inspect -t topology.clab.yml
```
### 检查与销毁
```
# 显示正在运行的 nodes
./scripts/clab inspect -t topology.clab.yml
# 干净地卸载
./scripts/clab destroy -t topology.clab.yml
```
## 防火墙策略矩阵
| 源 → 目标 | 允许 | VyOS 规则 |
|---------------------|-----------|-----------|
| DMZ → Internal | TCP 80, 443 | DMZ-TO-INTERNAL |
| DMZ → Data | **拒绝** | DMZ-TO-DATA |
| DMZ → Management | **拒绝** | DMZ-TO-MGMT |
| Internal → Data | TCP 5432 | INTERNAL-TO-DATA |
| Internal → Management | **拒绝** | INTERNAL-TO-MGMT |
| Data → Any | **拒绝** (无出站初始化) | DATA-OUTBOUND |
| Management → All | TCP 22 | MGMT-TO-ALL |
包含验证命令的完整矩阵:[`docs/firewall-policy.md`](docs/firewall-policy.md)
## 攻击模拟
在 Kali 容器内部运行所有攻击:
```
docker exec -it clab-network-seg-lab-kali bash
```
| # | 脚本 | MITRE 技术 | VyOS 动作 | Suricata SIDs |
|---|--------|----------------|-------------|---------------|
| 01 | `01-nmap-scan.sh` | T1046 网络服务发现 | 仅转发 HTTP | 9001004, 9001005 |
| 02 | `02-smb-lateral.sh` | T1021.002 SMB 横向移动 | **阻止**端口 445 | 9001001, 9001002, 9001014 |
| 03 | `03-ssh-bruteforce.sh` | T1110.001 密码猜测 | **阻止**来自 DMZ 的 SSH | 9001011 |
| 04 | `04-dns-tunnel.sh` | T1048.003 DNS 渗透 | 允许 (DNS 未被阻止) | 9001007, 9001008 |
| 05 | `05-reverse-shell.sh` | T1059.004 Unix Shell | 阻止出站返回 | 9001009, 9001010 |
| 06 | `06-icmp-covert.sh` | T1095 ICMP 隐蔽通道 | 允许 (ICMP 诊断) | 9001012, 9001013 |
包含预期与实际结果的攻击执行日志:[`tests/execution_log.md`](tests/execution_log.md)
## 自定义 Suricata 规则
15 条涵盖了特定于此区域拓扑的横向移动 TTP 的规则:
```
suricata/custom-rules/lateral-movement.rules # SIDs 9001001–9001015
suricata/custom-rules/policy-violations.rules # SIDs 9002001–9002010
```
规则示例 —— 来自 DMZ 的 SMB 枚举 (T1021.002):
```
alert tcp $DMZ_NET any -> $INTERNAL_NET 445 \
(msg:"LATERAL-MOVE SMB Enumeration from DMZ to Internal T1021.002"; \
flow:established,to_server; \
content:"|FF|SMB"; depth:9; offset:4; \
classtype:policy-violation; \
sid:9001001; rev:1; \
metadata:mitre_technique_id T1021.002;)
```
## Wazuh 集成
通过 Filebeat 将 Suricata EVE JSON 数据流传输到 **来自 SOC 检测实验室的现有 Wazuh manager**。
无需部署新的 SIEM。两种数据源,一个仪表板:
- **主机遥测:** 来自 SOC 实验室 Windows VM 的 Sysmon 事件
- **网络遥测:** 来自此实验室的 Suricata EVE JSON
有关关联查询,请参见 [`docs/cross-portfolio-bridge.md`](docs/cross-portfolio-bridge.md)。
## 完成定义检查清单
- [ ] `containerlab deploy -t topology.clab.yml` 在 5 分钟内完成
- [ ] VyOS 执行策略矩阵 —— 已通过在每个区域使用 nmap 进行验证
- [ ] Suricata 将 EVE JSON 写入 `logs/suricata/eve.json`
- [ ] Filebeat 发送至 Wazuh —— 在攻击执行后 30 秒内出现告警
- [ ] 所有 6 个攻击模拟均已运行,并在 `tests/execution_log.md` 中记录了结果
- [ ] 至少 3 个模拟在 Suricata 和 Wazuh 中均显示关联告警
- [ ] 威胁模型将所有控制措施映射到 MITRE ATT&CK 技术 ID
- [ ] README 中的架构图 + 5 张屏幕截图
- [ ] 录制了 90 秒的 Loom 演示
## 屏幕截图
| 截图 | 展示内容 |
|-----------|---------------|
| `screenshots/01-topology.png` | `containerlab inspect` 显示所有节点正在运行 |
| `screenshots/02-vyos-policy-log.png` | VyOS 防火墙针对来自 DMZ 的 SMB 的丢弃日志 |
| `screenshots/03-suricata-alert.png` | Suricata EVE JSON 告警 —— SID 9001004 |
| `screenshots/04-wazuh-correlated-event.png` | Wazuh 仪表板 —— 可见 Suricata 告警 |
| `screenshots/05-attack-execution.png` | Kali 终端 —— 攻击脚本输出 |
## 威胁模型
针对每个 VyOS 规则和 Suricata 签名的完整 MITRE ATT&CK 映射:
[`docs/threat-model.md`](docs/threat-model.md)
## 项目结构
```
network-segmentation-lab/
├── topology.clab.yml # Containerlab — single file brings up full lab
├── vyos/
│ ├── bootstrap-config.boot # VyOS 1.4 startup config (zone firewall policies)
│ └── policy-matrix.md
├── suricata/
│ ├── suricata.yaml # Suricata 7.x config (AF-PACKET, EVE JSON)
│ ├── custom-rules/
│ │ ├── lateral-movement.rules # 15 rules, MITRE-tagged (SIDs 9001xxx)
│ │ └── policy-violations.rules # 10 rules, zone policy (SIDs 9002xxx)
│ └── README.md
├── filebeat/
│ └── filebeat.yml # Ships EVE JSON to Wazuh manager
├── endpoints/
│ ├── nginx-dmz/ # DMZ web server
│ ├── workstation-internal/ # Internal Ubuntu + SMB
│ ├── postgres-data/ # Data zone PostgreSQL
│ └── admin-mgmt/ # Management jump host
├── tests/
│ ├── attacks/ # 6 documented attack scripts
│ └── execution_log.md # Expected vs actual outcomes
├── docs/
│ ├── architecture.md # Mermaid diagram + design rationale
│ ├── ip-plan.md
│ ├── firewall-policy.md # Full allow/deny matrix with VyOS references
│ ├── threat-model.md # MITRE ATT&CK control mapping
│ └── cross-portfolio-bridge.md # How this feeds the SOC Lab Wazuh instance
└── screenshots/
```
## ARM64 注意事项 (Apple Silicon)
- **Containerlab:** 仅限 Linux 的二进制文件 —— `scripts/clab` 包装器在 Docker Desktop 的 Linux VM 中运行它
- **VyOS sagitta:** 多架构镜像 —— 在 M1/M2/M3 上原生运行
- **Kali:** `kalilinux/kali-rolling` 是支持 ARM64 原生的多架构镜像
- **Suricata:** `jasonish/suricata:7.0` 是支持 ARM64 原生的多架构镜像
- **pfSense 替代方案:** pfSense 没有 ARM64 构建 —— VyOS 是此处的正确选择
## v2 路线图
- 将 DMZ Suricata 接口切换为 IPS 模式 (内联丢弃)
- 添加 Zeek 以获取更丰富的 L7 协议日志记录 (conn.log, dns.log, http.log)
- 添加 OPNsense 作为并行部署以增加关键字覆盖范围
- 添加 Tetragon (eBPF) 以实现 pod/container 级别的网络策略
- 在云项目交付后与 AWS VPC Flow Logs 集成
## 相关项目
| 项目 | 链接 | 连接方式 |
|---------|------|-----------------|
| SOC 检测实验室 | [github.com/sahilsinghi/soc-detection-lab](https://github.com/sahilsinghi/soc-detection-lab) | 共享 Wazuh manager —— 主机端 TTPs |
| SOAR 告警分诊 | _(即将推出)_ | 自动化处理来自此实验室 Wazuh 告警的分诊 |
| APT 威胁行为者档案 | [github.com/sahilsinghi/apt-threat-actor-profiler](https://github.com/sahilsinghi/apt-threat-actor-profiler) | 将检测到的 TTPs 映射到威胁行为者档案 |
*由 [Sahil Singhi](https://github.com/sahilsinghi) 构建 · Apache 2.0 许可证*
标签:Containerlab, IP 地址批量处理, Metaprompt, PE 加载器, Suricata, VyOS, Wazuh, XXE攻击, 插件系统, 测试用例, 现代安全运营, 网络隔离, 请求拦截, 靶场环境