TXT0Law/OrbiCheck

GitHub: TXT0Law/OrbiCheck

OrbiCheck 是一个全栈式 Web 信息侦察与持续监控平台,能够自动生成包含 IP、DNS、SSL 及威胁情报的评估报告并支持页面变更告警。

Stars: 4 | Forks: 0

# Or里兰卡 [![CI](https://github.com/TXT0Law/OrbiCheck/actions/workflows/ci.yml/badge.svg)](https://github.com/TXT0Law/OrbiCheck/actions/workflows/ci.yml) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [![Version](https://img.shields.io/badge/version-0.1.0-green.svg)]() 一个外部视角的网站安全评估平台。提供一个 URL,即可获取一份完整的侦察报告——涵盖 IP、DNS、SSL/TLS、HTTP 头、技术栈、威胁情报以及 30 多个其他模块——全部基于外部视角。 ## 目录 - [功能](#features) - [截图](#screenshots) - [扫描](#scan) - [监控](#monitoring) - [告警](#alerts) - [报告](#reports) - [架构](#architecture) - [快速开始](#getting-started) - [前置条件](#prerequisites) - [克隆仓库](#clone-the-repository) - [前端设置](#frontend-setup) - [后端设置](#backend-setup) - [扫描服务设置](#scan-service-setup) - [数据库迁移](#database-migration) - [启动所有服务](#start-all-services) - [Docker 部署](#docker-deployment) - [一键启动](#one-command-start) - [生产模式](#production-mode) - [Docker 服务](#docker-services) - [DigitalOcean App Platform](#digitalocean-app-platform) - [环境变量](#environment-variables) - [API 文档](#api-documentation) - [测试](#testing) - [技术栈](#tech-stack) - [项目结构](#project-structure) - [致谢](#acknowledgments) - [贡献](#contributing) - [许可证](#license) ## 功能 **OSINT 侦察** — 30 多个自动化模块,从外部探测目标 URL: | 类别 | 模块 | |----------|---------| | 网络 | IP 地理位置、DNS 记录、DNS 服务器、TXT 记录、WHOIS、traceroute、开放端口 | | SSL / TLS | 证书链分析、加密套件、协议版本 | | 安全 | HTTP 安全头、HSTS、DNSSEC、WAF 检测、security.txt | | 内容 | HTTP 头、cookies、robots.txt、站点地图、关联页面 | | 威胁情报 | 恶意软件/钓鱼检测、黑名单查询 | | 站点概况 | 技术栈(Wappalyzer + 头指纹)、社交标签、质量指标、截图 | | 其他 | Wayback Machine 归档、邮件配置(SPF/DKIM/DMARC)、全球排名、碳足迹 | **实时进度** — 基于 SSE 的实时更新,每个模块完成时即时反馈。 **风险分析** — 基于原始扫描数据自动计算严重性评分和类别摘要。 **持续监控** — 随时间跟踪正常运行时间、内容变更、SSL 过期和视觉差异。 **URL 分组** — 组织目标并在多个 URL 上运行批量扫描。 ## 截图 按区域分组的 UI 演示(静态资源位于 [`docs/assets`](docs/assets))。 ### 扫描 ![New scan — URL input](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/02fbbc7b7b222459.png) ![Scan dashboard — module grid and progress](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/12a92cbb06222500.png) ![Scan module — screenshot capture](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/68d1329f7f222502.png) ### 监控 ![Add monitor — new target setup](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/27f0346a86222503.png) ![Monitor settings — thresholds and capabilities](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/3be6a686da222504.png) ![Content change timeline and diff](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/03a0ecc7ab222506.png) ![Visual change detection](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/1234fd773d222507.png) ![Monitor management overview](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/4e02f54223222508.png) ### 告警 ![Alerts list and events](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/7ff1bc1d8f222510.png) ![Alert delivery and channel settings](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/2ead687b05222511.png) ![Alert email notification](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/1c0364d39a222512.png) ### 报告 ![Generated report](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/59af7bda08222513.png) ## 架构 ``` Frontend (Next.js :3000) ← Project root (monorepo) | REST + SSE v Backend (FastAPI :8000) |-- HTTP --> Scan Service (Node.js Express :4000) |-- --> Redis (:6379) Cache + task broker |-- --> PostgreSQL (:5432) Data persistence | |-- Celery worker Async scan tasks + scheduled monitoring '-- Celery beat Periodic task scheduler ``` 前端仅与后端通信。扫描服务是一个内部服务,封装了 30 多个 OSINT 模块,仅由后端通过 HTTP 调用。 所有七个服务(frontend、backend、scan-service、celery-worker、celery-beat、postgres、redis)都可以使用 Docker Compose 通过单个命令启动——参见 [Docker 部署](#docker-deployment)。 ## 快速开始 ### 前置条件 | 工具 | 版本 | 用途 | |------|---------|---------| | Node.js | >= 20 LTS | 前端 + 扫描服务 | | pnpm | >= 9 | 前端包管理器 | | npm | (随 Node 捆绑) | 扫描服务包管理器 | | Python | >= 3.11 | 后端 | | uv | latest | Python 包管理器 ([安装](https://docs.astral.sh/uv/getting-started/installation/)) | | PostgreSQL | >= 16 | 数据库 | | Redis | >= 7 | 缓存和任务队列 | ### 克隆仓库 ``` git clone https://github.com/TXT0Law/OrbiCheck.git cd OrbiCheck ``` ### 自动化设置 运行设置脚本以一次性安装所有依赖: ``` bash scripts/dev/setup.sh ``` 这将安装前端、后端和扫描服务的依赖,复制 `.env.example` 文件,并运行数据库迁移。您也可以按照下文描述手动进行设置。 ### 前端设置 前端位于项目根目录(没有单独的 `frontend/` 目录)。 ``` pnpm install ``` ### 后端设置 ``` cd backend uv venv uv pip install -e ".[dev]" ``` 复制环境文件并根据您的本地设置进行编辑: ``` cp .env.example .env # 编辑 backend/.env — 至少设置 DATABASE_URL、REDIS_URL 和 AUTH_SESSION_SECRET ``` ### 扫描服务设置 ``` cd backend/scan npm install npx playwright install chromium # Required for the screenshot module ``` (可选)复制并配置扫描服务的环境变量: ``` cp .env.example .env # 可选:设置 IPINFO_TOKEN、BUILT_WITH_API_KEY 等。 ``` ### 数据库迁移 确保 PostgreSQL 正在运行,然后: ``` cd backend uv run alembic upgrade head ``` ### 启动所有服务 您需要**同时运行三个服务**。按顺序启动它们: **终端 1 — 扫描服务(端口 4000)** ``` cd backend/scan node server.js ``` **终端 2 — 后端 API(端口 8000)** ``` cd backend uv run uvicorn app.main:app --host 0.0.0.0 --port 8000 ``` **终端 3 — 前端(端口 3000)** ``` pnpm dev ``` 在浏览器中打开 http://localhost:3000。默认登录凭据: - 邮箱:`admin@orbicheck.local` - 密码:`change-me` ## Docker 部署 全栈通过 Docker Compose 容器化。所有七个服务(postgres、redis、scan-service、backend、celery-worker、celery-beat、frontend)都通过健康检查和依赖顺序进行编排。 ### 一键启动 ``` bash deploy/deploy.sh ``` 这将: 1. 如果缺失则复制 `.env.example` 文件 2. 构建所有 Docker 镜像(多阶段构建) 3. 启动全栈(`docker compose up -d`) 4. 等待每个服务报告健康状态 完成后,打开 http://localhost:3000(前端)和 http://localhost:8000(后端)。 要停止: ``` bash deploy/deploy.sh --down ``` 要重置所有数据(删除卷): ``` docker compose down --remove-orphans -v ``` ### 生产模式 生产模式使用外部的 PostgreSQL 和 Redis,而不是本地容器: ``` DATABASE_URL="postgresql+asyncpg://user:pass@host:5432/db" \ REDIS_URL="redis://host:6379/0" \ bash deploy/deploy.sh --prod ``` 这仅启动应用服务(postgres 和 redis 容器被缩放为 0)。`docker-compose.prod.yml` 覆盖文件会注入外部连接字符串。 ### Docker 服务 | 服务 | 镜像 / Dockerfile | 端口 | 备注 | |---------|-------------------|------|-------| | **postgres** | `postgres:16-alpine` | 5432 (内部) | 数据通过命名卷持久化 | | **redis** | `redis:7-alpine` | 6379 (内部) | AOF 持久化 | | **scan-service** | `docker/scan/Dockerfile` | 4000 (内部) | Alpine + 系统 Chromium(无需 Playwright 下载) | | **backend** | `docker/backend/Dockerfile` | 8000 (对外) | 启动时自动运行 Alembic 迁移 | | **celery-worker** | 与 backend 相同 | — | `CELERY_MODE=worker` | | **celery-beat** | 与 backend 相同 | — | `CELERY_MODE=beat` | | **frontend** | `docker/frontend/Dockerfile` | 3000 (对外) | Next.js standalone 输出 | 关键设计决策: - **scan-service** 使用 `node:20-alpine` + 系统 `chromium` 包,而不是 Playwright 基础镜像,避免了构建期间不稳定的浏览器下载 - **backend** 入口点处理全新数据库(创建表 + `alembic stamp head`)和现有数据库(`alembic upgrade head`)均自动进行 - **celery-worker** 和 **celery-beat** 共享 backend 镜像,并通过 `CELERY_MODE` 环境变量进行路由 - **frontend** 使用多阶段构建,配置 `output: "standalone"`,并将 `/api/v1/*` 重写为内部 backend 主机名 ### DigitalOcean App Platform 包含用于 DigitalOcean App Platform 部署的 `.do/app.yaml` 规范。它定义了所有服务、worker、托管数据库(Postgres + Redis)和入口路由规则。部署前请调整密钥(`AUTH_SESSION_SECRET`、`AUTH_LOGIN_PASSWORD`)。 ### 常用 Docker 命令 ``` docker compose ps # Service status docker compose logs --no-color backend # View backend logs docker compose logs --no-color -f frontend # Follow frontend logs docker compose exec backend bash # Shell into backend container ``` ## 环境变量 ### 后端 (`backend/.env`) | 变量 | 默认值 | 描述 | |----------|---------|-------------| | `DATABASE_URL` | — | PostgreSQL 连接字符串 (asyncpg) | | `REDIS_URL` | `redis://localhost:6379/0` | Redis 连接字符串 | | `SCAN_SERVICE_URL` | `http://localhost:4000` | 内部扫描服务 URL | | `CORS_ORIGINS` | `["http://localhost:3000"]` | 允许的 CORS 源 | | `AUTH_LOGIN_EMAIL` | `admin@orbicheck.local` | 登录邮箱 | | `AUTH_LOGIN_PASSWORD` | `change-me` | 登录密码 | | `AUTH_SESSION_SECRET` | — | 用于签名的会话密钥(必填——使用长随机字符串;生产环境中不要使用默认值) | | `AUTH_COOKIE_SECURE` | `false` | 生产环境中设置为 `true` (HTTPS) | 完整列表(包括 SMTP 设置)请参见 `backend/.env.example`。 ### 前端 (`.env.local`) | 变量 | 默认值 | 描述 | |----------|---------|-------------| | `NEXT_PUBLIC_API_URL` | `http://localhost:8000` | 后端 API URL | 复制根目录下的示例文件: ``` cp .env.example .env.local ``` ### 扫描服务 (`backend/scan/.env`) 所有变量均为可选。可用选项(如 `IPINFO_TOKEN` 和 `BUILT_WITH_API_KEY`)请参见 `backend/scan/.env.example`。 ## API 文档 当后端运行时,交互式 API 文档位于: - **Swagger UI**: http://localhost:8000/api/docs - **OpenAPI JSON**: http://localhost:8000/api/openapi.json ### 关键端点 ``` POST /api/v1/scans Create a new scan GET /api/v1/scans List scans GET /api/v1/scans/{id} Get scan status GET /api/v1/scans/{id}/detail Get full scan results (with risk analysis) POST /api/v1/scans/{id}/cancel Cancel a running scan GET /api/v1/scans/{id}/progress SSE — real-time scan progress CRUD /api/v1/url-groups URL group management CRUD /api/v1/monitors Continuous monitoring ⚠ GET /api/v1/monitors/live SSE — monitor live updates ⚠ GET /api/v1/alerts Alert events ⚠ POST /api/v1/reports Generate reports ⚠ GET /api/v1/health Health check ``` 所有响应遵循统一格式: ``` { "status": "success", "data": { ... }, "meta": { "page": 1, "total": 100 } } ``` 完整文档请参见: - [API 参考](docs/api/README.md) — 包含请求/响应详情的所有端点 - [扫描模块](docs/scan-modules.md) — 30 多个 OSINT 模块目录 - [集成指南](docs/integration-guide.md) — 如何从外部应用程序使用 API - [静态 OpenAPI 规范](docs/openapi.json) — 机器可读的 API 规范 ## 测试 ``` # 运行所有测试 make test # 前端单元测试 make test-frontend # 后端测试 (pytest — all marks) make test-backend # 后端单元 / 集成 / e2e 分别测试 make test-backend-unit make test-backend-integration make test-backend-e2e # Scan Service 测试 make test-osint # Watch 模式 make test-watch # 覆盖率报告 make test-cov # 连接前后端测试 # 需要所有服务运行 pnpm test:linked ``` ## 技术栈 | 层级 | 技术 | |-------|-----------| | 前端 | Next.js 14 (App Router), React 18, TypeScript | | UI | Tailwind CSS, shadcn/ui, Recharts | | 状态 | Zustand (客户端), TanStack Query (服务端) | | 后端 API | Python FastAPI, SQLAlchemy (async), Pydantic | | 任务队列 | Celery + Redis | | 扫描服务 | Node.js, Express | | 数据库 | PostgreSQL + Alembic migrations | | 缓存 | Redis | | 测试 | Vitest, Playwright, pytest, Jest | ## 项目结构 ``` OrbiCheck/ ├── app/ # Next.js App Router pages ├── components/ # React components (ui/, scan/, dashboard/, monitor/, etc.) ├── lib/ # API clients, hooks, stores, utilities ├── types/ # TypeScript type definitions ├── shared/ # Cross-service shared types, constants, schemas ├── tests/ # Frontend tests (Vitest + Playwright) ├── public/ # Static assets │ ├── backend/ │ ├── app/ # FastAPI application │ │ ├── api/v1/ # REST endpoints │ │ ├── models/ # SQLAlchemy ORM models │ │ ├── services/ # Business logic + data transformers │ │ ├── tasks/ # Celery async tasks │ │ ├── core/ # Auth, middleware, exceptions │ │ └── db/ # Database session + Alembic migrations │ ├── scan/ # Node.js Scan Service (30+ OSINT modules) │ └── tests/ # Backend tests (unit, integration, e2e) │ ├── docker/ # Docker configurations │ ├── frontend/Dockerfile # Next.js multi-stage standalone build │ ├── backend/Dockerfile # FastAPI + Alembic + Celery │ ├── backend/entrypoint.sh # Bootstrap-friendly DB init │ ├── celery/entrypoint.sh # Worker / beat mode router │ ├── scan/Dockerfile # Node.js + system Chromium │ └── init/init-db.sql # PostgreSQL extensions ├── docker-compose.yml # Full local stack (7 services) ├── docker-compose.prod.yml # Production override (external DB/Redis) ├── deploy/deploy.sh # One-command build + up + healthcheck ├── .do/app.yaml # DigitalOcean App Platform spec ├── .dockerignore │ ├── quickstart/ # Native local startup scripts (no Docker) ├── scripts/ # Dev / CI scripts ├── Makefile # Common dev commands └── package.json ``` ## 致谢 OSINT 扫描模块和整体侦察方法**灵感来源于** Alicia Sykes ([@Lissy93](https://github.com/Lissy93)) 开发的 [web-check](https://github.com/Lissy93/web-check) —— 一个用于网站情报的开源一体化 OSINT 工具。OrbiCheck 在其自身的技术栈(Next.js、FastAPI、PostgreSQL 等)之上构建了一个独特的产品,并扩展了监控和报告等功能,但其检查的广度在概念上归功于该项目。 ## 贡献 欢迎贡献!请参阅 [CONTRIBUTING.mdCONTRIBUTING.md) 了解如何开始的指南。 ## 安全 如果您发现安全漏洞,请参阅 [SECURITY.md](
标签:C2日志可视化, DNS分析, ESC4, GitHub, MITM代理, OSINT, Snort++, SSL/TLS检测, WAF探测, Web安全, 主机安全, 占用监测, 反取证, 威胁情报, 子域名枚举, 安全分析, 安全评估, 安全运营, 开发者工具, 开源安全工具, 扫描框架, 持续监控, 指纹识别, 搜索引擎查询, 数据统计, 测试用例, 漏洞报告, 端口扫描, 系统安全, 自动化攻击, 蓝队分析, 被动扫描, 请求拦截, 资产管理, 逆向工具, 逆向工程平台