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攻击, 插件系统, 测试用例, 现代安全运营, 网络隔离, 请求拦截, 靶场环境