vom00/feedlock

GitHub: vom00/feedlock

FEEDLOCK 是一个威胁情报源聚合查询工具,通过并行查询多个情报源并对结果进行标准化加权,为输入的 IP、域名或文件哈希给出统一的威胁等级判定。

Stars: 0 | Forks: 0

# FEEDLOCK — 威胁情报源聚合器 输入 IP 地址、域名或文件哈希。FEEDLOCK 会并行查询 AbuseIPDB、AlienVault OTX、VirusTotal(以及可选的 Shodan),将每个响应标准化为统一的 schema,并通过每个来源的明细渲染出加权置信度得分。 ## 架构 ``` ┌──────────────┐ POST /api/lookup ┌──────────────────┐ │ React client │ ────────────────────► │ Express proxy │ │ (Vite, :5173)│ ◄──────────────────── │ (:3001) │ └──────────────┘ ThreatReport └────────┬─────────┘ │ Promise.allSettled (parallel) ┌──────────────┬──────┴───────┬──────────────┐ ▼ ▼ ▼ ▼ AbuseIPDB AlienVault OTX VirusTotal Shodan (IP only) (ip/domain/hash) (ip/domain/hash) (IP, optional) │ │ │ │ └──────► normalize → SourceResult ◄──────────┘ │ weighted score (re-normalized when a source errors) → ThreatLevel verdict ``` API 密钥仅保留在服务器上 —— 浏览器永远不会直接与威胁情报 API 通信。 ## 设置 ``` git clone cd "microsoft major project" # 1. 安装两个 packages cd client && npm install && cd .. cd server && npm install && cd .. # 2. 配置 keys cp .env.example server/.env # then paste your keys into server/.env # 3. 运行(两个 terminals) cd server && npm run dev # API on http://localhost:3001 cd client && npm run dev # UI on http://localhost:5173 ``` Vite 开发服务器会将 `/api/*` 代理到 `localhost:3001`,因此只需打开 http://localhost:5173 即可。 ## 获取免费 API 密钥 | 来源 | 注册地址 | 备注 | |--------|-------------|-------| | AbuseIPDB | https://www.abuseipdb.com/register | 免费层级:每天 1,000 次查询 | | AlienVault OTX | https://otx.alienvault.com/ | 密钥位于 Settings → API Integration | | VirusTotal | https://www.virustotal.com/gui/join-us | 免费层级:每分钟 4 次请求 | | Shodan(可选) | https://account.shodan.io/register | 没有它应用也能正常运行 | ## 运行测试 ``` cd client && npm test # Vitest + React Testing Library (77 tests) cd server && npm test # Jest + Supertest (26 tests) ``` 所有功能均采用测试优先原则构建:validator、scorer、normalizers、services、route、hook 以及所有 UI 组件在实现之前均先经过未通过测试。 ## 评分 每个来源的响应都会被标准化至 0–100,然后结合以下权重进行计算: AbuseIPDB 0.35 · VirusTotal 0.35 · OTX 0.25 · Shodan 0.05。出错的来源将被 排除,剩余的权重将重新标准化。判定区间: 0–25 干净 · 26–50 可疑 · 51+ 恶意。 ## 部署 (Render) 在生产环境中,Express 从同一个源提供已构建的客户端和 API —— 无需进行 CORS 或 API-base 配置。 最简单的方法 —— 该仓库附带了一个 [render.yaml](render.yaml) 蓝图: 1. 在 [Render](https://render.com) 上:**New → Blueprint**,连接此仓库。 2. Render 会读取 `render.yaml` 并提示输入 API 密钥 (`ABUSEIPDB_API_KEY`、`OTX_API_KEY`、`VT_API_KEY`;`SHODAN_API_KEY` 为 可选项)。Render 会自动设置 `PORT`。 手动备选方案:**New → Web Service**,构建命令使用 `npm run build`, 启动命令使用 `npm start`,然后在控制台中添加相同的环境变量。 注意:Render 的免费层级在闲置约 15 分钟后会休眠 —— 在现场演示前一分钟 打开 URL 将其唤醒。 ## 已知限制 - **VirusTotal 免费层级**允许每分钟 4 次请求 —— 每个 IOC 的结果会在 内存中缓存 10 分钟;当出现 429 错误时,该来源卡片会显示 "Rate limited", 而其他来源仍会正常报告。 - **不支持 IPv6** —— AbuseIPDB v2 免费层级不支持该格式。 - **私有/保留 IP 会被拒绝**并附带说明信息 (RFC 1918、loopback、link-local、CGNAT 等)—— 公共威胁情报源没有 这些范围的数据,且 OTX 会直接拒绝它们。 - **历史记录仅在当前会话有效** —— 刷新页面会清空记录(最多 50 条)。 - 内存缓存在服务器重启时会重置;没有持久化层。 ## 演示 IOC(公开记录,可安全查询) | IOC | 类型 | 预期结果 | |-----|------|----------| | `185.220.101.1` | IP | 高分 —— 已知的 Tor 出口节点 | | `malware-traffic-analysis.net` | Domain | 存在多个 OTX pulse | | `44d88612fea8a8f36de82e1278abb02f` | Hash | EICAR 测试文件 MD5 —— 被 VT 标记 | ## 扩展想法 - 当受监控 IOC 的得分发生变化时提供实时 WebSocket 更新 - 使用 PostgreSQL 持久化存储,以实现跨会话的历史记录和趋势图表 - 引入用户认证,提供按分析师保存的监控列表 - 接入更多情报源:URLhaus、GreyNoise、IPQualityScore
标签:API聚合, Express, React, Syscalls, 威胁情报, 安全运营, 开发者工具, 扫描框架, 数据可视化, 自动化攻击