manishjnv/ti-platform

GitHub: manishjnv/ti-platform

一个基于 FastAPI 与 Next.js 14 构建的生产级自托管威胁情报聚合与分析平台,支持多源 IOC 自动同步、全文检索和 AI 增强分析。

Stars: 0 | Forks: 0

# IntelWatch — TI 平台 一个生产级、自托管的威胁情报聚合与分析平台,基于 **FastAPI**、**Next.js 14**、**PostgreSQL/TimescaleDB**、**OpenSearch** 和 **Redis** 构建。 ![Stack](https://img.shields.io/badge/FastAPI-009688?style=flat&logo=fastapi&logoColor=white) ![Stack](https://img.shields.io/badge/Next.js_14-000000?style=flat&logo=next.js&logoColor=white) ![Stack](https://img.shields.io/badge/PostgreSQL-4169E1?style=flat&logo=postgresql&logoColor=white) ![Stack](https://img.shields.io/badge/TimescaleDB-FDB515?style=flat&logo=timescale&logoColor=black) ![Stack](https://img.shields.io/badge/OpenSearch-005EB8?style=flat&logo=opensearch&logoColor=white) ![Stack](https://img.shields.io/badge/Redis-DC382D?style=flat&logo=redis&logoColor=white) ![Stack](https://img.shields.io/badge/Docker-2496ED?style=flat&logo=docker&logoColor=white) ## 目录 - [架构](#architecture) - [页面与功能](#pages--features) - [快速开始](#quick-start) - [环境变量](#environment-variables) - [API 参考](#api-reference) - [登录与认证](#-login--authentication) - [文档索引](#-documentation-index) ## 架构 **7 个 Docker 服务:** UI, API, Worker, Scheduler, PostgreSQL+TimescaleDB, Redis, OpenSearch | 服务 | 技术 | 端口 | |---------|------|------| | 前端 (Frontend) | Next.js 14, TypeScript, Tailwind CSS, Recharts, Zustand | 3000 | | 后端 API (Backend API) | FastAPI, async SQLAlchemy, Pydantic v2 | 8000 | | 数据库 (Database) | PostgreSQL 16 + TimescaleDB | 5432 | | 搜索 (Search) | OpenSearch 2.x | 9200 | | 缓存/队列 (Cache/Queue) | Redis 7 | 6379 | | Worker | Python RQ (Redis Queue) | — | | 调度器 (Scheduler) | Python APScheduler | — | ## 页面与功能 | 页面 | 路由 | 描述 | |------|-------|-------------| | **登录** | `/login` | IntelWatch 品牌登录页 — SSO 重定向或开发模式绕过 | | **仪表盘** | `/dashboard` | KPI 统计卡片、威胁等级条、严重性/类别环形图、高风险表格、Feed 状态 | | **威胁 Feed** | `/threats` | 严重性过滤标签、按风险排序的威胁列表、资产类型细分 | | **网络新闻** | `/news` | 结构化情报网络新闻 Feed — 类别小部件、AI 增强、相关性评分 | | **情报条目** | `/intel` | 分页情报浏览器,带过滤器和详情下钻 | | **IOC 搜索** | `/search` | 全文 IOC 搜索,含类型/严重性/日期过滤器、实时互联网查询(12+ 来源)、结构化 AI 分析 | | **IOC 数据库** | `/iocs` | 浏览所有 IOC,含类型过滤标签、一键复制、类型分布环形图 | | **分析** | `/analytics` | 严重性柱状图、类别环形图、地理/行业排名、来源可靠性 | | **地理视图** | `/geo` | 地理威胁分布、区域下钻、特定区域威胁列表 | | **Feed 状态** | `/feeds` | Feed 健康监控,含状态徽章、错误显示、条目计数 | | **设置** | `/settings` | 通用、安全、通知、外观、数据与存储、API Keys、平台设置 | **共享组件:** AuthGuard, StatCard, ThreatLevelBar, StructuredIntelCards (统一情报展示), DonutChart, TrendLineChart, HorizontalBarChart, RankedDataList, FeedStatusPanel, Sidebar (4 部分导航), Header bar (搜索、通知、用户菜单)。 ## 快速开始 ### 前置条件 - **Docker Desktop** (包含 Docker Compose v2) - *(可选)* Python 3.12, Node.js 20 用于在 Docker 外部运行 ### 1. 克隆与配置 ``` git clone https://github.com/manishjnv/ti-platform.git cd ti-platform cp .env.example .env # 编辑 .env — 设置 GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, SECRET_KEY ``` ### 2. 启动所有服务 ``` # Production mode docker compose up -d --build # Development mode (hot reload — 推荐用于本地开发) docker compose -f docker-compose.yml -f docker-compose.dev.yml up --build ``` ### 3. 验证 ``` curl -s http://localhost:8000/api/v1/health | jq . # 预期: {"status":"ok","postgres":true,"redis":true,"opensearch":true} open http://localhost:3000 # UI — redirects to login ``` ## 环境变量 | 变量 | 必填 | 描述 | |----------|----------|-------------| | `ENVIRONMENT` | 否 | `development` 或 `production` (默认: `development`) | | `SECRET_KEY` | **是** | 应用密钥 — 使用 `openssl rand -hex 32` 生成 | | `LOG_LEVEL` | 否 | `DEBUG`, `INFO`, `WARNING`, `ERROR` (默认: `INFO`) | | `DOMAIN` | 生产 | 基础域名 (默认: `localhost`) | | `DOMAIN_UI` | 生产 | UI URL (默认: `http://localhost:3000`) | | `DOMAIN_API` | 生产 | API URL (默认: `http://localhost:8000`) | | `POSTGRES_HOST` | 是 | 数据库主机 (默认: `postgres`) | | `POSTGRES_PORT` | 是 | 数据库端口 (默认: `5432`) | | `POSTGRES_DB` | 是 | 数据库名称 (默认: `ti_platform`) | | `POSTGRES_USER` | 是 | 数据库用户 | | `POSTGRES_PASSWORD` | **是** | 数据库密码 — **生产环境请务必修改** | | `REDIS_URL` | 是 | Redis 连接 (默认: `redis://redis:6379/0`) | | `OPENSEARCH_URL` | 是 | OpenSearch 端点 | | `GOOGLE_CLIENT_ID` | **是** | Google OAuth 2.0 Client ID | | `GOOGLE_CLIENT_SECRET` | **是** | Google OAuth 2.0 Client Secret | | `JWT_EXPIRE_MINUTES` | 否 | 会话时长(分钟) (默认: `480`) | | `SMTP_HOST` | OTP | SMTP 服务器主机 (例如: `smtp.gmail.com`) | | `SMTP_PORT` | OTP | SMTP 端口 (默认: `587`) | | `SMTP_USER` | OTP | SMTP 用户名 | | `SMTP_PASSWORD` | OTP | SMTP 密码 | | `SMTP_FROM_EMAIL` | OTP | 发件人邮箱 (默认: `noreply@intelwatch.in`) | | `EMAIL_OTP_ENABLED` | 否 | 启用邮箱 OTP 登录 (默认: `false`) | | `NVD_API_KEY` | 否 | NVD API 密钥 (用于更高速率限制) | | `ABUSEIPDB_API_KEY` | 否 | AbuseIPDB API 密钥 (该 Feed 必需) | | `OTX_API_KEY` | 否 | AlienVault OTX API 密钥 | | `VIRUSTOTAL_API_KEY` | 否 | VirusTotal API 密钥 (免费版) | | `SHODAN_API_KEY` | 否 | Shodan API 密钥 (免费开发者版) | | `AI_API_URL` | 否 | AI 摘要端点 | | `AI_API_KEY` | 否 | AI API 密钥 | | `AI_MODEL` | 否 | AI 模型名称 (默认: `llama3`) | | `NEXT_PUBLIC_API_URL` | 是 | 前端使用的 API URL (默认: `http://localhost:8000`) | ## API 参考 Base URL: `http://localhost:8000/api/v1` | 方法 | 端点 | 认证 | 描述 | |--------|----------|------|-------------| | `GET` | `/health` | 无 | 服务健康检查 | | `GET` | `/auth/config` | 无 | 认证方式配置 | | `GET` | `/auth/google/url` | 无 | 获取 Google OAuth 重定向 URL | | `GET` | `/auth/google/callback` | 无 | Google OAuth 回调 (从 Google 重定向) | | `POST` | `/auth/otp/send` | 无 | 发送邮箱 OTP 验证码 | | `POST` | `/auth/otp/verify` | 无 | 验证 OTP 并创建会话 | | `POST` | `/auth/logout` | 无 | 登出 — 撤销会话 | | `GET` | `/auth/session` | Cookie | 检查会话有效性,返回用户信息 | | `GET` | `/me` | Session | 当前用户信息 | | `GET` | `/dashboard` | Viewer | 仪表盘统计数据、严重性分布、高风险项 | | `GET` | `/intel` | Viewer | 分页情报条目,支持过滤器 | | `GET` | `/intel/{id}` | Viewer | 单个情报条目详情 | | `GET` | `/search` | Viewer | 全文 IOC 搜索 | | `GET` | `/feeds/status` | Viewer | Feed 连接器状态 | | `POST` | `/feeds/{name}/trigger` | Admin | 触发手动 Feed 获取 | | `POST` | `/feeds/trigger-all` | Admin | 触发所有 Feed 获取 | | `GET` | `/setup/config` | Admin | 平台域名与部署配置 | | `GET` | `/setup/status` | Admin | 平台设置检查清单 | 所有列表端点均支持 `page`, `page_size`, `severity`, `feed_type`, `date_from`, `date_to` 查询参数。 ## 🔐 登录与认证 | 模式 | 何时使用 | 方式 | |------|------|-----| | **Google OAuth** | 设置了 `GOOGLE_CLIENT_ID` + `GOOGLE_CLIENT_SECRET` | 点击 "Sign in with Google" → Google 同意屏 → 重定向回调 → 创建会话 | | **邮箱 OTP** | `EMAIL_OTP_ENABLED=true` 且配置了 SMTP | 输入邮箱 → 收到 6 位验证码 → 验证 → 创建会话 | ``` Browser → /login → GET /api/v1/auth/config → determine available auth methods ├── Google: GET /auth/google/url → redirect to Google → callback → set cookie → /dashboard └── OTP: POST /auth/otp/send → enter code → POST /auth/otp/verify → set cookie → /dashboard Protected routes: AuthGuard → GET /auth/session → valid? → render : redirect /login Logout: POST /auth/logout → revoke Redis session → clear cookie → /login ``` - **Cookie:** `iw_session` — HttpOnly, Secure, SameSite=Lax, 8 小时 TTL - **会话存储:** Redis (服务端可撤销) - **反向代理:** Caddy (通过 Let's Encrypt 自动 HTTPS) - **受保护路由:** 所有 `(app)/*` 页面均包裹在 `AuthGuard` 中 ## 📚 文档索引 所有详细文档位于 `docs/`。每个都是**动态文档**,随平台演进更新。 | 文档 | 描述 | |----------|-------------| | [README.md](README.md) | 项目概述、快速开始、API 参考(本文件) | | [docs/Instruction.md](docs/Instruction.md) | **必读** 工程与开发标准 | | [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) | 系统架构、服务拓扑、数据模型、安全层 | | [docs/TECHNOLOGY.md](docs/TECHNOLOGY.md) | 完整技术栈、库选择理由、版本矩阵 | | [docs/INTEGRATION.md](docs/INTEGRATION.md) | Feed 与集成要求 — 所有计划的数据源 | | [docs/WORKFLOW.md](docs/WORKFLOW.md) | 运维指南 — 本地开发、部署、CI/CD、Caddy | | [docs/ROADMAP.md](docs/ROADMAP.md) | 多阶段功能路线图与进度跟踪 | ## 许可证 私有 — 保留所有权利。
标签:AMSI绕过, AV绕过, Docker, FastAPI, masscan, nuclei, PostgreSQL, Python, React, Redis, Syscalls, TimescaleDB, TIP, TypeScript, 仪表盘, 企业级安全, 全文搜索, 威胁情报平台, 威胁检测, 安全插件, 安全运营, 安全防御评估, 实时处理, 密码管理, 异步任务队列, 情报分析, 情报聚合, 扫描框架, 搜索引擎查询, 无后门, 测试用例, 网络安全, 网络诊断, 自动化攻击, 自托管, 请求拦截, 隐私保护