Mr-Romeo/network-intrusion-detection
GitHub: Mr-Romeo/network-intrusion-detection
一套基于 Suricata 的完整网络入侵检测与自动响应系统,提供规则检测、告警分级、自动拦截和 SOC 仪表盘可视化。
Stars: 0 | Forks: 0
# 网络入侵检测系统 (NIDS) — 基于 Suricata
一个完整且可运行的网络入侵检测系统,基于 **Suricata** 构建,
涵盖所有五项项目要求:
| # | 要求 | 实现方式 |
|---|-------------|----------------|
| 1 | 设置基于网络的 IDS | `scripts/01_install_suricata.sh`, `02_configure_suricata.sh` |
| 2 | 配置规则和警报 | `rules/local.rules` (28 条自定义特征码) + Emerging Threats Open 规则集 |
| 3 | 持续监控网络流量 | `scripts/nids_monitor.py` + `configs/nids-monitor.service` (7x24 小时 systemd 守护进程) |
| 4 | 实现响应机制 | `nids_monitor.py` 内部的自动拦截引擎 + `scripts/05_incident_response.sh` (手动分析师操作) |
| 5 | 可视化检测到的攻击 | `dashboard/dashboard.html` (独立的 SOC 仪表盘) |
## 项目结构
```
nids-project/
├── scripts/
│ ├── 01_install_suricata.sh # Installs Suricata + suricata-update
│ ├── 02_configure_suricata.sh # Sets interface, HOME_NET, EVE JSON logging
│ ├── 03_setup_rules.sh # Pulls ET Open ruleset + installs local.rules
│ ├── 04_generate_test_traffic.sh # Safe test traffic generator (scans, SQLi, XSS)
│ ├── 05_incident_response.sh # Manual analyst actions: investigate/block/snapshot
│ ├── nids_monitor.py # Continuous monitor + automated response engine
│ ├── incidents.log # Human-readable incident log (generated)
│ ├── incidents.csv # Structured incident log (feeds dashboard)
│ └── blocked_ips.log # Record of auto-blocked IPs (generated)
├── rules/
│ └── local.rules # 28 custom Suricata detection signatures
├── configs/
│ └── nids-monitor.service # systemd unit for 24/7 monitoring
├── dashboard/
│ ├── dashboard.html # READY-TO-OPEN dashboard (demo data embedded)
│ ├── dashboard_template_src.html # Template used to rebuild the dashboard
│ └── build_dashboard.py # Regenerates dashboard.html from live incidents.csv
├── sample-logs/
│ └── sample_eve.json # 188-event simulated 24h traffic sample
└── docs/
└── NIDS_Project_Report.docx # Full project report (methodology, results, screenshots)
```
## 快速开始 (演示 — 无需安装 Suricata)
仪表盘和监控器已经针对模拟流量运行过一次,因此
您可以立即看到整个流水线的工作情况:
```
# 立即查看 dashboard
open dashboard/dashboard.html # macOS
xdg-open dashboard/dashboard.html # Linux
# 或者直接双击该文件
```
要自行针对样本数据重新运行检测 + 响应流水线:
```
cd scripts
python3 nids_monitor.py --replay ../sample-logs/sample_eve.json
```
这会在每次警报分类时将其打印出来,并实时显示自动拦截
触发情况。输出将写入 `incidents.log`、`incidents.csv` 和
`blocked_ips.log`。
要从最新的 Incident 数据重建仪表盘:
```
cd dashboard
python3 build_dashboard.py --csv ../scripts/incidents.csv
```
## 完整部署 (在 Linux 主机/虚拟机上运行真实的 Suricata)
**要求:** Ubuntu/Debian 20.04+,root 权限,一个需要
监控的网络接口 (在生产环境中使用则需要 SPAN/镜像端口)。
```
# 1. 安装 Suricata
sudo ./scripts/01_install_suricata.sh
# 2. 配置 interface + HOME_NET(替换为您的值)
sudo ./scripts/02_configure_suricata.sh eth0 "192.168.1.0/24"
# 3. 拉取 community rules + 安装 custom rules
sudo ./scripts/03_setup_rules.sh
# 4. 启动 Suricata
sudo systemctl start suricata
sudo systemctl status suricata
# 5. 将 continuous monitor 部署为服务
sudo mkdir -p /opt/nids-project
sudo cp -r scripts rules configs /opt/nids-project/
sudo cp configs/nids-monitor.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now nids-monitor
journalctl -u nids-monitor -f # watch live alerts + responses
# 6.(从另一台经过授权的测试机器)生成测试流量
./scripts/04_generate_test_traffic.sh
# 7. 随时使用真实数据重建 dashboard
cd dashboard
python3 build_dashboard.py --csv /opt/nids-project/scripts/incidents.csv
```
### 手动 Incident 响应
```
sudo ./scripts/05_incident_response.sh investigate 203.0.113.45
sudo ./scripts/05_incident_response.sh block 203.0.113.45 60
sudo ./scripts/05_incident_response.sh list-blocked
sudo ./scripts/05_incident_response.sh snapshot 203.0.113.45 ./evidence
```
## 检测与响应的工作原理
1. **Suricata** 会根据两个规则集检查配置接口上的
所有流量:社区维护的 **Emerging Threats Open**
规则集,以及我们涵盖侦察/扫描、暴力破解、Web 攻击 (SQLi/XSS/目录遍历)、恶意软件/C2 指标、策略违规和 DoS/泛洪攻击的 **28 条自定义规则** (`rules/local.rules`)。
2. 匹配项将作为结构化的 JSON 事件写入 `eve.json`
(Suricata 的 "EVE" 日志格式)。
3. **`nids_monitor.py`** 会持续追踪 `eve.json` (类似于 `tail -f`),
解析每个警报,并根据 Suricata 的 `classtype` 将其分类为 LOW/MEDIUM/HIGH/CRITICAL 严重级别。
4. **响应逻辑**:如果单个源 IP 在 60 秒内产生 **3 个以上的 HIGH/CRITICAL
警报**,引擎将自动通过 `iptables` 拦截该 IP 30 分钟 (可配置),然后自动解除拦截。
白名单机制可防止意外锁定自身。
5. 每个 Incident 和每项响应操作都会记录到 `incidents.csv` 中,
**仪表盘** 会对其进行可视化:KPI 计数器、24 小时堆叠警报
时间线、严重级别分布、高频攻击 IP、实时警报推送,
以及自动响应审计跟踪记录。
### 为什么存在试运行模式
`nids_monitor.py` 默认采用 **模拟** 拦截 (`action: "blocked_simulated(dry_run)"`),
因此无需 root 权限或影响真实防火墙规则即可安全地进行演示。
传入 `--active` (并以 root 身份运行) 即可在
生产环境中启用真实的 `iptables` 强制执行。
## 调优说明
- 调整 `local.rules` 中的 `threshold: count/seconds` 值以匹配您
网络的实际基线流量,并减少误报。
- 调整 `nids_monitor.py` 顶部的 `AUTOBLOCK_THRESHOLD`、`WINDOW_SECONDS` 和 `BLOCK_DURATION_MINUTES`
以更改系统自动响应的激进程度。
- 在启用 `--active` 模式之前,请将您的网关/DNS/监控 IP 添加到 `nids_monitor.py` 的 `ALLOWLIST` 中,
以避免拦截您依赖的基础设施。
## 道德与法律声明
仅对您拥有或获得明确书面授权
进行测试的系统运行测试流量生成器 (`04_generate_test_traffic.sh`) 以及任何
扫描工具。未经授权的扫描或入侵测试在大多数
司法管辖区都是违法的。
标签:Cutter, Metaprompt, Mutation, Suricata, 入侵检测系统, 前端框架, 可视化, 后端开发, 多模态安全, 安全数据湖, 安全运营中心, 现代安全运营, 网络安全, 网络映射, 自动化响应, 逆向工具, 隐私保护