nassim-saii/netpol-intelligence

GitHub: nassim-saii/netpol-intelligence

面向 OpenShift/Kubernetes 的六层安全可观测性平台,结合网络流量异常检测、NetworkPolicy 自动合规审计与集群内 LLM 智能分析,实现零数据外泄的智能安全治理。

Stars: 0 | Forks: 0

# NetworkPolicy 智能系统 (NPI) ### 面向 OpenShift 的智能网络异常检测与 Kubernetes NetworkPolicy 合规性 [![OpenShift](https://img.shields.io/badge/OpenShift-4.21.8-EE0000?logo=redhatopenshift&logoColor=white)](https://www.openshift.com/) [![OVN-Kubernetes](https://img.shields.io/badge/CNI-OVN--Kubernetes-blue)](https://github.com/ovn-org/ovn-kubernetes) [![Python](https://img.shields.io/badge/Python-3.11-3776AB?logo=python&logoColor=white)](https://www.python.org/) [![React](https://img.shields.io/badge/React-18-61DAFB?logo=react&logoColor=black)](https://react.dev/) [![Docker Hub](https://img.shields.io/badge/Docker%20Hub-nassimsai-2496ED?logo=docker&logoColor=white)](https://hub.docker.com/u/nassimsai) ## 📌 项目概述 **NPI** 是一个面向 **OpenShift / Kubernetes 集群** 的六层安全可观测性平台,它将实时网络流分析、统计与机器学习异常检测、自动化的 NetworkPolicy 合规性审计,以及一个集群内的 LLM 助手结合在一起,构建为一个位于 **OVN-Kubernetes** 之上的单一智能层。 NPI 无需依赖人工手动检查 `NetworkPolicy` YAML 以寻找安全漏洞,也不必肉眼盯着仪表板寻找可疑流量,而是监控集群原生信号 —— OVN ACL 丢弃日志、实时的 `NetworkPolicy` 对象以及时间序列流量统计 —— 并将其转化为结构化的发现结果、排序后的异常情况以及安全工程师可以立即采取行动的纯英文解释。 本项目是作为 **PFE(毕业工程项目)** 在 **NextStep IT**(突尼斯,突尼斯市)与 **TEK-UP 大学** 合作开发的。 [![dashboard-preview](https://static.pigsec.cn/wp-content/uploads/repos/cas/0e/0e6a8da8dc6723a7c67e481313db03e5450a984f05b2af799647f7f36395bdc2.png)](docs/screenshots/dashboard-overview.png) ## 🎯 目标 - 使用统计和基于机器学习的方法实时检测异常网络流 - 根据安全规则目录自动审计 Kubernetes `NetworkPolicy` 资源 - 将异常和策略违规关联起来,为每个 namespace 生成单一的合规性分数 - 通过集群上的 LLM 提供自然语言解释和修复指导 —— 且数据绝对不会离开集群 - 在运行 OVN-Kubernetes 的真实裸机 OpenShift 集群上演示零信任 NetworkPolicy 设计 ## 🏗️ 架构概述 NPI 构建为 **六个协作层**,作为独立的微服务部署在 `netpol-system` 和 `llm-system` 命名空间中: | 层级 | 组件 | 作用 | |---|---|---| | 1. 可观测性 | Fluent Bit → Loki | 在集群范围内收集 OVN-Kubernetes ACL 流量/丢弃日志 | | 2. 流量处理 | `flow-processor` | 将原始 OVN 丢弃事件转换为结构化流量记录,构建基于命名空间对的基础基线(Welford 在线算法) | | 3. 异常检测 | `anomaly-detector` | 三级检测:Welford/Z-score 统计峰值、确定性规则匹配,以及用于多变量异常值的 Isolation Forest (scikit-learn) | | 4. 策略审计 | `audit-engine` | 通过 Kubernetes API 监控实时 `NetworkPolicy` 对象,并根据 8 条安全规则目录 (NP-001–NP-008) 对其进行评估 | | 5. 智能 | `llm-service` (Ollama / `llama3.2:3b`) | 生成纯英文解释、攻击场景框架和 YAML 修复建议 —— 完全在集群内进行,通过 SSE 流式传输 | | 6. 展示 | `api-gateway` + `netpol-dashboard` (React 18) | REST + SSE API 和实时仪表板:namespace 地图、异常时间轴、合规性报告,以及由 LLM 驱动的聊天助手 | 所有数据均持久化存储在 **TimescaleDB** hypertables 中,并在 **Grafana** 中实时可视化。 [![architecture-diagram](https://static.pigsec.cn/wp-content/uploads/repos/cas/2b/2bd442304fa0f69dbfe64c29a2af4b29ada4d4dfc99dcbeeb174613613edd44b.png)](docs/diagrams/npi-architecture.png) ## 🧰 使用的技术 | 类别 | 技术栈 | |---|---| | 集群 | OpenShift 4.21.8 (裸机 UPI), OVN-Kubernetes CNI | | 后端 | Python 3.11, FastAPI, Kubernetes Python client v29 | | 机器学习/统计 | scikit-learn (Isolation Forest), NumPy, Welford 在线算法 | | LLM | Ollama, `llama3.2:3b` (Q4 量化, 纯 CPU 推理) | | 数据库 | TimescaleDB (PostgreSQL + hypertables) | | 前端 | React 18, Vite, Recharts | | 可观测性 | Fluent Bit, Loki, Prometheus, Grafana 12 | | 策略自动化 | Kyverno (生成/验证 `ClusterPolicy`) | | 构建 | OpenShift `BuildConfig` (`--binary --strategy=docker`) / Docker & Podman | | 容器 | Docker Hub — [`nassimsai`](https://hub.docker.com/u/nassimsai) | ## 🖥️ 集群拓扑 | 节点 | 角色 | IP | 备注 | |---|---|---|---| | `ocp-lb` | Bastion / HAProxy | 10.9.22.229 | 真理来源:`~/netpol-intelligence/` | | `ocp-cp-0` | Control plane | 10.9.22.230 | | | `ocp-w-0` | Storage worker | 10.9.22.231 | Loki, TimescaleDB, `flow-processor` | | `ocp-w-1` | Intelligence worker | 10.9.22.232 | `audit-engine`, `anomaly-detector`, `api-gateway` | | `ocp-w-2` | LLM-dedicated worker | 10.9.22.233 | 12 vCPU, taint `dedicated=llm:NoSchedule`, 运行 Ollama | 域名:`lab.ocp.lan` · 应用:`*.apps.lab.ocp.lan` · 命名空间:`netpol-system`, `llm-system`, `online-boutique` (测试工作负载), `kyverno` ## 🐳 预构建镜像 所有六个服务均作为独立、可移植的镜像发布在 Docker Hub 上 —— 在其他地方重新部署无需 OpenShift `BuildConfig`: | 服务 | 镜像 | 描述 | |---|---|---| | `audit-engine` | [`nassimsai/audit-engine`](https://hub.docker.com/r/nassimsai/audit-engine) | NetworkPolicy 合规性审计引擎 (NP-001–NP-008) | | `flow-processor` | [`nassimsai/flow-processor`](https://hub.docker.com/r/nassimsai/flow-processor) | OVN ACL 丢弃日志 → 流量记录 + 基线构建器 | | `anomaly-detector` | [`nassimsai/anomaly-detector`](https://hub.docker.com/r/nassimsai/anomaly-detector) | Z-score、基于规则和 Isolation Forest 的异常检测 | | `llm-service` | [`nassimsai/llm-service`](https://hub.docker.com/r/nassimsai/llm-service) | 集群内 LLM 编排(Ollama 客户端,SSE 流式传输) | | `api-gateway` | [`nassimsai/api-gateway`](https://hub.docker.com/r/nassimsai/api-gateway) | 用于仪表板的 FastAPI REST + SSE 网关 | | `netpol-dashboard` | [`nassimsai/netpol-dashboard`](https://hub.docker.com/r/nassimsai/netpol-dashboard) | React 18 SPA (多阶段构建 → nginx) | 每个镜像均标记为 `latest` 和 `v1.0-pfe2026`(答辩快照)。 ``` docker pull docker.io/nassimsai/audit-engine:v1.0-pfe2026 ``` ## 🚀 快速开始 ### 选项 A — 使用预构建的 Docker Hub 镜像在 OpenShift 上部署(推荐) ``` git clone https://github.com/nassim-saii/netpol-intelligence.git cd netpol-intelligence # 创建 namespaces oc apply -f deploy/namespaces.yaml # 创建 secrets(先填写您自己的 credentials —— 参见 deploy/secrets.example.yaml) oc apply -f deploy/secrets.yaml # 部署 TimescaleDB、Kyverno policies 及全部六个服务 oc apply -f deploy/ oc rollout status deployment/audit-engine -n netpol-system oc rollout status deployment/flow-processor -n netpol-system oc rollout status deployment/anomaly-detector -n netpol-system oc rollout status deployment/llm-service -n netpol-system oc rollout status deployment/api-gateway -n netpol-system oc rollout status deployment/netpol-dashboard -n netpol-system ``` 完整的分步说明(包括 Ollama 模型拉取、Grafana 仪表板导入和 Kyverno 设置)在 [`NPI_Deployment_Runbook.md`](docs/NPI_Deployment_Runbook.md) 中。 ### 选项 B — 在 OpenShift 中从源代码构建(原始支持气隙部署的流水线) ``` oc new-build --name=audit-engine --binary --strategy=docker -n netpol-system oc start-build audit-engine --from-dir=services/audit-engine/ --follow # 按每个 service 重复执行 —— 参见 docs/NPI_Deployment_Runbook.md,第 3 节 ``` ## 🔍 NetworkPolicy 审计规则目录 | 规则 ID | 严重性 | 检查内容 | |---|---|---| | NP-001 | HIGH | 每个 namespace 是否存在默认拒绝 ingress | | NP-002 | CRITICAL | 过于宽松的 ingress(`{}` 选择器) | | NP-003 | HIGH | 缺少 egress 限制 | | NP-004 | MEDIUM | 缺少 DNS egress 规则(端口 53 **和** 5353) | | NP-005 | MEDIUM | namespace 标签选择器最佳实践 | | NP-006 | LOW | 策略命名/文档规范 | | NP-007 | HIGH | 没有明确允许的跨 namespace 流量 | | NP-008 | CRITICAL | Router ingress 路径缺少双重 namespace 选择器 | 检查结果将转化为每个 namespace 的**合规性分数**:`100 − (CRITICAL×20 + HIGH×10 + MEDIUM×5 + LOW×2)`,评级为 A–F。 ## 🧪 实测性能 | 指标 | 结果 | |---|---| | LLM 首字时间 | 3.8 s | | 完整 LLM 分析(SSE 流完成) | 11.3 s | | Z-score 峰值检测延迟 | 84 s | | 端口扫描检测延迟 | 98 s | | 审计规则评估延迟 | < 10 s | | 端到端测试场景通过 | 8 / 8 | | Isolation Forest — 首次实时检测 | 分数 −0.5004,基于 8 个样本训练 | ## 📂 仓库结构 ``` netpol-intelligence/ ├── services/ │ ├── audit-engine/ ← Policy compliance audit engine │ ├── flow-processor/ ← OVN flow ingestion + baselining │ ├── anomaly-detector/ ← Z-score / rules / Isolation Forest │ └── llm-service/ ← Ollama orchestration (SSE) ├── netpol-p4/ │ ├── api-gateway/ ← FastAPI REST + SSE gateway │ ├── frontend/ ← React 18 dashboard (Vite + nginx) │ └── deploy/ ← Phase 4 manifests ├── deploy/ ← Deployment manifests (all phases) ├── kyverno-policies/ ← ClusterPolicy definitions ├── grafana/ ← Dashboard JSON exports ├── docs/ ← Runbooks, diagrams, screenshots └── README.md ``` ## 📊 仪表板功能 | 标签页 | 组件 | 亮点 | |---|---|---| | Namespace 地图 | `App.jsx` | 实时的每个 namespace 风险概览:pod、流量、活跃违规 | | 异常时间轴 | `AnomalyTimeline.jsx` | 带有严重性颜色显示的实时异常信息流 | | 合规性 | `ComplianceReport.jsx` | 分数圆圈 (0–100 %)、评级 (A–F)、严重性分布 (Recharts) | | 助手 | `Chat.jsx` | 由 `llama3.2:3b` 驱动的流式 SSE 聊天机器人,具备实时集群上下文感知 | ## 📸 截图 | 合规性报告 | AI 助手 | |---|---| | ![compliance](https://static.pigsec.cn/wp-content/uploads/repos/cas/39/39809b6bfe410fa2753dc59ec89f1e5619e66275929c89b781c36cc399f12bc0.png) | ![assistant](https://static.pigsec.cn/wp-content/uploads/repos/cas/82/82ae6cea9deae1d746e0086bab5dd2a5a1ae83875157d4047f6965c7ec542f5d.png) | | Grafana — 策略违规 | 异常时间轴 | |---|---| | ![grafana](https://static.pigsec.cn/wp-content/uploads/repos/cas/6f/6f34dd677463e0ab089ad274334cf44adc289135cd134a55a75d1d823b373e46.png) | ![timeline](https://static.pigsec.cn/wp-content/uploads/repos/cas/76/76bd683be54b01bd8c4b88f24b4a4b9e43aa6a2e858e25ac82541eb05b4e2412.png) | ## ⚠️ 已知操作行为 - `oc start-build` **不会**自动循环运行的 pod —— 必须始终随后执行 `oc rollout restart` - Ollama 部署策略必须为 `Recreate`(两个需要 10+ vCPU 的 pod 无法在一个节点上共存) - OVN-Kubernetes 会在 post-DNAT 阶段评估 DNS —— 需在 egress 规则中同时允许端口 53 和 5353 - OCP Router ingress NetworkPolicy 需要**两**个独立的 `from:` 条目(namespace-name 选择器*和* `policy-group=ingress`) 完整列表见 [`docs/NPI_Deployment_Runbook.md`](docs/NPI_Deployment_Runbook.md)。 ## 👨‍🎓 作者与指导 - **Nassim Saii** — TEK-UP 大学网络与系统安全工程专业大四学生 **企业指导教师:** Mouna Belghith — NextStep IT 云与基础设施工程师\ **学术指导教师:** Khaoula Ammar — TEK-UP 大学 班级:网络与系统安全工程 · 学年:2025–2026 ## 📜 许可证 本项目作为 PFE(毕业工程项目)的一部分,出于学术目的而开发。除非另有说明,保留所有权利。
标签:AI风险缓解, DLL 劫持, 大语言模型, 安全可观测性, 异常检测, 版本控制, 网络流量分析, 逆向工具, 防御绕过