mohamedahmedmounir-ctrl/NetShield-IDS

GitHub: mohamedahmedmounir-ctrl/NetShield-IDS

基于 Python Flask 的实时网络入侵检测系统,结合规则引擎与 Isolation Forest 机器学习模型,通过 SOC 风格仪表板可视化展示流量分析与威胁警报。

Stars: 0 | Forks: 0

# ⬡ NetShield IDS — 智能入侵检测系统 ![Python](https://img.shields.io/badge/Python-3.11+-3776AB?logo=python&logoColor=white) ![Flask](https://img.shields.io/badge/Flask-3.0-black?logo=flask) ![scikit-learn](https://img.shields.io/badge/scikit--learn-1.4-F7931E?logo=scikit-learn) ![License](https://img.shields.io/badge/License-MIT-green) ## 📋 概述 NetShield IDS 是一个学生级别的智能入侵检测系统,可监控网络流量,结合基于规则和机器学习的异常检测,并通过现代的、企业级的 SOC(安全运营中心)仪表板显示所有安全事件。 **核心功能:** - 实时数据包捕获与分析(实时 Scapy 或内置模拟器) - 基于规则的威胁检测(端口扫描、暴力破解、ICMP 洪水、已知恶意 IP 等) - 使用 Isolation Forest (scikit-learn) 进行 AI 异常检测 - 动态威胁评分(0–100 全网风险指数) - 带有图表、警报表和数据包流的实时更新仪表板 - 日志导出、搜索和过滤 ## ✨ 功能特性 | 功能 | 详情 | |---|---| | 📡 数据包监控 | 捕获源/目标 IP、协议、端口、大小、标志位、服务、流向 | | 🚨 基于规则的检测 | 7 条检测规则:端口扫描、暴力破解、ICMP 洪水、恶意 IP 等 | | 🤖 AI 检测 | Isolation Forest 异常检测及 Z-score 备用检测 | | 📊 实时仪表板 | 深色 SOC 风格 UI,集成 Chart.js 图表和实时轮询 | | 🎯 威胁评分 | 单警报评分 (0–100) + 全网威胁指数 | | 📁 日志记录 | 内存环形缓冲区 + 磁盘 JSON 持久化存储 | | 🔍 日志搜索 | 按严重程度过滤警报,按 IP 或攻击类型搜索 | | ⬇ 导出 | 下载所有日志为 JSON 格式 | ## 🛠 技术栈 **后端** - Python 3.11+ - Flask 3.0 (REST API + Jinja2 模板) - Scapy(可选 — 实时数据包捕获) **机器学习** - scikit-learn — Isolation Forest - NumPy — 特征提取 **前端** - Vanilla JavaScript (ES2022) - Chart.js 4 — 实时图表 - CSS Custom Properties — 深色 SOC 主题 - Google Fonts: Orbitron, Rajdhani, Share Tech Mono **存储** - JSON 平面文件(以换行符分隔,只追加) - 内存 deque 环形缓冲区 ## 📂 项目结构 ``` NetShield-IDS/ │ ├── app.py # Flask application & API routes ├── requirements.txt # Python dependencies ├── README.md │ ├── detector/ │ ├── packet_sniffer.py # Live capture (Scapy) + traffic simulator │ ├── threat_rules.py # Rule-based detection engine (7 rules) │ ├── anomaly_detector.py # AI / statistical anomaly detection │ └── traffic_analyzer.py # Aggregated analytics & threat scoring │ ├── logs/ │ ├── alerts.json # Persisted alert log (newline-delimited JSON) │ └── traffic_logs.json # Sample packet log │ ├── templates/ │ └── index.html # Main dashboard (Jinja2) │ ├── static/ │ ├── style.css # Dark cybersecurity theme │ ├── script.js # Dashboard controller & polling │ └── dashboard.js # Chart.js initialisation & updates │ ├── model/ │ ├── train_model.py # Standalone ML training script │ ├── ids_model.pkl # Trained Isolation Forest (generated) │ └── scaler.pkl # Fitted StandardScaler (generated) │ └── utils/ ├── logger.py # Thread-safe IDS logger ├── helpers.py # Utility functions └── config.py # Centralised configuration ``` ## 🚀 安装与设置 ### 前置条件 - Python 3.11 或更新版本 - pip ### 1. 克隆仓库 ``` git clone https://github.com/yourusername/NetShield-IDS.git cd NetShield-IDS ``` ### 2. 创建虚拟环境(推荐) ``` python -m venv venv # Linux / macOS source venv/bin/activate # Windows venv\Scripts\activate ``` ### 3. 安装依赖 ``` pip install -r requirements.txt ``` ### 4. (可选)训练机器学习模型 ``` python model/train_model.py ``` 此操作将生成 `model/ids_model.pkl` 和 `model/scaler.pkl`。 ### 5. 运行应用程序 ``` python app.py ``` ### 6. 打开仪表板 在浏览器中导航至 **http://127.0.0.1:5000**。 点击 **▶ START** 开始监控。 ## 🎮 使用方法 | 操作 | 方法 | |---|---| | 开始监控 | 点击顶部栏中的 **▶ START** | | 停止监控 | 点击 **■ STOP** | | 查看警报详情 | 点击 Threat Alerts(威胁警报)表中的任意行 | | 过滤警报 | 使用严重程度下拉菜单或搜索框 | | 导出日志 | 点击 **⬇ EXPORT** — 将下载 `netshield_export.json` | | 清除日志 | 点击 **⌫ CLEAR** | ## 🔬 工作原理 ### 数据包嗅探 NetShield 使用 **Scapy** 在网络接口上打开一个原始套接字,并在操作系统网络栈处理每个 IP 帧之前将其拦截。每一帧都会被解析以提取:源/目标 IP、端口、协议、TCP 标志位、数据包大小和 TTL。 在**演示模式**(默认,无需 root 权限)下,内置模拟器会生成逼真的合成流量,使仪表板在无提升权限的情况下也能完全正常运行。 ### 基于规则的检测 当数据包计数器超过阈值时,会触发七条确定性规则: 1. **已知恶意 IP** — 恶意 IP 范围的静态阻止列表 2. **端口扫描** — 来自单一源的 ≥15 个唯一目标端口或 ≥20 个 SYN 数据包 3. **暴力破解** — 对 SSH/RDP/FTP 端口的 ≥8 次失败连接 4. **ICMP 洪水** — 来自单一源的 ≥30 个 ICMP 数据包 5. **敏感端口** — 外部对数据库/管理员端口的访问 6. **数据外泄** — 出站数据包 > 1200 字节 7. **明文协议** — 使用 Telnet 或 FTP ### AI 异常检测 **Isolation Forest** (scikit-learn) 在合成的正常流量特征向量上进行训练。模型会为每个新数据包的特征向量分配一个异常分数;分数低于污染阈值(预测为 -1)的数据包将触发 AI 警报。**Z-score** 基线备用机制会标记出显著偏离每个源滚动平均值的单个指标(数据包大小、ICMP 速率)。 ### 威胁评分 全网威胁评分 (0–100) 计算为加权总和: - **40%** 最近 100 个数据包中威胁指标数据包(SYN/ICMP 密集)的比例 - **30%** 探测超过 5 个唯一端口的 IP 数量 - **30%** 当前分钟内的警报密度 ## 🔭 未来改进 - [ ] 带有自动接口检测的实时 Scapy 捕获 - [ ] 源 IP 的 GeoIP 地理位置映射 - [ ] 邮件 / webhook 警报通知(Slack,PagerDuty) - [ ] 使用持久化 SQLite 后端替换 JSON 平面文件 - [ ] 仪表板身份验证 - [ ] PCAP 文件上传与重放分析 - [ ] 在真实数据集上训练 (CICIDS2017,NSL-KDD) - [ ] Docker 容器化 - [ ] 基于速率的 DDoS 检测(令牌桶算法) ## ⚖️ 法律与道德声明 本工具仅为教育和研究目的而开发。请仅在您拥有或获得明确书面授权监控的网络上使用 NetShield IDS。未经授权的网络监控在您所在的司法管辖区可能是非法的。 *由 Mohamed Ahmed Mounir 构建。*
标签:AMSI绕过, Apex, Chart.js, DDoS防护, Flask, ICMP洪水检测, Jinja2, NumPy, OISF, Python, Scapy, scikit-learn, 云计算, 人工智能, 仪表盘, 免杀技术, 入侵检测系统, 威胁情报, 威胁检测, 威胁评分, 孤立森林, 安全数据湖, 安全运营中心, 开发者工具, 异常检测, 插件系统, 数据可视化, 无后门, 日志管理, 暴力破解检测, 机器学习, 用户模式Hook绕过, 端口扫描检测, 网络安全, 网络映射, 网络流量分析, 规则引擎, 逆向工具, 隐私保护