Ricardopirlo/SURICATA-IDS-Rule-Tuning
GitHub: Ricardopirlo/SURICATA-IDS-Rule-Tuning
基于 Docker 容器化的 Suricata 入侵检测实验室,通过自定义规则开发与告警调优技术消除误报和告警疲劳,实现高保真的安全事件检测。
Stars: 0 | Forks: 0
# 🛡️ Suricata IDS:规则调优与降噪实验室
[](https://suricata.io/)
[](https://www.docker.com/)
[](https://opensource.org/licenses/MIT)
[]()
一个实用的网络入侵检测系统 (NIDS) 实验室,专注于设计自定义的 Suricata 检测规则,分析原始遥测数据,并应用**告警调优**技术来消除误报和告警疲劳,同时不妥协安全覆盖范围。
## 📌 执行摘要
入侵检测系统中大量的噪声和未优化的特征会导致**告警疲劳**,从而掩盖了安全运营中心 (SOC) 内部的严重安全事件。
本项目模拟了一个受控的容器化环境,在其中针对自定义特征发起了网络攻击向量(ICMP 探测、TCP SYN 扫描和 Web 应用 SQL 注入)。通过迭代优化(利用速率限制阈值、双向流量过滤和特定的 ICMP 类型),日志量成功地从冗余的多数据包流减少为**精确、高保真的告警**。
## 🏗️ 架构与组件概述
该实验室在运行于原生 Windows 主机上的轻量级 Docker 隔离环境中运行:
```
graph TD
A[Automated Test Suite
test_rules.py] --> B1[Alpine ICMP] A --> B2[Nmap SYN Scan] A --> B3[Wget SQLi] B1 -->|Traffic Generation| C[Suricata NIDS Engine
rules/local.rules] B2 -->|Traffic Generation| C B3 -->|Traffic Generation| C C -->|Ingestion & Filtering| D[logs/fast.log
Normalized Stream] ``` ### 技术栈组件: * **检测引擎:** 作为原生 Docker 容器运行的 Suricata NIDS。 * **编排:** 使用 `docker-compose` 映射规则和日志的卷挂载。 * **测试自动化:** 自定义 Python 脚本 (`test_rules.py`) 执行受控的 `docker run` 触发器以测试网络接口。 * **日志检查:** 使用 PowerShell 实时日志监控 (`Get-Content -Wait`)。 ## 📝 特征工程 (`rules/local.rules`) 定制的特征集涵盖了三个不同的检测层,并经过优化以消除冗余信息: ``` # 1. ICMP 网络发现检测 # 仅捕获出站 ICMP Echo Requests (Type 8),过滤掉返回的回复。 alert icmp any any -> any any (msg:"[IDS ALERT] ICMP Network Discovery Detected"; itype:8; threshold: type limit, track by_src, count 1, seconds 30; classtype:not-suspicious; sid:1000001; rev:4;) # 2. Nmap SYN 端口扫描检测 # 由快速的 SYN flag 序列触发,忽略来自本地主机接口的单包 TCP 握手。 alert tcp any any -> any any (msg:"[IDS ALERT] Nmap SYN Port Scan Detected"; flags:S; threshold: type limit, track by_src, count 1, seconds 10; classtype:attempted-recon; sid:1000002; rev:5;) # 3. SQL Injection 攻击检测 # 检测 HTTP TCP 流上的 'UNION' payload,限制为每个会话突发 1 个告警。 alert tcp any any -> any any (msg:"[IDS ALERT] SQL Injection Attempt Detected"; content:"UNION"; nocase; threshold: type limit, track by_src, count 1, seconds 10; classtype:web-application-attack; sid:1000003; rev:10;) ``` ## ⚡ 告警调优与降噪方法论 在初始执行期间,由于多数据包 HTTP TCP 负载、ICMP 双向回复以及后台接口活动,原始检测规则生成了冗余的日志条目。 | 特征 ID | 目标事件 | 初始问题 | 应用的调优策略 | 结果 | |---|---|---|---|---| | SID: 1000001 | ICMP Ping | 每次 ping 触发两次(请求 + 回复)。 | 添加 `itype:8` 以隔离出站请求。 | 每次 ping 序列生成单个告警。 | | SID: 1000002 | Nmap SYN Scan | 被正常的出站连接触发。 | 集成 `threshold: type limit, rate control`。 | 抑制接口噪声。 | | SID: 1000003 | SQL Injection | 每次 wget 请求生成 6 个以上的重复日志。 | 应用 `track by_src, count 1, seconds 10`。 | 减少为 1 个高优先级告警。 | ## 🧪 验证与证据 ### 1. 自动化执行套件 该实验室使用 `test_rules.py` 按顺序触发所有 3 个攻击向量: ``` python test_rules.py ``` ### 2. 高保真告警遥测 检查 `logs/fast.log` 展示了清晰的 1:1 事件映射,没有重复的噪声: ``` 08/02/2026-16:47:52.168565 [**] [1:1000001:3] [IDS ALERT] ICMP Network Discovery Detected [**] [Classification: Not Suspicious Traffic] [Priority: 3] {ICMP} 192.168.65.3:8 -> 1.1.1.1:0 08/02/2026-16:47:56.499920 [**] [1:1000002:4] [IDS ALERT] Nmap SYN Port Scan Detected [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.65.3:63121 -> 1.1.1.1:443 08/02/2026-16:48:02.157684 [**] [1:1000002:4] [IDS ALERT] Nmap SYN Port Scan Detected [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} fdc4:f303:9324:0000:0000:0000:0000:0003:33732 -> 2606:4700:0010:0000:0000:0000:ac42:93f3:80 08/02/2026-16:48:02.208822 [**] [1:1000003:2] [IDS ALERT] SQL Injection Attempt Detected [**] [Classification: Web Application Attack] [Priority: 1] {TCP} fdc4:f303:9324:0000:0000:0000:0000:0003:33732 -> 2606:4700:0010:0000:0000:0000:ac42:93f3:80 ``` IDS 成功检测到了基于 IPv4 和 IPv6 流量的 SYN 扫描行为,展现了双栈监控能力。 ## 🗂️ 仓库结构 ``` suricata-ids-rule-tuning/ ├── docker-compose.yml # Suricata container orchestration ├── rules/ │ └── local.rules # Custom tuned Suricata signatures ├── logs/ │ └── fast.log # NIDS alert log output ├── test_rules.py # Automated attack simulation script └── README.md # Project documentation ``` ## 🧠 关键技术要点 - **SOC 效率:** 减轻了日志膨胀,证明了适当的阈值设定如何直接改善 SIEM 摄取成本和分析师的响应速度。 - **特征设计:** 掌握了 Snort/Suricata 语法选项(`itype`、`flags`、`nocase`、`classtype`、`threshold`)。 - **容器安全:** 管理 Docker 网络隔离和主机卷绑定以进行实时遥测分析。 ## 许可证与免责声明 ### 许可证 本项目基于 MIT 许可证授权 - 详情请参阅 [LICENSE](LICENSE) 文件。您可以自由地将这些材料用于教育和国防安全目的,包括使用、修改和分发。 ### 法律与教育免责声明
test_rules.py] --> B1[Alpine ICMP] A --> B2[Nmap SYN Scan] A --> B3[Wget SQLi] B1 -->|Traffic Generation| C[Suricata NIDS Engine
rules/local.rules] B2 -->|Traffic Generation| C B3 -->|Traffic Generation| C C -->|Ingestion & Filtering| D[logs/fast.log
Normalized Stream] ``` ### 技术栈组件: * **检测引擎:** 作为原生 Docker 容器运行的 Suricata NIDS。 * **编排:** 使用 `docker-compose` 映射规则和日志的卷挂载。 * **测试自动化:** 自定义 Python 脚本 (`test_rules.py`) 执行受控的 `docker run` 触发器以测试网络接口。 * **日志检查:** 使用 PowerShell 实时日志监控 (`Get-Content -Wait`)。 ## 📝 特征工程 (`rules/local.rules`) 定制的特征集涵盖了三个不同的检测层,并经过优化以消除冗余信息: ``` # 1. ICMP 网络发现检测 # 仅捕获出站 ICMP Echo Requests (Type 8),过滤掉返回的回复。 alert icmp any any -> any any (msg:"[IDS ALERT] ICMP Network Discovery Detected"; itype:8; threshold: type limit, track by_src, count 1, seconds 30; classtype:not-suspicious; sid:1000001; rev:4;) # 2. Nmap SYN 端口扫描检测 # 由快速的 SYN flag 序列触发,忽略来自本地主机接口的单包 TCP 握手。 alert tcp any any -> any any (msg:"[IDS ALERT] Nmap SYN Port Scan Detected"; flags:S; threshold: type limit, track by_src, count 1, seconds 10; classtype:attempted-recon; sid:1000002; rev:5;) # 3. SQL Injection 攻击检测 # 检测 HTTP TCP 流上的 'UNION' payload,限制为每个会话突发 1 个告警。 alert tcp any any -> any any (msg:"[IDS ALERT] SQL Injection Attempt Detected"; content:"UNION"; nocase; threshold: type limit, track by_src, count 1, seconds 10; classtype:web-application-attack; sid:1000003; rev:10;) ``` ## ⚡ 告警调优与降噪方法论 在初始执行期间,由于多数据包 HTTP TCP 负载、ICMP 双向回复以及后台接口活动,原始检测规则生成了冗余的日志条目。 | 特征 ID | 目标事件 | 初始问题 | 应用的调优策略 | 结果 | |---|---|---|---|---| | SID: 1000001 | ICMP Ping | 每次 ping 触发两次(请求 + 回复)。 | 添加 `itype:8` 以隔离出站请求。 | 每次 ping 序列生成单个告警。 | | SID: 1000002 | Nmap SYN Scan | 被正常的出站连接触发。 | 集成 `threshold: type limit, rate control`。 | 抑制接口噪声。 | | SID: 1000003 | SQL Injection | 每次 wget 请求生成 6 个以上的重复日志。 | 应用 `track by_src, count 1, seconds 10`。 | 减少为 1 个高优先级告警。 | ## 🧪 验证与证据 ### 1. 自动化执行套件 该实验室使用 `test_rules.py` 按顺序触发所有 3 个攻击向量: ``` python test_rules.py ``` ### 2. 高保真告警遥测 检查 `logs/fast.log` 展示了清晰的 1:1 事件映射,没有重复的噪声: ``` 08/02/2026-16:47:52.168565 [**] [1:1000001:3] [IDS ALERT] ICMP Network Discovery Detected [**] [Classification: Not Suspicious Traffic] [Priority: 3] {ICMP} 192.168.65.3:8 -> 1.1.1.1:0 08/02/2026-16:47:56.499920 [**] [1:1000002:4] [IDS ALERT] Nmap SYN Port Scan Detected [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.65.3:63121 -> 1.1.1.1:443 08/02/2026-16:48:02.157684 [**] [1:1000002:4] [IDS ALERT] Nmap SYN Port Scan Detected [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} fdc4:f303:9324:0000:0000:0000:0000:0003:33732 -> 2606:4700:0010:0000:0000:0000:ac42:93f3:80 08/02/2026-16:48:02.208822 [**] [1:1000003:2] [IDS ALERT] SQL Injection Attempt Detected [**] [Classification: Web Application Attack] [Priority: 1] {TCP} fdc4:f303:9324:0000:0000:0000:0000:0003:33732 -> 2606:4700:0010:0000:0000:0000:ac42:93f3:80 ``` IDS 成功检测到了基于 IPv4 和 IPv6 流量的 SYN 扫描行为,展现了双栈监控能力。 ## 🗂️ 仓库结构 ``` suricata-ids-rule-tuning/ ├── docker-compose.yml # Suricata container orchestration ├── rules/ │ └── local.rules # Custom tuned Suricata signatures ├── logs/ │ └── fast.log # NIDS alert log output ├── test_rules.py # Automated attack simulation script └── README.md # Project documentation ``` ## 🧠 关键技术要点 - **SOC 效率:** 减轻了日志膨胀,证明了适当的阈值设定如何直接改善 SIEM 摄取成本和分析师的响应速度。 - **特征设计:** 掌握了 Snort/Suricata 语法选项(`itype`、`flags`、`nocase`、`classtype`、`threshold`)。 - **容器安全:** 管理 Docker 网络隔离和主机卷绑定以进行实时遥测分析。 ## 许可证与免责声明 ### 许可证 本项目基于 MIT 许可证授权 - 详情请参阅 [LICENSE](LICENSE) 文件。您可以自由地将这些材料用于教育和国防安全目的,包括使用、修改和分发。 ### 法律与教育免责声明
标签:AI合规, CISA项目, Docker, DOE合作, Metaprompt, Suricata, 安全运营, 安全防御评估, 扫描框架, 插件系统, 现代安全运营, 网络安全, 请求拦截, 逆向工具, 隐私保护