muhammadomar-cs/suricata-wazuh-n8n-threat-detection
GitHub: muhammadomar-cs/suricata-wazuh-n8n-threat-detection
集成Suricata、Wazuh和n8n的自动化威胁检测与响应实验室,实现对网络泛洪攻击的实时检测、告警汇聚和自动IP封禁。
Stars: 0 | Forks: 0
# 🛡️ Suricata + Wazuh + n8n 自动化威胁检测实验室
一个实战型 SOC 自动化实验室,它使用自定义的 Suricata IDS 规则检测网络泛洪攻击,将警报摄取到 Wazuh SIEM 中,并通过 n8n 响应工作流自动拦截攻击者。
**核心功能**
- 自定义 Suricata 检测规则 (ICMP Flood, UDP Flood, SlowLoris)
- 通过结构化 JSON 日志摄取集成 Wazuh SIEM
- 基于 SSH 的自动化主动拦截(iptables 阻断)
- 包含完整攻击上下文的 Gmail 警报通知
- 30 秒冷却去重机制,以抑制警报噪音
## 处理流程
```
Attacker (Kali 150.1.7.101)
│ flood traffic
▼
Suricata IDS (Rocky Linux 150.1.7.150)
│ custom rules fire → eve.json
▼
Wazuh Agent → Wazuh Manager (150.1.7.99)
│ alert raised (rule 86601)
▼
n8n Workflow — polls every 15s
│
├─► SSH → iptables block on victim (150.1.7.104)
└─► Gmail notification
```
## 截图
### 攻击模拟 — 来自 Kali 的 SlowLoris

### Wazuh 仪表板 — 已确认的警报

### n8n 工作流执行 (端到端 4.8 秒)

### 自动化 Gmail 警报

### 在受害主机上通过 iptables 阻断攻击者 IP

### Suricata 自定义规则

## 检测规则 (`rules/local.rules`)
从头开始编写的三个自定义 Suricata 规则。所有规则均使用 `threshold` 来限制触发频率,并使用 `track by_src` 来隔离每个攻击者的状态。
```
# ICMP Flood — 单一来源在 5 秒内发送 50 个 echo 请求
alert icmp any any -> $HOME_NET any (msg:"ICMP FLOOD Attack Detected"; \
itype:8; \
threshold:type threshold, track by_src, count 50, seconds 5; \
sid:1000020; rev:1;)
# UDP Flood — 单一来源在 5 秒内发送 1000 个数据包
alert udp any any -> $HOME_NET any (msg:"UDP FLOOD Attack Detected"; \
threshold:type threshold, track by_src, count 1000, seconds 5; \
sid:1000030; rev:1;)
# SlowLoris — 单一来源在 10 秒内发送 20 个 SYN 数据包至端口 80
alert tcp any any -> $HOME_NET 80 (msg:"SLOWLORIS High Connection Rate to HTTP Port"; \
flow:to_server; \
flags:S; \
threshold:type threshold, track by_src, count 20, seconds 10; \
sid:1000011; rev:2;)
```
## n8n 工作流
| 节点 | 动作 |
|---|---|
| 每 15 秒轮询一次 | 触发器 |
| 获取签名警报 | POST 请求到 Wazuh API (150.1.7.99:9200) |
| 提取、过滤与冷却 | 解析攻击者 IP,将重复警报抑制 30 秒 |
| SSH – 主动拦截 | 在受害主机上执行 `iptables -I INPUT -s -j DROP` |
| 发送 Gmail 通知 | 包含攻击者 IP、受害主机 IP、警报产生时间、已执行动作的邮件 |
## 实验环境
| 主机 | IP | 角色 |
|---|---|---|
| Kali Linux 2026.1 | 150.1.7.101 | 攻击者 |
| Metasploitable 2 | 150.1.7.104 | 受害者 / 目标 |
| Rocky Linux 9.7 | 150.1.7.150 | Suricata + Wazuh Agent + n8n |
| Wazuh OVA | 150.1.7.99 | Wazuh Manager + Dashboard |
Suricata 在接口 `ens192` 上以 IDS 模式运行,监控 `150.1.7.0/24` 上的所有流量。警报被写入 `/var/log/suricata/eve.json` 并由本地的 Wazuh agent 提取。
## 结果
| 攻击类型 | SID | 检测时间 | 拦截时间 |
|---|---|---|---|
| SlowLoris | 1000011 | < 10s | ~4.8s (n8n 执行) |
| ICMP Flood | 1000020 | < 5s | ~6.2s |
| UDP Flood | 1000030 | < 5s | ~4.8s |
从攻击检测到 IP 阻断的总时间:**15–30 秒**。
## 经验教训
- **阈值调优至关重要。** 具有低计数阈值的早期规则版本在泛洪测试期间产生了大量警报,这凸显了在 n8n 中设置 30 秒冷却机制的必要性。
- **基于 SSH 的拦截存在实际局限性。** 它在受控实验室环境中运行良好,但在真实环境中会引入延迟、信任假设和脆弱性。由 Webhook 触发或 agent 端执行的主动响应将更为稳健。
- **基于轮询的自动化是一个瓶颈。** n8n 每 15 秒轮询一次对于 PoC(概念验证)来说没问题,但不适合对时间敏感的响应。使用 Wazuh webhook 的事件驱动架构将显著缩短从检测到响应的时间。
- **警报去重是必不可少的。** 如果没有冷却过滤器,在持续的泛洪攻击期间,n8n 会触发数百次 SSH 命令和电子邮件——每个警报一次。
## 文件
```
├── README.md
├── rules/
│ └── local.rules # Custom Suricata detection rules
├── config/
│ ├── suricata.yaml # Suricata config (HOME_NET, interface, eve.json output)
│ └── ossec-conf.txt # Wazuh ossec.conf localfile block for Suricata
└── screenshots/
├── 01_slowloris_attack_kali.png
├── 02_metasploitable_iptables.png
├── 03_wazuh_alerts_dashboard.png
├── 04_n8n_workflow_execution.png
├── 05_gmail_active_response.png
└── 06_suricata_local_rules.png
```
## 作者
**Muhammad Omar** — BSCS 最后一年, GCUF
🔗 [github.com/muhammadomar-cs](https://github.com/muhammadomar-cs)
标签:AMSI绕过, DDoS防护, Google搜索, Homebrew安装, ICMP泛洪, iptables, IP 地址批量处理, IP封禁, Metaprompt, n8n, OISF, Rocky Linux, SlowLoris, SOC自动化, Suricata, UDP泛洪, Wazuh, 入侵检测系统, 内存分配, 威胁检测, 安全实验, 安全数据湖, 安全运营, 扫描框架, 日志管理, 流量监控, 现代安全运营, 网络安全, 自动响应, 蜜罐, 证书利用, 隐私保护