styliteag/opm

GitHub: styliteag/opm

一个集成端口扫描、漏洞检测与告警的分布式监控平台,解决多站点网络可视与安全合规问题。

Stars: 0 | Forks: 0

# STYLiTE Orbit Monitor 用于安全目的、分布式网络端口扫描和监控系统,支持多站点扫描器、告警和 Web 仪表板。 ## 功能 - **端口扫描**:基于 Masscan 和 Nmap 的大规模端口扫描与服务识别 - **NSE 漏洞扫描**:Nmap 脚本引擎集成,用于 CVE 检测和漏洞评估 - **22 种内置扫描配置文件**:快速扫描、完整漏洞扫描、Web 应用、基础设施、SSL/TLS 审计 - **独立检查**:EternalBlue、Shellshock、Heartbleed、SQL 注入、XSS 等 - **克隆并自定义配置文件或从头创建新配置** - **自动从扫描结果提取 CVE 并生成告警** - **SSH 安全分析**:自动 SSH 服务器安全审计,包括: - 认证方法检测(publickey、password、keyboard-interactive) - 弱加密算法和密钥交换算法检测 - SSH 版本跟踪与过期版本告警 - 扫描间配置回归检测 - **多站点扫描**:在不同位置部署扫描器代理 - **Greenbone(GVM)漏洞扫描**:可选的 Greenbone 社区版集成,用于全面的漏洞评估 - 通过 `python-gvm` Unix 套接字桥接连接——无需 Web UI - 扫描配置预设:完整且快速、完整且深入、发现、系统发现 - 结果包含 CVSS 分数、CVE 映射、解决方案建议和质量检测 - 对中高严重性发现自动生成告警 - **告警**:针对新端口、策略违规、SSH 安全问题、NSE 查找到的漏洞以及 GVM 漏洞的可配置告警 - **合规报告**:导出 SSH 安全合规的 PDF 和 CSV 报告 - **Web 仪表板**:支持深色模式的 React 基础 UI ## 快速开始 ### 先决条件 - Docker 和 Docker Compose - Git ### 开发环境设置 1. 克隆仓库: git clone cd opm 2. 复制环境文件并配置: cp .env.example .env # 使用你喜欢的设置编辑 .env 3. 启动开发环境: docker compose -f compose-dev.yml up --build 4. 访问服务: - 前端: http://localhost:5173 - 后端 API: http://localhost:8000 - API 文档: http://localhost:8000/docs - 数据库: localhost:3306 ### 服务 | 服务 | 端口 | 描述 | |--------|------|------| | frontend | 5173 | React + Vite Web 仪表板 | | backend | 8000 | FastAPI REST API | | db | 3306 | MariaDB 数据库 | | scanner | - | 网络扫描器代理(Masscan、Nmap、NSE、Nuclei、SSH 探针、GVM) | ### 开发 开发环境使用绑定挂载以实现热重载: - `./backend/src` -> `/app/src`(后端) - `./frontend/src` -> `/app/src`(前端) - `./scanner/src` -> `/app/src`(扫描器) 对源文件的更改将自动触发重载。 ### 运行测试 #### 后端测试 后端拥有一个使用 pytest 并支持异步的全面测试套件。 ``` cd backend # 安装开发依赖(如尚未安装) uv pip install -e ".[dev]" # 运行所有测试 .venv/bin/pytest tests/ -v # 运行特定测试文件 .venv/bin/pytest tests/test_auth.py -v # 运行覆盖率测试 .venv/bin/pytest tests/ --cov=app --cov-report=term-missing ``` 测试类别: - `test_security.py` - 密码哈希、JWT 令牌处理 - `test_auth.py` - 认证端点 - `test_users.py` - 用户管理 - `test_networks.py` - 网络 CRUD 操作 - `test_scans.py` - 扫描生命周期管理 - `test_alerts.py` - 告警操作 #### 前端测试 前端使用 Vitest 和 React Testing Library。 ``` cd frontend # 安装依赖(如尚未安装) npm install # 运行所有测试 npm test # 以监听模式运行测试 npm run test:watch # 运行覆盖率测试 npm run test:coverage ``` 测试类别: - `api.test.ts` - API 工具、错误处理、fetch 封装 - `scanEstimate.test.ts` - 扫描估算计算(CIDR 解析、端口计数) - `scanLogs.test.ts` - 日志格式化和日期解析工具 - `formatRelativeTime.test.ts` - 相对时间格式化(例如 "5m ago") - `ThemeContext.test.tsx` - 主题提供者、localStorage 持久化 - `AuthContext.test.tsx` - 认证 Hook、登录/注销流程 - `ProtectedRoute.test.tsx` - 路由保护组件 ### 环境变量 请参阅 `.env.example` 获取所有可用配置选项。 关键变量: - `JWT_SECRET`:用于 JWT 令牌签名的密钥(在生产环境中更改!) - `ADMIN_EMAIL` / `ADMIN_PASSWORD`:初始管理员凭据 - `SMTP_*`:用于告警的电子邮件配置 ## 运行扫描器代理 扫描器代理可以部署在与主 STYLiTE Orbit Monitor 服务器不同的主机上。这实现了从多个位置进行分布式扫描。 ### 先决条件 - 已在扫描器主机上安装 Docker - 来自主服务器的 API 密钥(通过 Web 仪表板或 API 创建) - 与主服务器后端 API 的网络连接 ### 选项 1:Docker Run 首先,从项目根目录构建扫描器镜像: ``` docker build -f scanner/Dockerfile --build-arg VERSION=$(cat VERSION) -t opm-scanner:latest scanner ``` 或使用注册表中的预构建镜像: ``` docker pull your-registry/opm-scanner:latest ``` 然后运行扫描器: ``` docker run -d \ --name opm-scanner \ --cap-add=NET_RAW \ --cap-add=NET_ADMIN \ --restart unless-stopped \ -e BACKEND_URL=https://your-server.com:8000 \ -e API_KEY=your-api-key-here \ -e POLL_INTERVAL=60 \ -e LOG_LEVEL=INFO \ opm-scanner:latest ``` **必需的环境变量:** - `BACKEND_URL`:主服务器后端 API 的完整 URL(例如 `https://monitor.example.com:8000`) - `API_KEY`:从主服务器获取的扫描器 API 密钥 **可选的环境变量:** - `POLL_INTERVAL`:任务轮询间隔(秒,默认:60) - `LOG_LEVEL`:日志级别 - DEBUG、INFO、WARNING、ERROR(默认:INFO) ### 选项 2:Docker Compose 1. 进入扫描器目录: cd scanner 2. 使用你的配置创建 `.env` 文件: cat > .env << EOF BACKEND_URL=https://your-server.com:8000 API_KEY=your-api-key-here POLL_INTERVAL=60 LOG_LEVEL=INFO EOF 3. 启动扫描器: docker compose up -d 4. 查看日志: docker compose logs -f 扫描器将自动连接到主服务器并开始处理扫描任务。 **注意:** 扫描器需要 `NET_RAW` 和 `NET_ADMIN` 权限以执行网络扫描。这些权限在 compose 文件中已自动配置。 ## 添加 Greenbone(GVM)漏洞评估(可选) GVM 通过 [Greenbone 社区版](https://greenbone.github.io/docs/latest/) 提供完整的漏洞评估能力。扫描器镜像包含 GVM 支持——当挂载 GVM 套接字时,扫描器会自动识别为 **unified** 并同时处理标准端口扫描和 Greenbone 漏洞评估任务。 ### 扫描器类型 扫描器在启动时自动检测其能力: | 类型 | 条件 | 能力 | |------|------|------| | **standard** | 未挂载 GVM 套接字 | Masscan、Nmap、NSE、Nuclei、SSH 探针 | | **unified** | 挂载 GVM 套接字 + 存在 masscan | 所有标准工具 + GVM 漏洞扫描 | | **gvm** | 挂载 GVM 套接字、无 masscan(`Dockerfile.gvm`) | 仅 GVM 漏洞扫描(轻量级桥接) | 单个 `Dockerfile` 同时生成标准版和统一版扫描器——区别仅在运行时(是否挂载 GVM 套接字)。 ### 先决条件 - 主 OPM 堆栈正在运行(`compose.yml` 或 `compose-dev.yml`) - 在 OPM 中创建 Scanner 记录(通过 Web 仪表板 → Scanners)并记录 API 密钥 - 足够的磁盘空间(首次同步约需 5 GB) ### 设置 1. 设置扫描器 API 密钥: export GVM_SCANNER_API_KEY=your-api-key-here 2. 启动 GVM 堆栈: docker compose -f compose-gvm.yml up -d 3. 等待源同步完成(首次启动耗时较长): docker compose -f compose-gvm.yml logs -f gvmd 4. 设置 GVM 管理员: docker compose exec --user gvmd gvmd gvmd --user=admin --new-password=admin # 或:docker compose -f compose-gvm.yml exec --user gvmd gvmd gvmd --user=admin --new-password=admin 5. 在 OPM Web 仪表板中,将网络的扫描器类型设置为 **Greenbone**,并选择扫描配置(例如 *完整且快速*)。 ### GVM Web UI(GSA) 组成堆栈包含 Greenbone 安全助理(GSA)Web 界面,可直接访问 GVM: ``` docker compose -f compose-gvm.yml up -d gsa ``` 访问地址 **http://localhost:9392** — 使用步骤 4 中设置的凭据登录(默认:`admin`/`admin`)。 GSA 端口可通过 `GVM_GSA_PORT` 环境变量修改。 ### 环境变量 | 变量 | 默认值 | 描述 | |------|--------|------| | `GVM_SCANNER_API_KEY` | *(必需)* | 来自 OPM 的扫描器 API 密钥 | | `GVM_BACKEND_URL` | `http://backend:8000` | OPM 后端 URL | | `GVM_POLL_INTERVAL` | `60` | 任务轮询间隔(秒) | | `GVM_LOG_LEVEL` | `INFO` | 日志级别 | | `GVM_USER` | `admin` | GVM 管理员用户名 | | `GVM_PASSWORD` | `admin` | GVM 管理员密码 | | `GVM_GSA_PORT` | `9392` | GSA Web UI 端口 | ### 生产环境 对于生产环境,请编辑 `compose-gvm.yml` 并替换 `opm-scanner-gvm` 上的构建/镜像行: ``` # image: styliteag/opm-scanner:latest # uncomment this (same image, unified via socket) # build: ... # comment out ``` 然后设置 `GVM_BACKEND_URL=http://app:80`(生产服务名称)。 ### 架构 `compose-gvm.yml` 中的扫描器使用与标准扫描器相同的镜像,但挂载了 GVM 套接字。它通过 Unix 套接字与 GVM 通信,并通过 REST API 与 OPM 通信。 ``` OPM Backend <──REST──> opm-scanner (unified) <──Unix socket──> gvmd ──> ospd-openvas ``` ## 架构 ``` +-------------+ +---------+ +----------+ | Frontend |<--->| Backend |<--->| Database | | (React/Vite)| | (FastAPI)| | (MariaDB)| +-------------+ +---------+ +----------+ ^ | +----------+----------+----------+ | | | | +--------+ +--------+ +--------+ +--------+ |Scanner1| |Scanner2| |Scanner3| |Scanner4| | (std) | | (std) | |(unified)| | (gvm) | +--------+ +--------+ +--------+ +--------+ (Distributed scanners) | | +----------+ | | gvmd |<---+ +----------+ ``` ## 文档 有关完整文档,请参阅 [docs 文件夹](docs/README.md): - **[API 参考](docs/README.md#api-reference)** - 完整的 API 文档 - **[扫描器文档](docs/README.md#scanner-documentation)** - 部署和操作指南 - **[开发文档](docs/README.md#development)** - 设置和贡献指南 ## 许可证 MIT
标签:Claude, CSV报告, CTI, CVE检测, CVSS评分, Dark Mode, Docker, Docker Compose, EternalBlue, GET/POST请求分析, GraphQL引擎检测, Greenbone, GVM, Heartbleed, IOC 共享, Masscan, Nmap, NSE, PDF报告, Python, python-gvm, React, Shellshock, SOC, SSH安全, SSH审计, SSL/TLS审计, Syscalls, Unix Socket, Web仪表盘, XSS, 分布式扫描, 加密算法检测, 合规报告, 多站点扫描, 子域名侦测, 安全合规, 安全防御评估, 弱密码检测, 数据统计, 无后门, 漏洞情报, 监控平台, 端口扫描, 网络代理, 网络扫描器, 自动告警, 虚拟驱动器, 认证方法检测, 请求拦截, 质量检测, 配置回归检测