meriembarhi/NetPulse-Shield
GitHub: meriembarhi/NetPulse-Shield
一个结合 Isolation Forest 异常检测与 RAG/LLM 自动修复建议的本地网络安全工作流系统。
Stars: 0 | Forks: 0
# NetPulse-Shield
NetPulse-Shield 是一个用于异常检测、告警存储、修复建议和报告的本地网络安全工作流。本仓库支持以三种方式运行该系统:
- 通过 `dashboard.py` 进行交互式仪表盘操作
- 通过 `pipeline.py` 进行一键式自动化
- 使用 Redis/RQ 和 RAG 层进行后台建议生成
当前的实现具有标签感知能力,当存在标签时会自动调整 contamination,在没有标签时也能安全回退。
## 项目功能
1. 清洗原始 UNSW-NB15 数据。
2. 选择固定的、领域指导的特征集。
3. 训练或加载 Isolation Forest 检测器。
4. 标记异常并持久化告警。
5. 通过 RAG 或可选的 LLM 路径生成修复建议。
6. 在 Streamlit 仪表盘、CSV 输出和 SQLite 数据库中展示结果。
## 流水线模式
### 1. 数据准备流水线
```
raw UNSW-NB15 CSV
-> clean_data.py
-> feature selection + filtering
-> data/final_project_data.csv
```
目的:
- 保持项目输入模式一致
- 将原始数据集缩减为检测器实际使用的字段
- 使下游检测器具有可预测性和可重复性
当前选择的特征集:
```
sttl, dttl, sbytes, dbytes, Sload, Dload, sloss, dloss, Spkts, Dpkts, tcprtt, Sjit, Label
```
### 2. 检测流水线
```
data/final_project_data.csv
-> detector.py
-> preprocess()
-> train() or load saved model
-> analyze()
-> anomaly score + anomaly flag
-> alerts.csv + alerts.db
```
目的:
- 标准化数值特征
- 拟合或重用 Isolation Forest 模型
- 检测可疑流量
- 保存机器可读和人类可读的输出
### 3. Contamination 选择流水线
```
Label column present
-> use real attack rate
No usable labels
-> tune_contamination() on validation split
If tuning fails
-> fallback contamination = 0.05
```
目的:
- 避免为每个数据集硬编码一个异常率
- 在存在标签时优先使用标签
- 当标签可用但需要优化时,使用基于 F1 的调优
- 即使在缺少标签的情况下也能保持系统正常工作
### 4. 修复与建议流水线
```
alert row
-> tasks.py
-> advisor.py
-> knowledge_base.py + embeddings.py
-> FAISS retrieval or TF-IDF fallback
-> remediation text
-> alerts.db audit/update
```
目的:
- 将原始异常转化为对分析人员友好的指导
- 使用语义检索而不是仅仅依赖关键字匹配
- 通过 TF-IDF 回退保持离线功能可用
### 5. 可选的 LLM 修复流水线
```
alert / anomaly text
-> remediator.py or auto_remediator.py
-> Ollama / Llama 3
-> structured security report
-> Security_Report.txt
```
目的:
- 生成更具创造性、自由格式的修复说明
- 在 Ollama 可用时提供 Cisco 风格的指导
- 提供一条独立于 RAG 系统的路径
## 运行时编排
### 交互式仪表盘流程
```
open dashboard.py
-> auto-run detection on page load
-> tune contamination if Label exists
-> run analysis
-> write alerts.csv
-> persist alerts in alerts.db
-> allow advice generation through Redis/RQ or sync fallback
```
### 批量流水线流程
```
python pipeline.py
-> validate CSV
-> run detection
-> save alerts.csv
-> generate Security_Report.txt
```
### 后台工作进程流程
```
dashboard.py
-> queue advice job
-> Redis broker
-> rq worker advisor
-> tasks.generate_advice_for_alert()
-> advisor.py RAG lookup
-> write advice to alerts.db
```
## 仓库结构与用途
- `clean_data.py` 准备检测器使用的最终数据集。
- `detector.py` 训练、加载并运行异常检测器。它保存以下内容:
- `models/netpulse_model.joblib`
- `models/netpulse_model_scaler.joblib`
- `models/netpulse_model_features.joblib`
- `models/netpulse_model_metadata.json`
- `dashboard.py` 是 Streamlit UI。它现在在加载时会自动运行分析,并支持手动重新运行和生成建议。
- `pipeline.py` 是用于完全自动化和报告生成的标准 CLI。
- `db.py` 定义了 `Alert` 和 `AuditLog` 的 SQLite 持久化。
- `tasks.py` 包含用于异步建议生成的 RQ 任务函数。
- `advisor.py` 实现了 RAG 风格的修复顾问。
- `embeddings.py` 构建向量存储并处理嵌入回退。
- `knowledge_base.py` 存储内置的修复知识。
- `remediator.py` 和 `auto_remediator.py` 提供可选的 Ollama / 基于 LLM 的修复路径。
- `system_utils.py` 提供 Redis 健康检查、队列统计信息和入队辅助工具。
- `docker-compose.yml` 定义了 `redis`、`web` 和 `worker` 服务。
- `Dockerfile` 构建 Streamlit 应用程序镜像。
- `tests/` 包含检测器和流水线测试。
## 重要输出
- `data/final_project_data.csv` - 检测器使用的已清理数据集
- `alerts.csv` - 由检测器或流水线写入的顶部告警
- `alerts.db` - 用于告警和审计日志的 SQLite 数据库
- `models/` - 保存的模型组件和元数据
- `Security_Report.txt` - 从流水线或 LLM 路径生成的修复报告
## 主要模块工作原理
### `clean_data.py`
目的:将原始数据转换为稳定的 12 特征数据集。
重要性:
- 保持检测器模式可预测
- 减少未使用的原始列产生的噪音
- 确保模型每次都在相同的核心输入上进行训练
### `detector.py`
目的:检测异常并持久化已训练的检测器。
行为:
- 如果可用,则加载现有的模型组件
- 在训练期间发现数值特征
- 保存训练时使用的确切特征列表
- 根据标签、调优或回退选择 contamination
- 为每行写入异常分数和异常标志
### `advisor.py`
目的:将告警描述转换为修复指导。
行为:
- 加载知识库
- 将其分割成块
- 构建 FAISS 向量存储
- 检索最相关的修复片段
- 如果检索失败,则回退到通用建议
### `embeddings.py`
目的:为语义搜索提供向量嵌入。
行为:
- 首先尝试 HuggingFace sentence-transformer 嵌入
- 如果需要,回退到本地 TF-IDF 嵌入
- 保持 RAG 层可离线使用
### `tasks.py`
目的:在后台运行建议生成。
行为:
- 从数据库加载告警
- 创建简短的异常描述
- 调用 `NetworkSecurityAdvisor`
- 存储建议和审计日志条目
### `dashboard.py`
目的:提供面向用户的控制界面。
行为:
- 在页面加载时自动运行检测
- 允许手动重新运行分析
- 当 Redis 可用时,将建议任务入队
- 当 Redis 不可用时,回退到同步建议生成
### `pipeline.py`
目的:以非交互方式运行完整项目。
行为:
- 验证输入的 CSV
- 运行异常检测
- 保存告警
- 生成安全报告
- 是自动化、CI 和批量执行的最佳入口
### `db.py`
目的:在 SQLite 中存储告警和审计日志。
数据表:
- `Alert` 存储每个异常、其分数、其序列化特征以及建议字段。
- `AuditLog` 存储用户和工作进程的操作,以保证可追溯性。
## 部署选项
### 本地开发
```
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
python clean_data.py
streamlit run dashboard.py
```
### 批量自动化
```
python pipeline.py
```
可选标志:
- `--no-persist` - 跳过数据库写入
- `--alerts-csv ` - 更改告警输出路径
- `--report ` - 更改报告输出路径
### Docker Compose 部署
```
docker-compose up --build
```
服务:
- `redis` - 队列代理
- `web` - Streamlit 仪表盘
- `worker` - 后台 RQ 工作进程
### 可选 Ollama / LLM 路径
```
ollama serve
python remediator.py
python auto_remediator.py
```
## 依赖项
核心包来自 `requirements.txt`:
- `scikit-learn`、`pandas`、`numpy`、`joblib` 用于检测
- `streamlit`、`plotly` 用于仪表盘
- `SQLAlchemy` 用于 SQLite 持久化
- `langchain`、`langchain-community`、`langchain-core`、`langchain-text-splitters` 用于 RAG 编排
- `sentence-transformers` 和 `faiss-cpu` 用于语义检索
- `redis` 和 `rq` 用于后台作业
- `ollama` 用于可选的本地 LLM 路径
## 推荐使用方式
1. 如果你想要最简单的完整运行,请使用 `python pipeline.py`。
2. 如果你想要交互式分类,请使用 `streamlit run dashboard.py`。
3. 如果你想要后台建议生成,请运行 Redis 和 RQ worker。
4. 如果你仅想要 LLM 路径,请启动 Ollama 并运行 `remediator.py` 或 `auto_remediator.py`。
## 测试与验证
```
pytest tests/ -q
ruff check .
```
## 故障排除
- 如果 `alerts.csv` 缺失,请运行 `python detector.py` 或 `python pipeline.py`。
- 如果 contamination 调优失败,检测器将回退到 `0.05`。
- 如果 Redis 不可用,仪表盘将使用同步建议生成。
- 如果 Ollama 不可用,RAG 顾问仍能工作,LLM 路径将被直接跳过。
- 如果检测器提示模式不匹配,请重新生成 `data/final_project_data.csv` 并重新训练,以便保存的特征列表与输入匹配。
## 许可证
MIT 许可证
标签:AI安全, AI风险缓解, Apex, Chat Copilot, DLL 劫持, F1 Score, IP 地址批量处理, Isolation Forest, Kubernetes, Llama 3, LLM, Python, RAG, Redis, RQ, SOAR, SQLite, Streamlit, Unmanaged PE, UNSW-NB15, 仪表盘, 告警 Remediation, 大语言模型, 孤立森林, 安全报告, 异常分数, 异常检测, 搜索引擎查询, 数据清洗, 数据科学, 无后门, 无监督学习, 智能安防, 机器学习, 检索增强生成, 污点率, 流数据处理, 漏洞修复建议, 特征选择, 网络安全, 网络安全自动化, 网络流量分析, 访问控制, 请求拦截, 资源验证, 逆向工具, 防御绕过, 隐私保护