rjaada/OSINT-NEXUS

GitHub: rjaada/OSINT-NEXUS

面向冲突态势感知的开源情报实时监控平台,整合多源数据并提供本地AI辅助验证和分析师审核工作流。

Stars: 0 | Forks: 0

# OSINT NEXUS OSINT NEXUS 是一个用于冲突驱动态势感知的实时 OSINT 监控平台。它摄取开源数据,对事件进行地理定位,计算置信度,并提供版本化的作战仪表板。 ## 项目简介 OSINT NEXUS 是一个作战情报工作区,结合了: - 实时 OSINT 摄取(Telegram、RSS、航班动态、红色警报动态), - 以地图为中心的事件监控, - 分析师审核工作流, - 基于角色的访问控制, - 通过 Ollama 进行本地 AI 辅助验证/报告生成。 它专为决策支持而设计,而非用于权威指挥与控制。 ## 当前产品状态 - `v2` 现在是主要工作区(`/` 重定向到 `/v2`)。 - `v1` 保留在代码库中,但已从主导航中隐藏。 当前工程重点(功能冻结): - 可靠性与 auth/session 稳定性, - 角色/访问权限正确性, - 重启后的持久化行为, - 关键路径的测试覆盖率。 ## 10 分钟本地入门 ``` make up-p2 make up-ai MODEL=deepseek-r1:8b make pull-model MODEL=phi4-mini make health ``` 打开: - Frontend:`http://localhost:3000` - Backend:`http://localhost:8000` - 登录:`http://localhost:3000/login` 运行关键 auth/admin 测试: ``` make test-auth ``` UI 入口: - Root (V2):`http://localhost:3000/` - V2 hub:`http://localhost:3000/v2` - V2 operations:`http://localhost:3000/v2/operations` - V2 alerts:`http://localhost:3000/v2/alerts` - V2 sources:`http://localhost:3000/v2/sources` - V2 health:`http://localhost:3000/v2/health` - V2 admin(仅限 admin):`http://localhost:3000/v2/admin` 阿拉伯语路由镜像 v2 于 `/v2/ar/...`。 ## 摄取与数据源 - Telegram 频道: - `AJ Mubasher (TG)` - `Roaa War Studies (TG)` - RSS 源(Reuters, Al Jazeera, BBC, CBS, The Guardian, Times of Israel) - FlightRadar24 军事相关航班动态 - Red Alert 动态(当可达时) ## 后端能力 - FastAPI 摄取引擎与 WebSocket 广播 - SQLite 本地持久化(默认)及 Postgres v2 事件持久化支持 - 事件去重与事件线程化 - 置信度评分,包含可解释理由与佐证追踪 - 媒体任务队列与 Telegram 媒体关联 - Watchdog + 运维指标 + 规则警报 - v2 事件/警报的 MGRS 转换 - 通过 Open-Meteo 端点获取真实 METOC 数据 - 从本地 GeoJSON 文件加载地理叠加层(`OVERLAY_DIR`) ## 关键功能 - V2 作战地图,支持事件悬停/点击详情卡片 - V2 警报看板,包含置信度/ETA 和分析师审核操作 - V2 源工作台,显示可靠性/吞吐量和管道状态 - V2 健康仪表板,显示 watchdog/队列/系统状态 - Admin 角色管理页面(列出用户、晋升/降级、带安全措施删除) - 通过 WebSocket 流进行实时更新 - MGRS 转换与 METOC 天气集成 - GeoJSON 战术叠加层支持 - AI 辅助验证 + 报告工作流 ## V2 中的 AI(当前策略) V2 目前通过 Ollama 使用任务模型: - `verify` 模型:默认 `phi4-mini` - `report` 模型:默认 `deepseek-r1:8b` 运行时调度器行为: - 一次仅一个活动模型 - 串行执行 - 任务变更时强制切换模型 - 从 Ollama `/api/tags` 进行运行时模型发现 - 不可用的模型将从运行时链中移除,以减少重复的 404 噪音 ## 认证与访问控制 - `/login` 提供账户创建和登录 - 密码使用加盐 PBKDF2 哈希存储 - 使用签名 auth cookie(`osint_auth`)进行会话验证 - 角色模型: - `viewer` - `analyst` - `admin` 路由策略: - v1:任何已认证角色 - v2:任何已认证角色(`viewer`、`analyst`、`admin`) - v2 admin 页面:仅限 `admin` Admin 工具: - `GET /api/admin/users`(仅限 admin) - `PATCH /api/admin/users/{username}/role`(仅限 admin) - `DELETE /api/admin/users/{username}`(仅限 admin) - Last-admin 保护:无法降级最后一个 admin 账户 - Last-admin/自我删除保护:无法删除最后一个 admin 或当前 admin 账户 ## V2 页面摘要 Operations (`/v2/operations`): - 实时地图 + 标记 - 地图上悬停和点击事件详情 - METOC 小部件 + 天气叠加层切换 - BFT/ISR 小部件 - AI 危机分析师面板 - **无聊天面板** - **侧边栏无警报卡片流** Alerts (`/v2/alerts`): - 置信度和 ETA 看板 - 分析师/admin 审核操作 - SITREP/INTSUM 导出 - 多模型作战简报集成(`verify` + `report`) Sources (`/v2/sources`): - 源可靠性和吞吐量指标 - 队列和模型状态 - AI 报告面板 Health (`/v2/health`): - 运维健康、watchdog 警告、队列状态和 postgres 状态 Admin (`/v2/admin`): - 列出用户 - 晋升/降级角色 - 带安全检查删除用户 ## 主要 API 端点 核心: - `GET /api/health` - `GET /api/ops/health` - `GET /api/stats` - `GET /api/events` - `GET /api/alerts/assessment` - `GET /api/sources/recent` - `GET /api/analyst` - `WS /ws/live` V2: - `GET /api/v2/events` - `GET /api/v2/alerts` - `GET /api/v2/sources` - `GET /api/v2/system` - `GET /api/v2/ops/alerts` - `GET /api/v2/metoc` - `GET /api/v2/overlays` - `GET /api/v2/ai/policy` - `GET /api/v2/ai/report` - `POST /api/v2/ai/verify` - `POST /api/v2/ai/ops-brief` Auth/Admin: - `POST /api/auth/register` - `POST /api/auth/login` - `POST /api/auth/logout` - `GET /api/auth/session` - `GET /api/admin/users` - `PATCH /api/admin/users/{username}/role` - `DELETE /api/admin/users/{username}` ## 前置条件 - Docker Engine - Docker Compose - Node.js 20+(可选直接运行 frontend) - Python 3.11+(可选直接运行 backend) - Minikube + kubectl(用于 Kubernetes 模式) - 可选 NVIDIA GPU + NVIDIA container toolkit(用于本地 Ollama 加速) ## 环境变量(后端) 重要变量: - `OSINT_DB_PATH`(默认:`/tmp/osint_nexus.db`;compose 使用 `/data/osint_nexus.db` 以持久化) - `MEDIA_DIR`(默认:`/tmp/osint_nexus_media`) - `OVERLAY_DIR`(默认:`/tmp/osint_overlays`) - `DATABASE_URL`(启用 Postgres) - `OLLAMA_URL`(默认:`http://ollama:11434/api/generate`) - `OLLAMA_MODEL` - `OLLAMA_FALLBACK_MODEL` - `V2_MODEL_VERIFY` - `V2_MODEL_REPORT` - `V2_MODEL_DEFAULT` - `AUTH_SECRET` - `AUTH_DEFAULT_ADMIN_USER` - `AUTH_DEFAULT_ADMIN_PASSWORD` - `AUTH_COOKIE_SECURE`(HTTPS 部署中为 `1/true`) - `ALLOW_INSECURE_DEFAULTS`(可选,仅限本地绕过;**请勿**在生产环境中使用) - `AUTH_ENABLE_TOTP`(`1/0`,默认启用) - `AUTH_TOTP_REQUIRED_ROLES`(默认:`analyst,admin`) - `AUTH_ADMIN_REQUIRE_PASSKEY`(`1/0`,默认启用) - `AUTH_BREAK_GLASS_CODE`(可选的一次性紧急代码,用于 admin 密码登录) - `PASSKEY_RP_ID`(默认 `localhost`) - `PASSKEY_RP_NAME`(默认 `OSINT Nexus`) - `PASSKEY_ORIGINS`(逗号分隔的允许来源) - `PASSKEY_CHALLENGE_TTL_SEC` - `CORS_ORIGINS`(逗号分隔) Telegram/媒体调优: - `DOWNLOAD_TELEGRAM_MEDIA` - `TELEGRAM_LOOKBACK_POSTS` - `TELEGRAM_MAX_NEW_PER_POLL` - `TELEGRAM_MAX_MEDIA_MB`(丢弃过大的下载媒体文件) - `WHISPER_HOOK_URL`(可选的外部转录 hook) - `DEEPFAKE_HOOK_URL`(可选的外部真实性 hook) - `MEDIA_HOOK_TIMEOUT_SEC` - `WHISPER_MODEL`(用于本地 `media-hooks` 服务,默认 `small`) - `WHISPER_DEVICE`(`cuda` 或 `cpu`) - `WHISPER_COMPUTE_TYPE`(默认 `int8_float16`) 额外的 OSINT 源层(均为可选,受功能标志控制): - `ENABLE_ADSBLOL`, `ADSBLOL_API_URL`, `ADSBLOL_POLL_INTERVAL_SEC` - `ENABLE_AISSTREAM`, `AISSTREAM_WS_URL`, `AISSTREAM_API_KEY`, `AISSTREAM_BBOX` - `ENABLE_FIRMS`, `FIRMS_MAP_KEY`, `FIRMS_SOURCE`, `FIRMS_BBOX`, `FIRMS_DAYS`, `FIRMS_POLL_INTERVAL_SEC` 密钥管理: - 请勿将真实密钥存储在 `docker-compose.yml` 默认值中。 - 使用本地 `.env`(已 gitignore)并从 `.env.example` 启动。 - 示例引导: - `cp .env.example .env` - 在 `.env` 中填写 `AISSTREAM_API_KEY`、`FIRMS_MAP_KEY` 和其他密钥 安全启动检查: - 后端现在在启动时验证 auth 安全配置。 - 如果出现以下情况,启动将失败: - `AUTH_SECRET` 缺失/过弱/为默认值 - `AUTH_DEFAULT_ADMIN_PASSWORD` 不符合策略 - `AUTH_COOKIE_SECURE` 在非仅限 localhost 的开发模式下被禁用 - 存在通过 `ALLOW_INSECURE_DEFAULTS=1` 进行临时开发的仅限本地覆盖。 本地 hook 服务(Whisper + Deepfake 基准): - Compose 包含一个运行在 `:8090` 的 `media-hooks` 服务。 - 后端默认值: - `WHISPER_HOOK_URL=http://media-hooks:8090/hooks/whisper` - `DEEPFAKE_HOOK_URL=http://media-hooks:8090/hooks/deepfake` - Whisper 是真实的 Faster-Whisper 转录。 - Deepfake hook 是本地基准启发式算法(非法医级);仅将其作为参考信号使用。 TOTP 端点: - `GET /api/auth/mfa/totp/status` - `POST /api/auth/mfa/totp/setup` - `POST /api/auth/mfa/totp/enable` - `POST /api/auth/mfa/totp/disable` Passkey 端点: - `GET /api/auth/passkey/status` - `POST /api/auth/passkey/register/options` - `POST /api/auth/passkey/register/verify` - `POST /api/auth/passkey/login/options` - `POST /api/auth/passkey/login/verify` Graph 端点: - `GET /api/v2/graph?limit=350`(返回近期事件的 `nodes`/`edges` 关系图) ## 本地运行(Docker Compose) 构建并启动: ``` make up-p2 make up-ai MODEL=deepseek-r1:8b make pull-model MODEL=phi4-mini make pull-model MODEL=qwen2.5:7b ``` 或直接使用 compose: ``` docker compose up -d --build postgres redis backend frontend ollama ``` 访问: - Frontend:`http://localhost:3000` - Backend:`http://localhost:8000` 持久化说明: - Docker Compose 将后端 auth/本地 DB 存储挂载到 `/data`(`backend_data` 卷)。 - 这使得用户账户和本地 SQLite 状态在容器重启后得以保留。 常用命令: ``` make ps make logs make logs-backend make health make test-auth make down ``` ## Kubernetes 有关 Minikube 部署详情,请参阅 [README_K8s.md](README_K8s.md)。 ## 安全与使用须知 - 这是一个 OSINT 决策支持平台,而非权威指挥系统。 - 模型输出仅供参考,可能存在错误。 - 请通过可信的官方渠道验证关键声明。 - 请勿提交密钥或私有凭据## 仓库结构 ``` . ├── backend/ ├── frontend/ ├── k8s/ ├── docker-compose.yml ├── Makefile ├── README.md └── README_K8s.md ```
标签:AI风险缓解, AV绕过, DLL 劫持, ESC4, FastAPI, GEOINT, GitHub, HTTP/HTTPS抓包, LLM评估, MITM代理, Ollama, OSINT, Python, RBAC, RSS聚合, SQLite, Telegram监控, WebSocket, 事件情报, 依赖分析, 公共安全, 军事仿真, 冲突监测, 决策支持系统, 分析师工作台, 地图可视化, 地理定位, 基于角色的访问控制, 多语言支持, 大语言模型, 子域名突变, 安全测试框架, 安全防护, 实时处理, 密码管理, 态势感知, 情报分析, 情报收集, 搜索引擎查询, 无后门, 本地AI, 测试用例, 漏洞研究, 网络诊断, 置信度评分, 自动化攻击, 自动化攻击, 自动化攻击, 航班追踪, 请求拦截, 逆向工具, 阿拉伯语