Javier-NarvaezZ/suricata-ids-lab
GitHub: Javier-NarvaezZ/suricata-ids-lab
一个基于 Suricata 的网络入侵检测实验环境,提供自定义检测规则和自动化攻击模拟以验证安全威胁检测能力。
Stars: 0 | Forks: 0
# 🛡️ Suricata IDS 实验环境 - 网络入侵检测系统
[](LICENSE)
[]()
[](https://suricata.io/)
[]()
## 目录
- [概述](#overview)
- [功能](#features)
- [架构](#architecture)
- [前置条件](#prerequisites)
- [快速开始](#quick-start)
- [自定义检测规则](#custom-detection-rules)
- [测试与验证](#testing--validation)
- [项目结构](#project-structure)
- [文档](#documentation)
- [结果](#results)
- [路线图](#roadmap)
- [贡献](#contributing)
- [许可证](#license)
- [作者](#author)
## 概述
本项目演示了一个功能齐全的网络入侵检测系统 (IDS),该系统使用部署在虚拟化实验室环境中的 **Suricata 8.0.3**。该实验环境包含自定义检测规则、自动化攻击模拟以及用于安全事件分析的综合日志记录。
**主要目标:**
- 设计并实现用于安全测试的分段网络架构
- 配置 Suricata IDS 以进行实时威胁检测
- 为常见攻击向量的开发自定义检测规则
- 通过受控的渗透测试验证规则有效性
- 使用结构化的 JSON 日志分析安全事件
## 功能
### 检测能力
- **50,154 条活动检测规则**(Emerging Threats + 自定义规则)
- 实时流量监控和告警
- 支持多种协议:TCP、UDP、ICMP、HTTP、DNS、TLS
- MITRE ATT&CK 框架关联
### 已实现的自定义规则
- **Nmap TCP SYN 扫描检测** - 识别端口扫描活动
- **ICMP 泛洪攻击检测** - 检测基于 ping 泛洪的 DoS 尝试
- **SSH 暴力破解检测** - 针对多次身份验证失败发出告警
- **Nmap Ping 扫描检测** - 识别网络侦察活动
### 日志与分析
- 快速告警日志(`fast.log`)
- 结构化 JSON 事件日志(`eve.json`)
- 性能统计跟踪
- 兼容 SIEM 集成(支持 ELK Stack)
### 基础设施
- 用于安全测试的隔离虚拟网络
- 双接口配置(管理 + 监控)
- 自动化部署脚本
- 可重现的环境设置
## 架构
### 网络拓扑
```
┌─────────────────────────────────────────────────┐
│ Physical Network (Bridge Mode) │
│ Internet Access + SSH │
└────────────┬────────────────────┬────────────────┘
│ │
┌────────▼────────┐ ┌────────▼────────┐
│ Ubuntu Server │ │ Kali Linux │
│ (Suricata IDS) │ │ (Attacker) │
│ Adapter 1 │ │ Adapter 2 │
└────────┬────────┘ └────────┬────────┘
│ │
│ Internal Network │
│ (labnet) │
│ 192.168.100.0/24 │
│ │
┌────────▼────────┐ ┌────────▼────────┐
│ 192.168.100.10 │ │ 192.168.100.20 │
│ enp0s8 (IDS) │ │ eth0 (Attack) │
└─────────────────┘ └─────────────────┘
```
### 组件
| 组件 | 操作系统 | vCPU | RAM | 角色 |
|-----------|----|----|-----|------|
| **Suricata-IDS** | Ubuntu Server 22.04 LTS | 1 | 2GB | IDS/IPS 引擎 + 监控 |
| **Kali-Linux** | Kali Linux 2024.x | 2 | 2GB | 渗透测试 + 攻击模拟 |
**网络分段:**
- **桥接网络:** 用于管理和互联网访问
- **内部网络:** 用于攻击模拟和监控的隔离环境
## 前置条件
### 软件要求
- **VirtualBox** 6.1+ 或 VMware Workstation
- **Ubuntu Server 22.04 LTS** ISO
- **Kali Linux**(VirtualBox 镜像或 ISO)
- 宿主机至少需要 **8GB RAM** 和 **40GB 磁盘空间**
### 知识要求
- 基本的 Linux 命令行操作
- 了解 TCP/IP 网络
- 熟悉安全概念(IDS、防火墙、端口扫描)
## 快速开始
### 1. 克隆仓库
```
git clone https://github.com/YOUR-USERNAME/suricata-ids-lab.git
cd suricata-ids-lab
```
### 2. 设置虚拟机
请遵循 [`docs/02-setup-guide.md`](docs/02-setup-guide.md) 中的详细设置指南
**快速摘要:**
1. 创建具有 2 个网络适配器(桥接 + 内部)的 Ubuntu Server 虚拟机
2. 安装 Ubuntu Server 并在内部网络上配置静态 IP `192.168.100.10`
3. 导入 Kali Linux 虚拟机并配置内部网络适配器
### 3. 安装 Suricata
在 Ubuntu 虚拟机上:
```
# 添加官方 Suricata repository
sudo add-apt-repository ppa:oisf/suricata-stable -y
sudo apt update
# 安装 Suricata
sudo apt install suricata -y
# 安装 rule 管理工具
sudo apt install suricata-update -y
# 下载 Emerging Threats rules
sudo suricata-update
```
### 4. 部署自定义规则
```
# 复制自定义 rules 到 Suricata
sudo cp configs/local.rules /var/lib/suricata/rules/
# 更新 Suricata 配置
sudo cp configs/suricata.yaml /etc/suricata/
# 重启 Suricata 服务
sudo systemctl restart suricata
sudo systemctl status suricata
```
### 5. 验证安装
```
# 检查已加载的 rules
sudo grep "rules successfully loaded" /var/log/suricata/suricata.log | tail -n 1
# 实时监控 alerts
sudo tail -f /var/log/suricata/fast.log
```
## 自定义检测规则
### 规则开发方法
所有自定义规则均遵循以下原则:
- **基于阈值的检测**,以最大程度地减少误报
- **清晰的签名 ID (SID)**,从 1000001 开始
- **MITRE ATT&CK 映射**,用于威胁分类
- 在受控环境中**经过测试和验证**
### 示例:SSH 暴力破解检测
```
alert tcp any any -> $HOME_NET 22 (
msg:"SSH Brute Force Attempt Detected";
flags:S,12;
threshold: type threshold, track by_src, count 5, seconds 60;
classtype:attempted-admin;
sid:1000003;
rev:1;
)
```
**逻辑:** 当在 60 秒内检测到来自同一源 IP 的 5 个或以上针对端口 22 的 TCP SYN 数据包时触发。
**完整的规则文档:** [`docs/03-rules-explained.md`](docs/03-rules-explained.md)
## 测试与验证
### 攻击场景
| 测试 | 工具 | 命令 | 检出率 |
|------|------|---------|----------------|
| Ping 扫描 | Nmap | `nmap -sn 192.168.100.10` | 100% |
| ICMP 泛洪 | hping3 | `hping3 -1 --flood 192.168.100.10` | 100% |
| 端口扫描 | Nmap | `nmap -sS 192.168.100.10` | 100% |
| SSH 暴力破解 | Hydra | `hydra -l user -P wordlist.txt ssh://192.168.100.10` | 100% |
### 运行测试
从 Kali Linux 虚拟机中:
```
# 运行自动化攻击模拟
./scripts/run-attacks.sh
# 预期输出:所有测试触发相应的 Suricata alerts
```
**详细的测试方法:** [`docs/04-attack-scenarios.md`](docs/04-attack-scenarios.md)
## 项目结构
```
suricata-ids-lab/
├── README.md # This file
├── LICENSE # MIT License
├── .gitignore # Git ignore file
│
├── docs/ # Documentation
│ ├── 01-architecture.md # Network design and topology
│ ├── 02-setup-guide.md # Step-by-step installation guide
│ ├── 03-rules-explained.md # Custom rule analysis
│ ├── 04-attack-scenarios.md # Testing methodology
│ ├── 05-results.md # Performance metrics and findings
│ └── images/ # Architecture diagrams
│ └── architecture-diagram.png
│
├── configs/ # Configuration files
│ ├── suricata.yaml # Suricata main configuration (sanitized)
│ ├── local.rules # Custom detection rules
│ └── netplan-config.yaml # Ubuntu network configuration
│
├── scripts/ # Automation scripts
│ ├── deploy-lab.sh # Automated VM setup
│ ├── run-attacks.sh # Attack simulation script
│ └── analyze-logs.py # Log parser and analyzer
│
└── evidence/ # Evidence and results
├── screenshots/ # Key project screenshots
│ ├── 01-topology-virtualbox.png
│ ├── 02-ubuntu-config.png
│ ├── 03-kali-config.png
│ ├── 04-network-test.png
│ ├── 05-suricata-running.png
│ ├── 06-rules-loaded.png
│ ├── 07-local-rules.png
│ ├── 08-yaml-config.png
│ ├── 09-nmap-ping-sweep.png
│ ├── 10-icmp-flood.png
│ ├── 11-nmap-syn-scan.png
│ ├── 12-ssh-brute-force.png
│ ├── 13-alert-summary.png
│ ├── 14-fast-log.png
│ ├── 15-json-alerts.png
│ └── 16-stats-log.png
└── logs/ # Sample logs (sanitized)
├── fast.log.sample
└── eve.json.sample
```
## 文档
[`docs/`](docs/) 目录中提供了详尽的文档:
- **[架构概述](docs/01-architecture.md)** - 网络设计、VM 规范和拓扑
- **[设置指南](docs/02-setup-guide.md)** - 完整的安装步骤及故障排除
- **[规则解析](docs/03-rules-explained.md)** - 对自定义检测规则的深入分析
- **[攻击场景](docs/04-attack-scenarios.md)** - 渗透测试方法及结果
- **[结果与分析](docs/05-results.md)** - 性能指标、检出率和经验教训
## 结果
### 检测性能
- **总活动规则数:** 50,154(50,150 条 Emerging Threats + 4 条自定义)
- **检出率:** 100%(检测到 4/4 个攻击场景)
- **误报率:** 0%(在受控测试期间)
- **平均告警延迟:** < 1 秒
### 告警输出示例
```
05/17/2026-17:37:31.321637 [**] [1:1000004:1] NMAP Ping Sweep Detected [**]
[Classification: Attempted Information Leak] [Priority: 2]
{ICMP} 192.168.100.20:8 -> 192.168.100.10:0
```
**完整分析:** [`docs/05-results.md`](docs/05-results.md)
## 路线图
### 第 2 阶段增强功能
- [ ] **IPS 模式:** 实现内联拦截恶意流量
- [ ] **ELK Stack 集成:** 使用 Kibana 仪表板可视化告警
- [ ] **告警通知:** 为关键事件配置电子邮件/Slack 通知
- [ ] **机器学习:** 使用 Suricata + Python ML 模型进行异常检测
### 第 3 阶段高级功能
- [ ] **蜜罐集成:** 部署 Cowrie SSH 蜜罐以获取威胁情报
- [ ] **威胁情报源:** 与 AlienVault OTX、AbuseIPDB 集成
- [ ] **多分段网络:** 扩展到 DMZ + 内部 + 访客网络
- [ ] **自动化响应:** 使用 Python 脚本自动更新防火墙规则
## 许可证
本项目基于 MIT 许可证授权 - 有关详细信息,请参阅 [LICENSE](LICENSE) 文件。
## 作者
**Javier Andrés Narváez Hoyos**
- 🎓 西蒙·玻利瓦尔大学系统工程学生
- 🔐 网络安全爱好者 | 培训中的 SOC 分析师
- 📍 哥伦比亚巴兰基亚
- 📧 电子邮件:javiernarvaez499@gmail.com
- 💼 LinkedIn:[linkedin.com/in/javier-narvaez](https://www.linkedin.com/in/javier-narvaez499/)
- 🐙 GitHub:[github.com/Javier-NarvaezZ](https://github.com/Javier-NarvaezZ)
## 致谢
- [Suricata IDS/IPS](https://suricata.io/) - 开源网络威胁检测引擎
- [Emerging Threats](https://rules.emergingthreats.net/) - 社区规则集
- [Kali Linux](https://www.kali.org/) - 渗透测试发行版
- [MITRE ATT&CK](https://attack.mitre.org/) - 威胁分类框架
⭐ 如果您觉得这个项目有帮助,请考虑给它点个 Star!
怀着 💙 为网络安全社区而构建
标签:Metaprompt, PB级数据处理, Suricata, 前端框架, 安全运维, 应用安全, 插件系统, 流量监控, 现代安全运营, 网络安全, 虚拟化实验环境, 逆向工具, 隐私保护