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, 入侵检测系统, 前端框架, 可视化, 后端开发, 多模态安全, 安全数据湖, 安全运营中心, 现代安全运营, 网络安全, 网络映射, 自动化响应, 逆向工具, 隐私保护