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, 测试用例, 漏洞研究, 网络诊断, 置信度评分, 自动化攻击, 自动化攻击, 自动化攻击, 航班追踪, 请求拦截, 逆向工具, 阿拉伯语