shuvendu9207/NetShield

GitHub: shuvendu9207/NetShield

NetShield 是一个基于机器学习的网络入侵检测系统,通过对离线 PCAP 文件和实时网络流量进行流级特征提取与分类,自动识别六类常见网络攻击并生成安全警报。

Stars: 0 | Forks: 0

# NetShield:基于 AI 的网络入侵检测系统 (NIDS) NetShield 是一个生产级、由 AI 驱动的网络入侵检测系统 (NIDS),旨在分析网络流量并实时对网络威胁进行分类。结合了底层的数据包捕获技术、流追踪和机器学习分类器,NetShield 能够自动解析原始网络流量(PCAP 文件或实时网络适配器),执行特征提取,对流进行分类,针对恶意流量发出警报,并将所有历史日志记录到 PostgreSQL 数据库中。 ## 1. 项目概述 在现代安全运营中,传统的基于特征的检测系统(如 Snort 或 Suricata)难以捕捉零日攻击或多态威胁。NetShield 通过使用基于网络流量特征训练的监督机器学习模型(Random Forest 和 XGBoost)弥补了这一空白。 ### 核心目标: * **零前端足迹**:纯后端 API 系统,带有交互式的 Swagger 文档。 * **双监控模式**:无缝支持离线 PCAP 文件取证上传和实时网络嗅探。 * **有状态的流追踪**:将 TCP/UDP 数据包重构为双向流。 * **确定性安全警报**:使用可配置的置信度和严重性阈值,将良性流量警报与已验证的威胁区分开来。 * **Docker 就绪**:预配置的多容器技术栈,具有自动关联的 FastAPI 和 PostgreSQL 服务。 ## 2. 系统架构 NetShield 采用高度模块化、解耦的架构构建,包含 6 个核心子系统: ``` graph TD A[Network Input: PCAP or Live Adapter] --> B[Packet Capture & Parser] B --> C[Feature Extraction & Flow Tracker] C --> D[ML Inference Engine: XGBoost/RF] D --> E[Alert Engine: Threshold Rules] D --> F[Database Layer: PostgreSQL] E --> F F --> G[FastAPI REST API Layer] ``` ### 核心子系统: 1. **数据包解析器 (`src/packet_capture`)**: 使用 Scapy 的流式处理功能 (`PcapReader`) 解析数据包层属性,而无需将大型 PCAP 文件完全加载到内存中。实时监控会在后台执行线程中运行 Scapy 的嗅探循环。 2. **特征提取 (`src/feature_extraction`)**: 为通过 5 元组键 `(Src IP, Src Port, Dst IP, Dst Port, Protocol)` 定义的双向网络连接维护状态。当数据包到达时,流统计信息(例如持续时间、字节数、数据包/秒、TTL 平均值、TCP 标志组合)将实时更新。 3. **ML 推理引擎 (`src/inference`)**: 加载序列化的模型权重 (`model.pkl`)、缩放器和标签编码器。它将原始的 11 个网络流特征转换为标准化输入,并返回预测概率。 4. **警报引擎 (`src/alerts`)**: 监控预测结果。如果预测结果非 Benign 且其概率超过 $90\%$,则会触发高严重性警报。 5. **数据库集成 (`src/database`)**: 提供 `DetectionHistory` 和 `Alert` 表的 SQLAlchemy ORM 映射,在本地支持 SQLite 以便快速测试,并在生产 Docker 环境中支持 PostgreSQL。 6. **API 接口 (`src/api`)**: FastAPI 路由层,暴露清晰的 HTTP endpoint,处理生命周期初始化、验证 schema 和数据库依赖。 ## 3. 数据集与特征工程 NetShield 的分类器在 **CIC-IDS2017** 数据集上训练,该数据集包含良性流量以及常见的特定家族网络攻击。 ### 分类标签: * **Benign**:标准的非恶意网络流量。 * **DDoS**:分布式拒绝服务攻击。 * **PortScan**:主机发现和漏洞扫描尝试。 * **Bot**:Botnet Command and Control 通道通信。 * **BruteForce**:自动凭证破解 (SSH/FTP)。 * **WebAttack**:SQL 注入、跨站脚本 (XSS) 和暴力目录遍历。 ### 提取的特征 Schema(11 个特征): 在训练、PCAP 上传解析和实时网络捕获中,保证使用完全相同的特征提取 schema: | 特征名称 | 描述 | 层来源 | |---|---|---| | **Protocol** | 传输层协议 ID(例如,TCP=6, UDP=17) | IP 层 | | **Source Port** | 源连接端口 | TCP/UDP 层 | | **Destination Port** | 目标连接端口 | TCP/UDP 层 | | **Packet Length** | 流中所有数据包的平均大小 | IP/Ether 层 | | **TTL** | 数据包的平均生存时间 | IP 层 | | **TCP Flags** | 所有观察到的 TCP 控制标志的按位 OR 累积 | TCP 层 | | **Flow Duration** | 第一个和最后一个数据包之间的时间差(以微秒为单位) | 系统/数据包时间 | | **Packets Per Second** | 发送的总数据包数除以流持续时间 | 计算得出 | | **Bytes Per Second** | 发送的总字节数除以流持续时间 | 计算得出 | | **Forward Packets** | 源 $\rightarrow$ 目标方向传输的数据包计数 | 计算得出 | | **Backward Packets** | 目标 $\rightarrow$ 源方向传输的数据包计数 | 计算得出 | ## 4. 本地安装指南 ### 前置条件 * Python 3.10+ * 系统数据包捕获驱动程序: * **Windows**:安装 [Npcap](https://npcap.com/)(确保勾选“Install Npcap in WinPcap API-compatible Mode”)。 * **Linux**:安装 libpcap:`sudo apt-get install libpcap-dev` * **macOS**:安装 libpcap:`brew install libpcap` ### 本地开发设置: 1. 克隆项目并导航到项目目录: cd NetShield 2. 创建并激活 Python 虚拟环境: python -m venv venv # 在 Windows (PowerShell) 上: venv\Scripts\Activate.ps1 # 在 Linux/macOS 上: source venv/bin/activate 3. 安装依赖项: pip install -r requirements.txt 4. 复制环境模板: copy .env.example .env 5. *(可选)* 如果您想重新生成模型,请运行模型训练 pipeline: python -m src.training.train 6. 启动本地开发服务器(默认使用 SQLite): uvicorn src.api.app:app --reload --host 127.0.0.1 --port 8000 ![FastAPI 服务器启动](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/7cd613fa29162940.png) ## 5. Docker 部署设置 NetShield 已完全使用 Docker 和 Docker Compose 进行容器化,编译了所有依赖项并挂载了一个独立的 PostgreSQL 数据库。 ### 启动环境: ``` docker compose up --build ``` 这将启动: * `netshield_db`:暴露端口 `5432` 并具有卷持久性的 PostgreSQL 服务。 * `netshield_web`:暴露端口 `8000` 的 FastAPI 服务(取决于 `netshield_db` 的健康检查)。 ### 在 Docker 内部嗅探主机适配器(仅限 Linux): 默认情况下,Docker 容器在隔离的虚拟网络上运行。要在容器内对主机的实际网络接口运行实时嗅探,请取消注释 `docker-compose.yml` 中的网络配置选项: ``` # network_mode: "host" # cap_add: # - NET_ADMIN ``` ## 6. API 文档与 Swagger 使用 当服务器运行时,可以通过以下地址访问交互式的 OpenAPI Swagger 页面: **[http://localhost:8000/docs](http://localhost:8000/docs)** ![OpenAPI Swagger UI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/c3fdcabd43162941.png) ### REST API endpoint 概述: #### 1. 系统健康状态 * **方法**:`GET` * **路由**:`/` * **响应**: { "status": "healthy", "service": "NetShield NIDS API", "model_loaded": true } ![API 健康响应](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/01e2952ec2162943.png) #### 2. PCAP 流量分析与分类 * **方法**:`POST` * **路由**:`/predict` * **Payload**:Form-Data(`file`:`.pcap` 或 `.pcapng` 格式) * **响应**: { "message": "PCAP processed successfully.", "total_flows": 1, "predictions": [ { "src_ip": "192.168.1.50", "dst_ip": "10.0.0.99", "src_port": 54321, "dst_port": 80, "protocol": 6, "attack_type": "Benign", "confidence": 99.96 } ] } #### 3. 获取存储的检测结果 * **方法**:`GET` * **路由**:`/detections` * **参数**:`limit`(默认值:100),`offset`(默认值:0) #### 4. 获取安全警报 * **方法**:`GET` * **路由**:`/alerts` * **参数**:`limit`(默认值:100),`offset`(默认值:0) #### 5. 列出接口 * **方法**:`GET` * **路由**:`/monitor/interfaces` #### 6. 开始实时嗅探 * **方法**:`POST` * **路由**:`/monitor/start` * **参数**:`interface`(查询字符串) #### 7. 停止实时嗅探 * **方法**:`POST` * **路由**:`/monitor/stop` * **参数**:`interface`(查询字符串) #### API 交互示例 (PowerShell) ![通过 PowerShell 进行 API endpoint 查询](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/58ea2f85dd162944.png) ## 7. 自动化测试套件 NetShield 附带了一整套使用 `pytest` 的单元测试和集成测试,以确保在部署更新时数据库连接、API 路由和机器学习组件能够继续正常工作。 要运行测试: ``` pytest -v ``` ![Pytest 测试执行结果](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/4ab0a89f05162945.png) 测试范围涵盖: 1. **conftest.py**:使用 `StaticPool` 创建内存中 SQLite 实例的共享测试上下文。 2. **test_alerts.py**:验证警报引擎的警报阈值规则。 3. **test_api.py**:测试 API endpoint 路由和请求验证 schema。 4. **test_database.py**:检查 ORM 模型、字段定义和数据库操作。 5. **test_feature_extraction.py**:确认 Scapy 数据包解码和流统计信息。 6. **test_inference.py**:验证模型工件加载和模型预测。 ## 8. 未来改进与生产路线图 * **分布式嗅探**:在目标主机上部署轻量级的数据包捕获代理(例如,基于 Scapy/eBPF),将原始流指标转发到集中的 NetShield 预测微服务。 * **无监督异常检测**:添加 Autoencoder 模型,以检测不适合已知 CIC-IDS2017 监督标签的全新零日威胁模式。 * **通知集成**:扩展警报引擎,将高置信度的检测结果推送到消息 webhook(Slack/Teams)或 syslog 管理器 (SIEM)。 * **IP 封禁操作**:添加主动响应集成,动态编写 iptables/firewall 规则,以丢弃来自被标记为多个恶意警报的 IP 地址的流量。
标签:Apex, AV绕过, FastAPI, PCAP, PostgreSQL, 入侵检测系统, 安全数据湖, 安全规则引擎, 机器学习, 测试用例, 版权保护, 网络安全, 网络流量分析, 请求拦截, 逆向工具, 防御绕过, 隐私保护