yogiex/wazuh-soc-lab

GitHub: yogiex/wazuh-soc-lab

基于 Docker Compose 的 Wazuh SOC 实践实验室,模拟多源日志接入并实现安全监控与告警可视化。

Stars: 0 | Forks: 0

# Wazuh SOC Lab 学习 **Wazuh**(SIEM & XDR)的安全监控实践实验室。 模拟从 **Sangfor NGAF**、**Web Application Firewall (WAF)**、 多域 **shared hosting** 以及 **大学多站点实验室** 收集日志 —— 全部集成于一个 Docker Compose 中。 [![Wazuh](https://img.shields.io/badge/Wazuh-4.9.0-005571?logo=wazuh)](https://wazuh.com) [![Docker](https://img.shields.io/badge/Docker-✓-2496ED?logo=docker)](https://docs.docker.com/compose/) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) ## 📋 目录 - [架构](#-arsitektur) - [目录结构](#-struktur-folder) - [环境要求](#-persyaratan) - [运行方式](#-cara-menjalankan) - [配置与自定义](#-konfigurasi--kustomisasi) - [发送测试日志](#-mengirim-log-uji) - [学习阅读日志](#-belajar-membaca-log) - [许可证](#-lisensi) ## 🏗 架构 ``` graph TB subgraph Sumber Log Sangfor["🔥 Sangfor NGAF
Syslog UDP 1514"] WAF["🛡️ WAF
Syslog UDP 1514"] Shared["🌐 Shared Hosting
5 domain terpisah
Agent: wazuh-agent-shared"] Multi["🏫 Multi-site Lab
labs.ac.id + 5 subdomain
Agent: wazuh-agent-multisite"] end subgraph Wazuh Stack Manager["Wazuh Manager
(Syslog receiver,
Analysis Engine)"] Indexer["Wazuh Indexer
(OpenSearch)"] Dashboard["Wazuh Dashboard
(Kibana-based)"] end Sangfor -->|Log via syslog| Manager WAF -->|Log via syslog| Manager Shared -->|Log via agent| Manager Multi -->|Log via agent| Manager Manager -->|Alerts & events| Indexer Dashboard -->|Query/Visualize| Indexer Dashboard -->|API calls| Manager ``` **数据流:** 1. **Sangfor NGAF** 和 **WAF** 通过 **syslog UDP**(端口 1514)将原始日志发送到 Wazuh Manager。 2. **shared hosting 容器** 运行 Apache + Wazuh Agent。Agent 从五个独立的域名(`domain1.ac.id` … `domain5.ac.id`)读取日志。 3. **多站点实验室容器** 模拟具有五个子域名(prosman, keamanan, jaringan, web, data)的 `labs.ac.id` 门户。Agent 读取一个统一的 access log(virtual host 通过 `vhost` 进行区分)。 4. Manager 使用 **decoder** 和 **rule**(包括针对 Sangfor/WAF 的自定义 decoder)分析日志,并生成告警。 5. 告警存储在 **Wazuh Indexer** (OpenSearch) 中。 6. **Wazuh Dashboard** 提供可视化展示和交互式搜索。 ## 📁 目录结构 ``` . ├── config/ │ ├── wazuh_indexer_ssl_certs/ # Sertifikat SSL (hasil generate) │ └── wazuh_manager/ │ ├── local_decoder.xml # Custom decoder Sangfor/WAF │ ├── local_rules.xml # Custom rule alerts │ └── ossec.conf # Konfigurasi Manager (syslog receiver) ├── docker-compose.yml # Orkestrasi semua service ├── Dockerfile.shared # Image shared hosting (5 domain) ├── Dockerfile.multi-site # Image multi‑site (labs.ac.id) ├── entrypoint.sh # Startup script (dipakai kedua container) ├── shared-hosting.conf # VirtualHost Apache untuk shared hosting ├── multi-site.conf # VirtualHost Apache untuk multi‑site ├── wazuh-agent-shared.conf # Konfigurasi agent untuk shared hosting ├── wazuh-agent-multisite.conf # Konfigurasi agent untuk multi‑site └── README.md ``` ## 🔧 环境要求 - **Docker Engine** ≥ 20.10 - **Docker Compose** ≥ v2(`docker compose` 插件) - 至少 **6 GB** RAM(推荐 8 GB) - 可用的端口: - `443` → Wazuh Dashboard - `1514/udp` → Syslog 接收器 - `7070` → Shared hosting(多域) - `7071` → 多站点实验室 ## 🚀 运行方式 ### 1. 克隆 repository ``` git clone https://github.com/yogiex/wazuh-soc-lab.git cd wazuh-soc-lab ``` ### 2. 生成 SSL 证书 Wazuh Indexer 需要证书以进行加密通信。 ``` cd /tmp git clone https://github.com/wazuh/wazuh-docker.git -b v4.9.0 cd wazuh-docker/single-node docker compose -f generate-indexer-certs.yml run --rm generator # Salin ke folder proyek cp -r config/wazuh_indexer_ssl_certs/* \ ~/Documents/code/sec/wazuh-belajar/config/wazuh_indexer_ssl_certs/ ``` ### 3. 构建并运行实验室 ``` cd ~/Documents/code/sec/wazuh-belajar # atau path repo docker compose up -d --build ``` 等待几分钟,直到所有容器的状态变为 **healthy**(使用 `docker compose ps` 查看)。 ### 4. 访问服务 - **Wazuh Dashboard**: [https://localhost](https://localhost) 用户名:`kibanaserver` / 密码:`kibanaserver` - **Shared Hosting**(5 个独立域名): 通过带有 `Host` 头的 `curl` 进行访问: curl -H "Host: domain1.ac.id" http://localhost:7070 curl -H "Host: domain2.ac.id" http://localhost:7070 # … 以此类推至 domain5.ac.id - **多站点实验室**(labs.ac.id 及其子域名): curl -H "Host: labs.ac.id" http://localhost:7071 curl -H "Host: prosman.labs.ac.id" http://localhost:7071 curl -H "Host: keamanan.labs.ac.id" http://localhost:7071 # … 以此类推至 data.labs.ac.id ## ⚙️ 配置与自定义 ### 添加自定义 Decoder & Rule 编辑 `config/wazuh_manager/` 中的文件: 1. **`local_decoder.xml`** – 定义解析原始日志的方式。 2. **`local_rules.xml``** – 根据解析出的字段定义告警 rule。 编辑完成后,重启 manager: ``` docker compose restart wazuh-manager ``` ### 从真实设备发送日志 将您设备的 syslog 指向 `:1514/udp`。 Sangfor NGAF 的配置示例: ``` Log server: Port: 1514 Protokol: UDP Format: syslog (RFC 3164/5424) ``` ### 在 Shared Hosting 中添加域名 1. 在 `Dockerfile.shared` 中添加目录(在 `for i in 1 2 …` 循环中添加或另起一行)。 2. 在 `shared-hosting.conf` 中添加 `` 块。 3. 在 `wazuh-agent-shared.conf` 中添加两个 `` 块(access 和 error)。 4. 重新构建: docker compose up -d --build shared-hosting ### 在多站点实验室中添加子域名 1. 在 `Dockerfile.multi-site` 中新建一个文件夹(例如 `/home/labs.ac.id/public_html/iot`)。 2. 在 `multi-site.conf` 中添加 ``。 3. 由于所有子域名都写入同一个日志文件,**无需更改 agent 配置**。 4. 重新构建: docker compose up -d --build multi-site ## 📨 发送测试日志 使用 `netcat` 从终端发送模拟的 syslog 日志: ``` # Sangfor NGAF 日志 echo '<134>2026-06-21T10:15:30Z SangforNGAF devid=NGAF-01 src=192.168.1.100 dst=10.0.0.5 action=blocked policy="Block High Risk" type=web-attack severity=high' | nc -u -w0 localhost 1514 # WAF 日志 echo '<131>2026-06-21T10:16:05Z WAF-01 src=172.16.0.10 dst=203.0.113.50 rule=SQLi method=GET uri=/login?id=1%27%20OR%20%271%27%3D%271 status=403' | nc -u -w0 localhost 1514 ``` 该日志将在几秒钟后显示在 Dashboard 中。 ## 📖 学习阅读日志 1. 打开 **Wazuh Dashboard** → **Discover**(index pattern 为 `wazuh-alerts-*`)。 2. 根据以下条件搜索事件: - **Agent**:`agent.name : "shared-hosting"` 或 `agent.name : "multi-site"` - **域名/子域名**:`data.vhost : "domain1.ac.id"` 或 `data.vhost : "prosman.labs.ac.id"` 3. 查看 `data.*` 中的字段解析结果(例如 `data.srcip`、`data.action`)。 4. 创建可视化图表:每个域名的攻击图表、热门攻击者 IP、每个子域名的流量等。 `local_decoder.xml` 中已提供现成的 Sangfor NGAF decoder 示例,可以直接使用。 ## 📄 许可证 本项目基于 [MIT License](LICENSE) 授权 —— 可自由使用、修改和分发。 **祝您学习愉快!** 如有任何问题,请提交 [Issues](https://github.com/yogiex/wazuh-soc-lab/issues) 或联系作者。 ``` ```
标签:CISA项目, Docker, Wazuh, 子域名变形, 安全, 安全防御评估, 版权保护, 请求拦截, 超时处理