VishvaNarkar/Mini-IDRS

GitHub: VishvaNarkar/Mini-IDRS

一个基于 Python 构建的教育型入侵检测与响应实验室系统,通过 Scapy 流量分析、插件化检测引擎和双层自动拦截机制,演示实时网络安全防护的完整工作流。

Stars: 2 | Forks: 0

# 迷你入侵检测与响应系统 (IDRS) **一个基于 Python 构建、模块化的 IDS/IPS 实验室系统,专为 VMware Workstation Pro 设计。** ## 项目概述 Mini-IDRS 是一个教育性质的网络安全项目,具备以下功能: - 使用 **Scapy** 捕获实时网络流量 - 使用**基于插件的引擎**检测攻击(每个检测器都是一个独立的模块) - 通过**双层拦截**自动响应: - Linux 防火墙 VM — `nftables FORWARD` DROP 规则(通过防火墙 REST API) - 受害者 VM — `iptables INPUT` DROP 规则(通过 Paramiko SSH) - 暴露 **REST API** (FastAPI) 以进行编程控制 - 提供直接从 IDS API (FastAPI) 提供服务或独立运行的**自定义 SOC 仪表盘** (HTML/CSS/JS),具有实时 WebSockets 和 Apache ECharts 可视化功能。 - 将拦截的 IP 持久化到 `runtime/blocked.json` — 状态在监控器重启后依然保留 - 支持 **PCAP 重放**,无需实时攻击即可测试新的检测逻辑 ## 核心功能 | 功能 | 详情 | |---------|--------| | **实时检测** | Scapy 数据包分析,每种攻击类型对应一个插件 | | **模块化插件** | 只需在 `plugins/` 目录中放入文件即可添加检测器 | | **FirewallManager 抽象** | 无需修改 IDS 逻辑即可切换 nftables → iptables → pfSense | | **REST API 控制平面** | 版本化 (`/api/v1/`),经过身份验证 (`X-API-Key`) | | **仪表盘 → 仅与 IDS API 通信** | 仪表盘对防火墙/SSH 零了解 | | **持久化** | `blocked.json` 在重启后保留;接口已准备好支持 SQLite | | **动态阈值** | 通过仪表盘滑块实时更新 SYN/SSH 阈值 | | **PCAP 重放** | 通过完整 pipeline 重放捕获的内容(`--dry-run` 模式) | | **APScheduler** | 后台任务:健康检查、白名单重载、统计、清理 | | **Docker 支持** | `docker compose up` 启动监控器 + IDS API(托管仪表盘) | | **无需 GNS3/Cisco** | 纯 VMware 环境 — 一台 Linux 防火墙 VM 即可取代整个模拟路由器 | ## 架构 ``` [Kali Attacker VM] ──┐ [Ubuntu Victim VM] ─┼── VMnet2 (Host-Only, 192.168.10.0/24) [Ubuntu Monitor VM] ─┘ │ ▼ ┌──────────────────────────┐ │ Linux Firewall VM │ │ ens34: 192.168.10.1/24 │ ← dnsmasq DHCP │ ens33: DHCP (VMnet8) │ ← NAT / internet │ nftables FORWARD chain │ ← drops attacker traffic │ Firewall API :8080 │ ← internal-only, API-key auth └──────────────────────────┘ │ VMnet8 (NAT) → Internet ``` **控制流:** ``` Dashboard → IDS API → FirewallManager → Firewall API → nftables IDS Monitor → detects → EventPipeline → FirewallManager + VictimBlocker ``` 有关完整的图表和组件映射,请参见 [docs/architecture.md](docs/architecture.md)。 ## 项目结构 ``` Mini-IDRS/ ├── core/ IDS engine modules ├── plugins/ Detection plugins (one per attack type) ├── ids_api/ IDS REST API (Monitor VM) ├── firewall_api/ Firewall REST API (Linux Firewall VM) ├── tools/ PCAP replay tool ├── docs/ Architecture, API, development, deployment guides ├── runtime/ Generated files (logs, blocked.json, pcaps) — gitignored ├── config.yaml.example Non-secret config template ├── .env.example Secrets template ├── idrs_monitor.py Entry point ├── dashboard/ Pure HTML/CSS/JS SOC Dashboard frontend ├── requirements.txt ├── docker-compose.yml └── GATEWAY_CONFIG.md Linux Firewall VM setup guide ``` ## 前置条件 - **VMware Workstation Pro**(无需 GNS3) - **4 台 VM**:Linux 防火墙 (Ubuntu)、监控器 (Ubuntu)、受害者 (Ubuntu)、攻击者 (Kali) - 监控器和 Linux 防火墙 VM 上需安装 **Python 3.11+** - 监控器 VM 上需具备 Root/sudo 权限(用于 Scapy 原始套接字嗅探) ## 快速开始 ### 1. Linux 防火墙 VM 请按照 [GATEWAY_CONFIG.md](GATEWAY_CONFIG.md) 进行操作 — 设置 nftables、dnsmasq 和防火墙 API 服务。 ### 2. 监控器 VM ``` git clone https://github.com/VishvaNarkar/Mini-IDRS.git cd Mini-IDRS python3 -m venv venv && source venv/bin/activate pip install -r requirements.txt # 配置 cp config.yaml.example config.yaml # Edit IPs cp .env.example .env # Edit secrets (API keys, SSH creds) # 创建运行时目录 + 初始白名单 mkdir -p runtime/logs runtime/pcaps runtime/cache echo "192.168.10.1" > runtime/whitelist.txt # Firewall VM echo "192.168.10.12" >> runtime/whitelist.txt # Monitor (this host) ``` ### 3. 受害者 VM ``` sudo apt install openssh-server -y sudo visudo # Add: victim ALL=(ALL) NOPASSWD: /sbin/iptables ``` ### 4. 运行(在监控器 VM 上打开三个终端) ``` # Terminal 1 — IDS 监控 sudo venv/bin/python idrs_monitor.py -i ens33 # Terminal 2 — IDS API(在 http://localhost:5000/dashboard/index.html 提供 dashboard 服务) uvicorn ids_api.server:app --host 0.0.0.0 --port 5000 # Terminal 3 — 独立 Dashboard Web 服务器(可选备选方案) cd dashboard && python -m http.server 8080 # 在浏览器中打开 http://192.168.10.12:8080 ``` 或使用 Docker: ``` docker compose up -d # Dashboard 可通过以下地址访问:http://192.168.10.12:5000/dashboard/index.html ``` ## 检测能力 | 攻击 | 方法 | 严重程度 | 默认阈值 | |--------|--------|----------|------------------| | **XMAS 扫描** | TCP FIN+PSH+URG 标志 | 低 | 立即(任意数据包) | | **SYN Flood** | 滑动窗口 SYN 计数 | 严重 | 5 秒内 25 个 SYN | | **SSH 暴力破解** | 端口 22 上的 TCP 握手跟踪 | 高 | 60 秒内 8 次握手 | 可通过仪表盘实时调整阈值 — 无需重启。 ## 攻击模拟(仅限 Kali VM) ``` nmap -sX 192.168.10.14 # XMAS scan sudo hping3 -S 192.168.10.14 -p 22 --flood # SYN flood hydra -l root -P wordlist.txt ssh://192.168.10.14 # SSH brute-force ``` **验证拦截:** ``` # Firewall VM sudo nft list chain inet filter FORWARD # Victim VM sudo iptables -L INPUT -n -v # IDS API curl -H "X-API-Key: your-key" http://192.168.10.12:5000/api/v1/blocks ``` ## PCAP 重放 无需实时攻击即可测试新的检测器: ``` # 捕获 sudo tcpdump -i ens33 -w runtime/pcaps/session.pcap # 使用 dry-run 重放(不进行阻断) python tools/replay.py --pcap runtime/pcaps/session.pcap --dry-run # 完整 pipeline 重放 python tools/replay.py --pcap runtime/pcaps/session.pcap ``` ## 文档 | 文件 | 内容 | |------|----------| | [docs/architecture.md](docs/architecture.md) | 系统设计、图表、组件映射 | | [docs/api.md](docs/api.md) | 完整的 API 参考(包含两个 API) | | [docs/development.md](docs/development.md) | 添加插件和防火墙后端 | | [docs/deployment.md](docs/deployment.md) | 逐步的实验室设置指南 | | [GATEWAY_CONFIG.md](GATEWAY_CONFIG.md) | Linux 防火墙 VM 配置 | ## 安全提示 - 凭据应放在 `.env` 中 — 永远不要放在 `config.yaml` 或源代码中 - 生成强 API 密钥:`python3 -c "import secrets; print(secrets.token_hex(32))"` - 防火墙 API 仅绑定到内部接口 (`192.168.10.1:8080`) - 请勿用于生产环境 — 这是一个实验室/教育系统 ## 未来改进 - SQLite 数据库(替换 `BlockStore` 后端 — 接口已准备就绪) - 基于 TTL 的拦截过期机制(`_cleanup_blocks` 任务已计划) - 通过 Unix socket 而非 HTTP 使用 nftables(以实现更严格的安全性) - 威胁情报集成 (AbuseIPDB) - 基于 ML 的异常检测插件 - 额外的检测器:UDP flood、ICMP flood、ARP 欺骗、端口扫描 ## 使用的库 `scapy` · `paramiko` · `fastapi` · `uvicorn` · `pyyaml` · `python-dotenv` · `requests` · `apscheduler` · `psutil` · `websockets` ## 许可证 MIT 许可证 — 详见 `LICENSE`。 ## 作者 **Vishva Narkar** — 学生 **Himesh Nayak** — 学生 *iM.Sc. IT 架构与网络安全 — 古吉拉特大学* ## 致谢 感谢 Scapy、Paramiko、FastAPI 和 Apache ECharts 背后的开源社区。
标签:AV绕过, DNS 反向解析, FastAPI, iptables, Netmiko, Scapy, 入侵检测系统, 安全数据湖, 网络安全, 自动化防御, 请求拦截, 逆向工具, 隐私保护