SufiyanAasim/smart-network-intrusion-detection-system

GitHub: SufiyanAasim/smart-network-intrusion-detection-system

一个基于多机器学习模型共识机制的 Python 网络入侵检测系统,通过对比分类差异和策略管控的自主防御实现智能威胁分诊与响应。

Stars: 0 | Forks: 0

Smart Network Intrusion Detection System shield # 智能网络入侵检测系统 ### 多模型网络入侵检测、分诊与响应工作区 [![Python 3.11](https://img.shields.io/badge/Python-3.11%2B-3776ab?style=flat&logo=python&logoColor=white)](docs/guides/running-locally.md) [![Version](https://img.shields.io/badge/version-11.0.0-blue?style=flat)](docs/releases/v11.0.0.md) [![Release](https://img.shields.io/badge/release-Cipher%20%E2%80%94%20Autonomy-8A2BE2?style=flat)](docs/releases/v11.0.0.md) [![License: MIT](https://img.shields.io/badge/License-MIT-22c55e?style=flat)](LICENSE) [![UI](https://img.shields.io/badge/UI-Streamlit-FF4B4B?style=flat&logo=streamlit&logoColor=white)](src/nids/app.py) [![ML](https://img.shields.io/badge/ML-scikit--learn-F7931E?style=flat&logo=scikitlearn&logoColor=white)](scripts/train_models.py) [![Platform](https://img.shields.io/badge/platform-Windows%20%C2%B7%20Linux%20%C2%B7%20macOS-64748b?style=flat)](docs/guides/running-locally.md) [![Tests](https://img.shields.io/badge/tests-117%20passing-16a34a?style=flat)](tests/) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-0ea5e9?style=flat)](CONTRIBUTING.md) 检查实时流量或导入 Wireshark 捕获文件,对比三个模型的判定结果, 并将模型间的分歧转化为可解释的操作员队列 —— 包含告警、 持久化历史记录、证据导出以及只读 REST API。 [**桌面版 .exe**](docs/deployment/desktop-exe.md) · [**更新日志**](CHANGELOG.md) · [**路线图**](ROADMAP.md) · [**报告 Bug**](.github/ISSUE_TEMPLATE/bug_report.md)
**作者:** [Mohammad Sufiyan Aasim](https://github.com/SufiyanAasim) (`sufiyanaasim@outlook.com`) · [Muhammad Taha Siddiqui](https://github.com/13eeCoder) (`tahasiddiqui2100@gmail.com`)
**最新版本:** v11.0.0 — **Cipher** _(Autonomy)_ **文档:** [架构](docs/architecture/architecture.md) · [API](docs/api/api.md) · [本地设置](docs/guides/running-locally.md) · [用户指南](docs/guides/user-guide.md) · [Docker & Render](docs/deployment/docker.md) · [桌面版构建](docs/deployment/desktop-exe.md) · [故障排除](docs/troubleshooting/troubleshooting.md) · [发布说明](docs/releases/)
**社区:** [贡献指南](CONTRIBUTING.md) · [安全](SECURITY.md) · [支持](SUPPORT.md) · [路线图](ROADMAP.md) · [发布流程](RELEASE.md) · [行为准则](CODE_OF_CONDUCT.md) 智能网络入侵检测系统 (S-NIDS) 是一个 Python 安全工作区,它在相同的 数据包证据上运行 Random Forest、Decision Tree 和 Isolation Forest。它重建了 41 个特征的 NSL-KDD schema,保留了每个原始 模型的判定,随后加入确定性的共识分诊机制,使得分析师能够明确 优先关注的目标,同时不丢失分数背后的证据。 **v11.0.0 增加了策略管控的自主防御:** 将高置信度的 证据关联为安全事件,在 Shadow 模式下验证决策,批准可逆的 响应,监控行为漂移,并且仅当 Administrator 和服务器策略明确 启用时,才允许受限的自动遏制措施。 ## ✨ 功能 ### 🧠 三模型对比 - **Random Forest** — 在带有标签的 NSL-KDD 攻击数据上训练的监督式集成模型(测试准确率 77.1%) - **Decision Tree** — 单棵可解释的决策树,使用相同的特征集(78.9%) - **Isolation Forest** — *无监督模型*,仅在正常流量上训练,因此它可以标记出监督模型从未学习过的异常行为(80.0%) - 这三个模型**同时对相同的数据包进行分类** —— 它们之间的分歧才是最有价值的部分 ### 📡 实时捕获 - 基于 scapy 的实时嗅探,针对 `count`、`srv_count` 和 `*_rate` 特征采用**真正的 2 秒 / 100 次连接的滑动时间窗口** —— 而非单包快照 - 实时显示每秒数据包数和每秒 KB 吞吐量图表,基于 60 秒的滚动窗口 - 捕获就绪检测:在 Windows 上会针对缺失的 **Npcap** 驱动发出警告,而不是静默地什么也不捕获 - 明确的**捕获接口选择器**,支持以太网、Wi-Fi、VPN 和虚拟适配器 - 应用内提供捕获范围指引:本地适配器只能看到该设备可见的流量;要监控整个局域网需要 SPAN/端口镜像、TAP 或网关传感器 - 更为平稳的 2.5 秒仪表盘刷新频率;“停止”操作仅暂停接收,绝不会生成或下载报告 - 实时 CSV 和 PDF 控件仅在点击 **Prepare Report Exports** 后出现;Print 选项保留在实时捕获标题栏中 ### 📂 Pcap 上传 - 从 Wireshark 导入 `.pcap`/`.pcapng` 文件,即可获得即时的分类报告 - 内置三个位于 `data/pcaps/` 的示例捕获文件(DDoS、Neptune、混合流量) ### 📊 可视化分析 - 威胁分布、数据包大小箱线图,以及交互式的 log-log(对数-对数)容量与大小散点图 —— 按模型分别展示 - **可解释 AI** 标签页:展示 RF/DT 的前 10 个特征重要性(以及解释为何 Isolation Forest 没有此属性) ### 🔔 告警 - **Slack**、通用 **webhook**、**电子邮件** (SMTP)、**PagerDuty** (Events API v2) 和 **Microsoft Teams** - 可选的应用内**蜂鸣声**(在运行时合成 —— 无需音频文件)和**桌面通知** - 通知选项位于 Deploy 旁边,确保无需展开侧边栏即可使用告警控制 - 采用基于冷却时间的按模型节流机制,防止持续攻击在每次重新运行时产生刷屏 ### 📜 持久化历史与分析 - 每次检测都会持久化到 SQLite 中,远超仅显示 100 行的实时视图限制 - 攻击趋势时间图表、来源过滤器,以及跨会话的**按 IP 下钻**功能 - **源 IP 地理**分布(私有/公共/回环/保留地址),并可选配 MaxMind 世界地图 - 六个同等大小的摘要卡片,使总数、模型标记、共识和平均风险具备直接可比性 ### 🎯 共识威胁分诊 - 每一行数据都会根据该次运行中可用的模型获得确定性的 **0–100 共识风险评分** - 清除 / 警戒 / 升高 / 严重 四个队列在不隐藏原始模型判定的情况下优先处理证据 - 分诊结果持久化到 SQLite,并可从仪表盘和 REST API 中查询 ### 策略管控的自主防御 - **Shadow**、**Approval** 和 **Autonomous** 模式将观察、人工授权和受限响应区分开来 - 根据来源和时间窗口将重复的高风险证据关联为稳定的安全事件 - 默认保护私有来源;主动拦截受速率限制、有时间限制、可审计且可撤销 - 默认禁用主机执行,并需要独立的 `NIDS_AUTONOMY_EXECUTE=true` 服务器控制开关 - 自适应行为漂移会建议进行经过审查的离线重训练,而不会静默替换生产环境模型 ### 📤 导出 - **CSV**、**Excel**、格式化的 **PDF** 报告,以及历史记录数据库的 **Fernet 加密备份** ### 🔒 访问控制与响应 - 可选的 **PBKDF2-SHA256 登录**(默认关闭),支持多用户的 **admin/viewer 角色** - 独立的 **Sign in** 和可选的 **Create account** 界面;可点击的 Administrator/Viewer 选择器会打开相应的凭据表单 - 自助注册账户始终仅为 Viewer 权限,并以加盐哈希值形式存储 - 紧凑的单屏侧边栏是当前访问级别的唯一信息源;实时捕获保持专注于捕获操作,Credits 核心组件仅用于展示,**Role permissions** 则打开完整的角色权限矩阵 - 管理员可以导出完整的历史记录和加密的数据库备份;Viewer 保留监控、PCAP 分析、近期历史记录和分诊的访问权限 - **Block 建议**仅支持复制粘贴;v11 的自主执行被隔离在明确的策略、TTL、回滚和审计保障机制之后 ### 专业的界面 - 清爽的 Material 图标取代了应用 UI 中装饰性的 Emoji 控件 - 主要标签页包括 **Dashboard**、**Live Capture**、**Upload PCAP**、**Model Logic**、**Autonomy**、**History** 和 **Credits** - Dashboard 首先展示聚合分诊、模型速率、风险和来源分析;Live Capture 包含 Print、Record Screen、捕获控制、吞吐量监控和详细的模型结果图表 - Credits 包含贡献者资料和 GitHub 链接;**About this project** 会打开项目摘要和技术清单 - 明暗主题共享相同的间距、对比度、卡片几何形状和响应式层级结构 - 判定结果使用稳定的 `Normal` 和 `Attack` 标签;较早的历史记录中的装饰性值会被自动标准化 ### 🔌 REST API - 基于历史数据库的无依赖只读 JSON API,支持可选的 bearer token 认证 - 专用的 `/api/triage` endpoint,支持 `min_risk`、`source` 和受限的 `limit` 筛选器 - 只读的 Autonomy 摘要、事件和操作 endpoint ### API 概览 | Endpoint | 用途 | 实用筛选器 | |---|---|---| | `GET /health` | 服务和 v11 版本健康检查 | — | | `GET /api/summary` | 检测总数、模型攻击计数、平均风险、严重计数 | — | | `GET /api/autonomy/summary` | 关联的事件和操作总数 | — | | `GET /api/autonomy/incidents` | 最新的关联 Autonomy 事件 | `limit` | | `GET /api/autonomy/actions` | 审计后的响应操作状态 | `status`, `limit` | | `GET /api/detections` | 最新持久化的检测记录 | `source`, `limit` | | `GET /api/triage` | 风险最高的操作员队列 | `min_risk`, `source`, `limit` | | `GET /api/ip/` | 单个源 IP 的证据、计数、风险以及首次/最后发现时间 | URL 编码的 IP | 设置 `NIDS_API_TOKEN` 以使用 bearer token 保护每个路由。该 API 是严格只读的,返回带有 `Cache-Control: no-store` 头的 JSON 格式数据,并限制查询 大小。请参阅完整的 [API 参考](docs/api/api.md)。 ## 🏗️ 架构 ``` data/nsl-kdd/ ──(train)──► scripts/train_models.py ──► models/*.pkl │ Live packets (scapy sniff) │ or .pcap upload (rdpcap) │ │ │ ▼ ▼ ┌──────────────────────┐ ┌──────────────────────────────────────┐ │ features.py │ │ RF · DT · Isolation Forest │ │ packets_to_df() │───────►│ (+ anomaly.py verdict mapping) │ │ 2s/100-conn window │ └──────────────┬───────────────────────┘ └──────────────────────┘ │ ▼ triage.py (consensus risk) │ ▼ ┌─────────────────────────────────────────────────────────┐ │ app.py (Streamlit UI) │ │ Live Capture · Upload · Explainable AI · History │ └──┬───────────┬────────────┬───────────┬─────────────────┘ ▼ ▼ ▼ ▼ storage.py alerts.py geo.py reporting.py (SQLite) (5 channels) (GeoIP) (PDF) │ │ ▼ ▼ api.py notify.py · firewall.py · auth.py · crypto.py (REST/JSON) (sound) (blocks) (login) (backup) ``` 详见 [docs/architecture/architecture.md](docs/architecture/architecture.md)。 ## 🛠️ 技术栈 | 层级 | 技术 | |-------|-----------| | 语言 | Python 3.11+ | | UI 框架 | Streamlit | | 图表 | Altair (Vega-Lite) | | 数据包捕获 | scapy (Windows 上使用 Npcap, Linux/macOS 上使用 raw sockets) | | 机器学习 | scikit-learn — RandomForest, DecisionTree, IsolationForest | | 数据集 | NSL-KDD (41 个特征) | | 持久化 | SQLite (标准库 `sqlite3`) | | 报告 | reportlab (PDF) · openpyxl (Excel) | | 加密 | `cryptography` (Fernet) · 通过 `hashlib` 实现 PBKDF2-SHA256 | | GeoIP | `geoip2` + MaxMind GeoLite2 (可选) | | REST API | 标准库 `http.server` — 无框架 | | 桌面版构建 | PyInstaller (文件夹构建 + 启动器) | | 测试 | pytest (117) · ruff | ### 依赖项 | 包 | 用途 | |---------|---------| | `streamlit`, `altair` | 仪表盘和图表 | | `scikit-learn`, `joblib`, `pandas`, `numpy` | 模型和数据处理 | | `scapy` | 实时捕获和 pcap 解析 | | `reportlab`, `openpyxl` | PDF 和 Excel 导出 | | `cryptography` | 加密的历史备份 | | `geoip2` | 可选的 GeoIP 世界地图 | ## 🚀 快速开始 ### 环境要求 - Python 3.11 或更高版本 - **仅限 Windows:** 需要 [Npcap](https://npcap.com/#download) 以进行实时捕获(pcap 上传无需此组件) - 实时捕获需要具有接口访问权限的 Npcap (Windows) 或 root / `CAP_NET_RAW` 权 (Linux/macOS);仅在安装具有访问限制的 Npcap 时才需要 Windows Administrator 权限 ### 快速启动(桌面应用) 从已构建的 `dist/NIDS/` 文件夹中双击 **`NIDS.exe`** —— 无需 Python 环境。 使用 `python scripts/build_exe.py` 构建它,或查看 [docs/deployment/desktop-exe.md](docs/deployment/desktop-exe.md)。 ### 克隆并从源码运行 ``` git clone https://github.com/SufiyanAasim/smart-network-intrusion-detection-system.git cd smart-network-intrusion-detection-system python -m venv .venv && source .venv/bin/activate # Windows: .venv\Scripts\activate pip install -r requirements.txt ``` ``` streamlit run src/nids/app.py ``` 打开 Streamlit 打印出的 URL(默认为 `http://localhost:8501`)。 ### 其他入口 ``` python scripts/train_models.py # retrain all three models python src/nids/api.py # REST API on 127.0.0.1:8600 python scripts/build_exe.py # build dist/NIDS/NIDS.exe make test && make lint # pytest + ruff ``` 完整的设置详情见 [docs/guides/running-locally.md](docs/guides/running-locally.md)。 ### Docker 启动 ``` docker compose up --build # dashboard docker compose --profile api up --build # dashboard + REST API docker compose --profile capture up nids-capture # Linux host capture ``` 默认容器特意配置为非特权模式,并支持 PCAP 上传、 历史记录、导出和分诊。原始数据包捕获是可选功能,因为它需要主机 网络和 Linux 数据包捕获能力。Windows Npcap 适用于原生应用, 而不是 Linux 容器。请参阅 [容器部署指南](docs/deployment/docker.md)。 ## ⚙️ 配置 所有设置均为可选 —— 即使不进行任何设置,应用也可正常运行。将 `.env.example` 复制为 `.env` 并进行修改。 | 变量 | 默认值 | 描述 | |----------|---------|-------------| | `CRITICAL_THRESHOLD_PCT` | `20` | 被标记为流量的百分比,超过此值状态将升级为 CRITICAL | | `ALERT_COOLDOWN_SECONDS` | `60` | 同一模型两次告警之间的最小间隔秒数 | | `MAX_PCAP_UPLOAD_MB` | `50` | 拒绝超过此应用内安全限制的捕获文件 | | `NIDS_CAPTURE_INTERFACE` | auto | 用于实时捕获的默认适配器标识符/标签 | | `LIVE_REFRESH_SECONDS` | `2.5` | 可见的实时仪表盘刷新之间的最小秒数 | | `NIDS_DB_PATH` | `data/history.db` | 检测历史数据库位置 | | `SLACK_WEBHOOK_URL` | — | Slack 入站 webhook URL | | `ALERT_WEBHOOK_URL` | — | 通用 JSON webhook | | `ALERT_SMTP_HOST` / `ALERT_EMAIL_TO` | — | 邮件告警(见 `.env.example`) | | `PAGERDUTY_ROUTING_KEY` | — | PagerDuty Events API v2 密钥 | | `TEAMS_WEBHOOK_URL` | — | Microsoft Teams 入站 webhook | | `NIDS_AUTH_PASSWORD_HASH` | — | 启用登录控制门(运行 `python src/nids/auth.py` 生成) | | `NIDS_AUTH_USERS` | — | 包含 `admin`/`viewer` 角色的用户 JSON 列表 | | `NIDS_SIGNUP_ENABLED` | `false` | 启用仅限 Viewer 的自我注册(建议仅在受信任的本地环境中使用) | | `NIDS_AUTH_DB_PATH` | `data/auth.db` | 哈希处理的本地自注册账户存储 | | `NIDS_API_TOKEN` | — | REST API 的 bearer token | | `NIDS_DB_ENCRYPTION_KEY` | — | 用于启用加密备份的 Fernet 密钥 | | `GEOIP_DB_PATH` | — | 用于世界地图的 MaxMind GeoLite2-City `.mmdb` | 本地源码运行会通过 `python-dotenv` 自动加载仓库根目录下的 `.env` 文件。 由 Shell、Docker 或 Render 明确提供的配置值具有优先权。`.env` 文件会被排除在 Git 和 Docker 构建上下文之外。 ## ☁️ 部署 | 目标 | 命令 / 入口点 | 实时捕获 | 持久化 | |---|---|---|---| | 本地源码 | `streamlit run src/nids/app.py` | 是,需具有 OS 权限和捕获后端 | 本地 SQLite | | Windows 桌面 | `python scripts/build_exe.py` → `dist/NIDS/NIDS.exe` | 是,需具有 Npcap;仅在受限访问时需要管理员权限 | `%LOCALAPPDATA%/NIDS/history.db` | | Docker | `docker compose up --build` | 默认仅支持上传 | 版本中立的 `nids-history` 卷 | | Docker + API | `docker compose --profile api up --build` | 默认仅支持上传 | 共享的命名卷 | | Docker 捕获配置 | `docker compose --profile capture up nids-capture` | Linux 主机网络 + `NET_RAW`/`NET_ADMIN` | 命名卷 | | Render | 基于 `render.yaml` 的 Blueprint | 设计上仅支持上传 | 持久化 `/data` 磁盘 | Render 需要 `NIDS_AUTH_PASSWORD_HASH`,并在缺少认证或认证无效时实施失败即关闭。 该 Blueprint 使用付费的 Starter 计划,因为 Render 持久化磁盘不对 Free Web 服务提供。 容器以非 root 用户身份运行,开放健康检查端点,遵循 Render 的 `$PORT` 设置,并仅将 运行时资产复制到镜像中。请参阅 [Docker 与 Render 部署](docs/deployment/docker.md)、 [桌面版部署](docs/deployment/desktop-exe.md) 和 [本地操作](docs/guides/running-locally.md)。 ## 🗂️ 项目结构 ``` smart-network-intrusion-detection-system/ ├── .github/ # Issue/PR templates, CI (lint · test · container · retrain) ├── assets/images/ # Canonical logo.png (app/docs) · generated logo.ico (exe) ├── config/ # Feature schema reference ├── data/ │ ├── nsl-kdd/ # NSL-KDD train/test sets │ ├── pcaps/ # Sample captures for manual testing │ └── history.db # Detection history (runtime, gitignored) ├── docs/ │ ├── api/ # REST API reference │ ├── architecture/ # System architecture │ ├── deployment/ # Docker, Render, and desktop deployment guides │ ├── guides/ # User and local-run guides │ ├── images/ # Figures used by the docs (NSL-KDD charts) │ ├── releases/ # Per-version release notes (v1–v10) │ └── troubleshooting/ # Common issues and fixes ├── models/ # Trained rf/dt/iforest .pkl models ├── notebooks/ # Original coursework artefacts (historical — not live code) │ ├── TheCode.ipynb # The original notebook, as written │ └── TheCode.py # Same notebook flattened to a script ├── scripts/ │ ├── train_models.py # CLI retraining │ ├── desktop_launcher.py # Frozen .exe entry point │ └── build_exe.py # PyInstaller build wrapper ├── src/nids/ # Application package (○ @SufiyanAasim · ● @13eeCoder) │ ├── app.py # ○ Streamlit UI · tabs · sidebar · charts │ ├── features.py # ● Packets → 41 NSL-KDD features (2s/100-conn window) │ ├── netcheck.py # ● Capture readiness · Npcap/libpcap detection │ ├── throughput.py # ● Per-second packets/sec · KB/sec aggregation │ ├── geo.py # ● IP classification (RFC1918/public) + GeoIP │ ├── auth.py # ● PBKDF2-SHA256 login + admin/viewer roles │ ├── crypto.py # ● Fernet-encrypted history backup │ ├── firewall.py # ● iptables/ufw/nftables/netsh block suggestions │ ├── alerts.py # ● Slack · webhook · email · PagerDuty · Teams │ ├── notify.py # ● Beep synthesis + browser notification │ ├── anomaly.py # ○ Isolation Forest verdict mapping │ ├── triage.py # ○ Cross-model consensus risk scoring │ ├── storage.py # ○ SQLite persistence and queries │ ├── reporting.py # ○ PDF report generation │ └── api.py # ○ Read-only REST API ├── tests/ # pytest suite ├── nids.spec # PyInstaller spec ├── Dockerfile # Container image ├── docker-compose.yml # Dashboard plus opt-in API/capture profiles ├── render.yaml # Render Blueprint (Starter + persistent disk) ├── Makefile # install · run · api · test · lint · train ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── RELEASE.md ├── ROADMAP.md ├── SECURITY.md └── SUPPORT.md ``` ## 🧠 应用的机器学习与安全概念 | 概念 | 实现 | |---|---| | 共享特征 Schema | 每个模型都接收相同且排序过的 41 列 NSL-KDD 特征框架 | | 有状态的特征工程 | `count`、`srv_count` 和速率特征使用 2 秒 / 100 次连接的滑动窗口 | | 监督式分类 | Random Forest 和 Decision Tree 从带标签的正常/攻击记录中学习 | | 无监督异常检测 | Isolation Forest 在正常流量上训练,并暴露出未知的异常值 | | 模型分歧 | 原始判定结果并排保留,而不是被隐藏在单一的集成标签之后 | | 共识优先级排序 | 可用的攻击投票转化为确定性的 0–100 风险评分和四个分诊级别 | | 可解释性 | RF/DT 的特征重要性识别出有影响力的输入;明确说明了 IF 的局限性 | | 持久化证据 | SQLite 存储数据包派生的字段、所有判定结果、来源、时间戳和风险元数据 | | 纵深防御 | 可选的登录机制、PBKDF2 哈希、角色检查、账户锁定、API bearer 认证以及加密备份 | | 安全的响应工作流 | 防火墙命令仅为建议;S-NIDS 绝不会自动拦截任何地址 | | 告警扇出 | 一个受冷却机制控制的事件可触达 Slack、webhook、SMTP、PagerDuty 和 Teams | | 云端最小权限 | 默认容器为非 root 模式;原始捕获为可选项,云端上传分析保持隔离状态 | ## 📦 版本发布 此仓库使用 Guardian/Security 代号。完整的发布说明位于 [docs/releases](docs/releases/),按时间顺序的记录位于 [CHANGELOG.md](CHANGELOG.md)。 | 版本 | 代号 | 里程碑 | 亮点 | |---|---|---|---| | [v11.0.0](docs/releases/v11.0.0.md) | **Cipher** | Autonomy | 关联、漂移信号、审批、可逆遏制、审计追踪 | | [v10.0.0](docs/releases/v10.0.0.md) | **Argus** | Verification | 适配器选择、角色优先的认证、紧凑的外壳、Credits/About 流程、清晰的判定、UI 验证 | | [v9.0.0](docs/releases/v9.0.0.md) | **Vigil** | Operations | 云端加固、自适应主题、锁定、安全的上传处理、共识分诊 | | [v8.0.0](docs/releases/v8.0.0.md) | **Phalanx** | Infrastructure | 重训练 CI、角色、REST API、加密备份、PagerDuty + Teams | | [v7.0.0](docs/releases/v7.0.0.md) | **Bastion** | Security | 仪表盘认证和经过审查的防火墙建议 | | [v6.0.0](docs/releases/v6.0.0.md) | **Aegis** | Analytics | GeoIP、PDF 报告、吞吐量、浏览器告警、捕获就绪状态 | | [v5.0.0](docs/releases/v5.0.0.md) | **Bulwark** | Data | 完整历史导出和按 IP 下钻 | | [v4.0.0](docs/releases/v4.0.0.md) | **Citadel** | Thresholds | 可配置的威胁阈值和历史趋势图表 | | [v3.0.0](docs/releases/v3.0.0.md) | **Watchtower** | Consolidation | 有状态特征、持久化、告警、Isolation Forest、品牌化 UI | | [v2.0.0](docs/releases/v2.0.0.md) | **Vanguard** | Baseline | 可用的双模型仪表盘基线 | | [v1.0.0](docs/releases/v1.0.0.md) | **Sentinel** | Foundation | 仓库结构、文档、CI 和功能测试 | ## 🧪 测试 ``` pytest -q # 117 tests ruff check src tests scripts # lint ``` 每个模块都特意**排除了 Streamlit 的导入**,以便其逻辑可以在没有 Streamlit 运行时的情况下进行单元测试 —— `app.py` 负责处理 UI,其他一切都是纯逻辑。 未包含在自动化测试中的部分(已通过人工验证): 1. 针对真实流量的实时捕获(Windows 需要 Npcap,并且如果 Npcap 是以 仅管理员模式安装的,则可能需要 Administrator 权限)。 2. 打包后的 `.exe` —— 启动它并确认仪表盘能够正常服务,且 History 标签页能够解析其数据库路径。 3. 真实的告警发送至 Slack/PagerDuty/Teams(测试中对 HTTP 调用进行了 mock)。 ## 🛡️ 安全 仪表盘**默认开放** —— 在将其暴露给 localhost 之外的网络之前,请启用登录控制门。密码仅以 PBKDF2-SHA256 哈希值的形式存储(26 万次迭代,每个哈希具有独立的盐值,并采用常量时间比较);明文绝不写入磁盘或日志。 拦截建议**仅用于展示** —— 该应用绝不会执行防火墙命令或更改系统状态。REST API 是只读的,且不提供任何写入端点。模型文件使用 `joblib` 加载,这可能会执行任意代码 —— 请仅加载您信任的 `.pkl` 文件。 请参阅 [SECURITY.md](SECURITY.md) 来报告漏洞。 ## 📄 许可证 [MIT License](LICENSE) © 2026 Smart Network Intrusion Detection System 贡献者。 基于 **NSL-KDD** 进行训练,数据集下载自 [Kaggle 镜像](https://www.kaggle.com/datasets/hassan06/nslkdd),最初由 [加拿大网络安全研究所, UNB](https://www.unb.ca/cic/datasets/nsl.html) 发布 —— 完整的引用和条款请参见 [docs/DATASET.md](docs/DATASET.md)。
⭐ **如果你喜欢看这三个模型如何针对你的流量进行辩论,请给本仓库点个 Star。** [报告 Bug](.github/ISSUE_TEMPLATE/bug_report.md) · [请求功能](.github/ISSUE_TEMPLATE/feature_request.md) · [更新日志](CHANGELOG.md)
标签:Apex, Kubernetes, Python, Streamlit, 无后门, 机器学习, 网络安全, 自动防御, 访问控制, 请求拦截, 逆向工具, 隐私保护