abdillahisaidismail-arch/homelab-soc-n8n
GitHub: abdillahisaidismail-arch/homelab-soc-n8n
一个基于 Wazuh 和 n8n 的自动化安全运营中心(SOC)实验室方案,用于模拟企业级威胁检测、告警富化与自动化事件响应流程。
Stars: 0 | Forks: 0
# 🛡️ Homelab SOC — 自动化威胁检测与事件响应
[](https://python.org)
[](https://n8n.io)
[](https://wazuh.com)
[](https://attack.mitre.org)
[](LICENSE)
[](https://github.com)
## 🎯 目标
此 homelab 模拟了一个基于开源工具构建的生产级安全运营中心 (SOC) 环境。它使用 **Wazuh** 作为 SIEM 进行实时日志采集和威胁检测,并使用 **n8n** 作为 SOAR 平台,用于自动告警丰富、MITRE ATT&CK 映射和事件路由。其目标是展示与真实企业 SOC 工作流相一致的端到端检测与响应能力 —— 从原始日志到升级工单 —— 在一个可复现的本地虚拟实验室中。
## 🏗️ 架构
```
┌─────────────────────────────────────────────────────────────────────────┐
│ HOMELAB SOC PIPELINE │
│ │
│ ┌──────────┐ ┌───────────────────┐ ┌──────────────────────────┐ │
│ │ Sources │ │ Wazuh SIEM │ │ n8n SOAR Engine │ │
│ │ │ │ │ │ │ │
│ │ Linux VM ├───►│ ossec-agent │ │ ┌────────────────────┐ │ │
│ │ SSH logs │ │ Log ingestion │ │ │ alert-enrichment │ │ │
│ │ Syslog │ │ Decoder engine ├───►│ │ (AbuseIPDB/VT API) │ │ │
│ │ Auditd │ │ Custom rules │ │ └────────┬───────────┘ │ │
│ │ Scripts │ │ Alert generation │ │ │ │ │
│ └──────────┘ │ │ │ ┌────────▼───────────┐ │ │
│ │ Webhook ──────────┼───►│ │ incident-routing │ │ │
│ └───────────────────┘ │ │ P1/P2/P3 triage │ │ │
│ │ └────────┬───────────┘ │ │
│ │ │ │ │
│ │ ┌────────▼───────────┐ │ │
│ │ │ mitre-mapping │ │ │
│ │ │ ATT&CK enrichment │ │ │
│ │ └────────────────────┘ │ │
│ └──────────┬───────────────┘ │
│ │ │
│ ┌─────────────────────────────────────────┤ │
│ │ Outputs │ │
│ ▼ ▼ ▼ ▼ │
│ Slack #soc Slack #soc GLPI Log file │
│ -critical -alerts Ticket (P3) │
│ + Email RSSI (P2) (P3) │
│ (P1) │
└─────────────────────────────────────────────────────────────────────────┘
```
**数据流:**
1. 安全事件由代理或测试脚本生成
2. Wazuh 采集、解码日志,并根据自定义检测规则对其进行评估
3. 规则匹配触发通过 Wazuh active-response 或集成模块发往 n8n 的 webhook
4. n8n 丰富告警 (GeoIP, AbuseIPDB 评分, MITRE 映射)
5. 根据严重性路由告警:critical 渠道 → SOC 邮箱 → 工单系统 → 日志
## ⚙️ n8n 工作流
### 1. `alert-enrichment.json`
**触发器:** Wazuh webhook (HTTP POST)
**逻辑:**
- 解析传入的 JSON: `rule.id`, `rule.level`, `data.srcip`, `full_log`
- 查询 **AbuseIPDB** REST API 以获取 IP 信誉评分和国家
- 如果 AbuseIPDB 未返回数据,则回退到 **VirusTotal**
- 从 `mitre-mapping.json` 字典中注入 MITRE ATT&CK 技术
- 生成一个标准化的告警对象,传递给路由工作流
### 2. `incident-routing.json`
**触发器:** 来自工作流 #1 的已丰富告警
**逻辑:**
- **P1** (level ≥ 12): 发送消息至 Slack `#soc-critical` + 向 RSSI 值班人员发送邮件 —— 包含 IP、规则、MITRE ID、AbuseIPDB 评分
- **P2** (level 8–11): 发送摘要卡片至 Slack `#soc-alerts`
- **P3** (level < 8): 通过 REST API 创建 GLPI 工单或追加到本地日志文件
- 一个 **Wait 节点** (30 分钟) 将未被确认的 P1 升级为 P0 并重新通知
### 3. `mitre-mapping.json`
**类型:** 静态丰富字典
**结构:** 映射 Wazuh `rule.id` → MITRE 技术 ID + 战术 + 严重性评分 + 推荐响应动作
**使用者:** `alert-enrichment.json` 用于内联 MITRE 标记
## 🔍 Wazuh 检测规则
| # | 场景 | Wazuh Rule ID | 级别 | MITRE |
|---|----------|--------------|-------|-------|
| 1 | SSH 暴力破解 (>5 次失败 / 60秒) | 100100 | 10 | T1110 |
| 2 | 多次失败后成功登录 | 100101 | 12 | T1078 |
| 3 | 在维护窗口之外创建管理员账户 | 100102 | 11 | T1136 |
| 4 | 访问 `/etc/shadow` 或 `/etc/passwd` | 100103 | 12 | T1003 |
| 5 | 可疑命令执行 (wget/curl → 外部 IP) | 100104 | 10 | T1059 |
| 6 | 异常 sudo 权限提升 | 100105 | 11 | T1548 |
| 7 | 来自白名单以外国家的登录 (GeoIP) | 100106 | 9 | T1133 |
| 8 | 异常出站数据量 (潜在数据渗出) | 100107 | 13 | T1048 |
## 🗺️ MITRE ATT&CK 覆盖
| 技术 ID | 名称 | 战术 | 检测 |
|---|---|---|---|
| T1110 | Brute Force | Credential Access | SSH 失败阈值规则 |
| T1078 | Valid Accounts | Defense Evasion | 失败后登录规则 |
| T1136 | Create Account | Persistence | 管理员创建规则 |
| T1003 | OS Credential Dumping | Credential Access | `/etc/shadow` 访问规则 |
| T1059 | Command & Scripting Interpreter | Execution | wget/curl 外部规则 |
| T1548 | Abuse Elevation Control Mechanism | Privilege Escalation | sudo 异常规则 |
| T1133 | External Remote Services | Initial Access | GeoIP 异常规则 |
| T1048 | Exfiltration Over Alternative Protocol | Exfiltration | 流量阈值规则 |
包含工作流映射的完整覆盖表:[`docs/mitre-coverage.md`](docs/mitre-coverage.md)
## 🚀 复现实验室
### 前置条件
- 安装了 Debian 12 VM 的 VirtualBox / VMware (2 vCPU, 4 GB RAM 最低配置)
- Docker 或直接安装 n8n
- Python 3.11+
### 步骤 1 — 部署 Wazuh
```
# Wazuh single-node (Docker)
curl -sO https://packages.wazuh.com/4.7/wazuh-install.sh
sudo bash wazuh-install.sh -a
```
### 步骤 2 — 导入自定义规则
```
sudo cp wazuh/custom-rules.xml /var/ossec/etc/rules/local_rules.xml
sudo systemctl restart wazuh-manager
```
### 步骤 3 — 部署 n8n
```
docker run -d --name n8n \
-p 5678:5678 \
-e N8N_BASIC_AUTH_ACTIVE=true \
-v ~/.n8n:/home/node/.n8n \
n8nio/n8n
```
### 步骤 4 — 导入工作流
打开 `http://localhost:5678` → Settings → Import from file → 从 `n8n/workflows/` 中选择每个 JSON 文件
### 步骤 5 — 配置 Wazuh webhook 集成
在 `/var/ossec/etc/ossec.conf` 中添加:
```
custom-n8n
http://localhost:5678/webhook/wazuh-alert
7
json
```
### 步骤 6 — 模拟攻击
```
python3 scripts/log-generator.py --scenario brute_force --count 20
python3 scripts/threat-simulator.py # isolated lab only — read the warning
```
## 👤 作者
**Master 1 RSSI — CyberSchool / ISTIC Rennes** (Alternance — September 2026)
认证: Fortinet NSE 1/2/3 · BTL1 (进行中) · ANSSI SecNumAcadémie
[LinkedIn](https://www.linkedin.com/in/) · [GitHub](https://github.com/)
*本项目是一个用于学习目的的个人 homelab。所有模拟均在隔离环境中进行。*
标签:Cloudflare, DevSecOps, Homelab, MITRE ATT&CK, n8n, Python, SOAR, Wazuh, 上游代理, 安全实验室, 安全运营中心, 无后门, 网络安全, 网络映射, 自动化威胁检测, 请求拦截, 逆向工具, 速率限制, 隐私保护