Krishnanand2517/llm-enhanced-pfsense-scripts

GitHub: Krishnanand2517/llm-enhanced-pfsense-scripts

在 pfSense 防火墙上通过 XGBoost 机器学习分类可疑流量,并利用 LLM 自动生成和部署 Suricata 检测规则的自适应 IDS 管道。

Stars: 0 | Forks: 0

# LLM辅助的软件定义下一代防火墙 (NxGFW) 一个端到端管道,用于在 pfSense 防火墙上监控实时 Suricata 流量,使用快速机器学习模型(XGBoost)分类可疑流量,并自动使用 LLM 和 RAG 系统生成和部署新的 Suricata 检测规则。 ## 使用的技术 | 类别 | 技术 | 作用 | | ----------------------- | -------------------------------------------------------------------- | --------------------------------------------------------------- | | **防火墙 / IDS** | [pfSense](https://www.pfsense.org/) | 网络网关以及托管 Suricata 的设备/虚拟机 | | **防火墙 / IDS** | [Suricata](https://suricata.io/) | 生成 EVE JSON 流量遥测;执行已部署的规则 | | **ML:检测** | [XGBoost](https://xgboost.readthedocs.io/) | 二分类和多分类流量分类器 | | **ML:检测** | [scikit-learn](https://scikit-learn.org/) | StandardScaler、PCA、训练/测试工具 | | **ML:聚类** | [HDBSCAN](https://hdbscan.readthedocs.io/) | 可疑流量的密度聚类 | | **RAG:向量** | [ChromaDB](https://www.trychroma.com/) | 攻击知识和流量摘要的持久化向量存储 | | **RAG:嵌入** | [sentence-transformers](https://www.sbert.net/) (`all-MiniLM-L6-v2`) | 编码文档和查询以进行相似性检索 | | **LLM:OpenAI** | [OpenAI API](https://platform.openai.com/) (`gpt-4o-mini` 默认) | 用于规则生成的威胁评估散文 | | **LLM:Groq** | [Groq API](https://groq.com/) | 替代 LLM 提供商(更快、更低成本) | | **训练数据** | [UNSW-NB15](https://research.unsw.edu.au/projects/unsw-nb15-dataset) | 用于训练分类器的带标签网络流量数据集 | | **数据** | [pandas](https://pandas.pydata.org/) / [NumPy](https://numpy.org/) | 特征工程和数据操作 | | **序列化** | [joblib](https://joblib.readthedocs.io/) | 模型和缩放器持久化 | | **传输** | SSH / `subprocess` | 从 pfSense 流式传输 EVE 日志;远程部署规则 | | **pfSense 集成** | PHP (`inject_rule.php`) | 通过 pfSense 本机配置 API 写入规则 | | **编排** | Bash (`complete_pipeline.sh`) | 将所有阶段连接在一起;读取 `.env` 配置 | ## 截图 ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/6fb9087203164247.png) _威胁检测_ ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/4a47a0a22b164255.png) _规则生成_ ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/11fbe5f13f164303.png) _发起攻击_ ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/e98b924ab0164311.png) _规则已应用于 pfSense_ ## 工作原理 管道有五个阶段,由 `complete_pipeline.sh` 编排: ``` pfSense EVE log │ ▼ 1. Detect (detector_enhanced.py) │ suspicious flows → JSONL ▼ 2. Cluster (cluster_flows.py) │ attack clusters → JSON ▼ 3. RAG ingest (rag_pipeline.py) │ vectors → ChromaDB ▼ 4. Generate rules (generate_rules.py) │ Suricata rules → JSON ▼ 5. Deploy (deploy_rules.py + inject_rule.php) │ ▼ pfSense custom.rules (live) ``` ### 阶段 1:ML 检测(`detector_enhanced.py`) 通过 SSH 流式传输 Suricata 的 `eve.json` 日志,并实时运行两个 XGBoost 分类器: - **二分类器** — 该流量是否恶意? - **多分类器** — 它属于九种 UNSW-NB15 攻击类别中的哪一种?(侦察、DoS、漏洞利用、后门、Shellcode、模糊器、分析、通用、蠕虫) 滑动窗口 `FlowContextCache` 复制了 UNSW-NB15 中 Suricata 不会每流发送的 `ct_srv_src` 和 `ct_dst_ltm` 连接表特征。超过可配置概率阈值的流量将被写入 JSONL 文件供下一阶段使用。 ### 阶段 2:聚类(`cluster_flows.py`) 使用 PCA 降维特征矩阵上的 **HDBSCAN** 按攻击模式对可疑流量进行分组。攻击类型标签来自多分类模型,作为加权信号包含在内,以便同一类别的流量倾向于聚集在一起。每个聚类都会获得统计摘要(主要协议、端口分布、数据包速率等),成为 LLM 的输入。 ### 阶段 3:RAG 摄入(`rag_pipeline.py`) 在 **ChromaDB** 中存储两种类型的文档: - **策划的攻击知识**(`attack_knowledge.py`):针对九种攻击类别的 Suricata 兼容检测模式的手写知识库,在初始化时一次性填充。 - **观察到的流量聚类**:阶段 2 生成的摘要。 使用 `all-MiniLM-L6-v2` 句子嵌入。在规则生成时,通过余弦相似度检索相关知识文档并注入 LLM 提示词。 ### 阶段 4:规则生成(`generate_rules.py`) 将聚类摘要与检索到的 RAG 上下文相结合,并向上下文发送提示词到 LLM(OpenAI 或 Groq)。LLM 的工作**仅限散文**:解释威胁,建议有效载荷字符串,并推荐警报阈值。然后 Python 使用轻量级关键词提取解析该散文,并**确定性**地从模板构建 Suricata 规则,确保语法有效性。每条规则至少包含一个 `content` 或 `pcre` 匹配,以便它在有效载荷上触发,而不仅仅是流量速率。 第二种独立模式(`generate_knowledge_rules.py`)完全跳过 ML 路径,直接要求 LLM 从策划的知识库生成规则,以捕获异常检测器从结构上无法看到的基于内容的攻击(例如 Log4Shell、SMB 漏洞利用、IRC 后门)。 ### 阶段 5:部署(`deploy_rules.py` + `inject_rule.php`) 1. `deploy_rules.py` 在触碰防火墙之前在本地验证每条规则(检查 `msg:`、`sid:`、`rev:`、`classtype`、`flow` 关键词)。 2. 验证后的规则通过 SSH 发送到 pfSense,其中 `inject_rule.php` 使用 pfSense 自己的配置 API 将规则追加到接口的 `custom.rules` 文件,然后通知 Suricata 重新加载。 3. 为每次部署写入带时间戳的审计日志。 ## 训练模型 分类器使用 **UNSW-NB15** 数据集训练: ``` python3 train_xgb.py # trains binary + multi-class models, saves to ../models/ python3 test_xgb.py # evaluates on the test split, writes plots to ../results/ ``` 由于 UNSW-NB15 是在实验室中捕获的,特征分布可能与您的网络不匹配。提供了两种适配工具: - **`refit_scaler.py`**:仅在良性实时流量样本上重新拟合 StandardScaler,无需重新训练 XGBoost 模型。快速领域适应,无需标签。 - **`label_flows.py`**:交互式 CLI,用于手动标记实时可疑流量(`y` / `n` / `s` / `q`)。标记的输出可以反馈给 `train_xgb.py --retrain-from-labels` 以进行增量模型更新。 ## 配置 所有运行时参数从 `.env` 文件读取: | 变量 | 默认 | 描述 | | -------------------- | ------------------ | ---------------------------------- | | `PFSENSE_IP` | `192.168.1.1` | pfSense 管理 IP | | `PFSENSE_USER` | `root` | SSH 用户 | | `SSH_KEY` | `~/pfsense_key` | SSH 私钥路径 | | `SURICATA_INTERFACE` | `suricata_em11523` | Suricata 日志目录名称 | | `THRESHOLD` | `0.5` | 恶意流量概率截止值 | | `CONTEXT_WINDOW` | `60` | 滑动窗口大小(秒) | | `MIN_CLUSTER_SIZE` | `3` | 形成聚类的最小流量数 | | `LLM_PROVIDER` | `openai` | `openai` 或 `groq` | | `LLM_MODEL` | `gpt-4o-mini` | 所选提供商的模型名称 | | `OPENAI_API_KEY` | — | 使用 OpenAI 时必需 | | `GROQ_API_KEY` | — | 使用 Groq 时必需 | ## 依赖项 - Python 3.10+:`xgboost`、`scikit-learn`、`hdbscan`、`chromadb`、`sentence-transformers`、`pandas`、`numpy`、`joblib`、`requests` - 安装了 Suricata 包并 SSH 的 pfSense - OpenAI 或 Groq API 密钥 - PHP 脚本 `inject_rule.php` 必须存在于 pfSense 主机上
标签:AMSI绕过, Apex, ChromaDB, DLL 劫持, EVE JSON, GPT-4, HDBSCAN, IPS, LLM, Metaprompt, OpenAI, Petitpotam, pfSense, RAG, scikit-learn, sentence-transformers, Suricata, Sysdig, Unmanaged PE, XGBoost, 下一代防火墙, 入侵检测系统, 内存规避, 向量数据库, 大语言模型, 威胁检测, 威胁检测与响应, 安全数据湖, 应用安全, 异常检测, 机器学习, 检索增强生成, 现代安全运营, 结构化查询, 网络安全, 网络流量分析, 聚类分析, 自动化安全, 自动化规则生成, 自适应IDS, 规则自动化, 逆向工具, 速率限制, 隐私保护