ard1102/ip-intelligence
GitHub: ard1102/ip-intelligence
一个自托管的容器化威胁情报平台,聚合 10 个开源情报源并提供标准化的 IP 富化查询与防火墙导出能力。
Stars: 0 | Forks: 0
# IP 情报平台
一个自托管的、容器化的威胁情报聚合与富化服务。它接入 10 个开源威胁情报源,使用规范化的安全上下文对 IP 查询进行富化,并通过 REST API 和 MCP 服务器公开结果。所有输出均规范化为 [OCSF Class 4001 (Network Activity)](https://schema.ocsf.io/classes/network_activity)。
## 功能
- **10 个威胁情报源** — Feodo Tracker、Emerging Threats、Spamhaus、TOR exits、CINS、Blocklist.de、SAPICS ASN、ThreatFox、OTX、Shadowserver
- **实时富化** — 地理定位 (ip-api.com)、Shodan InternetDB、反向 DNS、AbuseIPDB
- **OCSF Class 4001 输出** — 所有响应均规范化为 Open Cybersecurity Schema Framework
- **REST API** — 基于 FastAPI,OpenAPI 文档位于 `/docs`
- **MCP server** — FastMCP 2.x 流式 HTTP,兼容 claude.ai MCP 连接器
- **自愈情报源** — SelfRepairAgent 自动隔离漂移或过期的情报源
- **防火墙导出** — 支持 NDJSON、纯文本和 CIDR-block 导出
- **零密钥阶段 1** — 所有开源情报源无需 API 密钥即可运行
## 快速开始
```
# 克隆并配置
git clone https://github.com/your-username/ip-intelligence.git
cd ip-intelligence
cp .env.example .env
# 编辑 .env — 至少设置 ADMIN_KEY
# 使用 Docker Compose 运行
docker compose up -d
# 验证
curl http://localhost:8004/health
```
API 将在 `http://localhost:8004` 提供,OpenAPI 文档位于 `http://localhost:8004/docs`。
## API 参考
| 方法 | Endpoint | 描述 |
|--------|----------|-------------|
| `GET` | `/lookup/{ip}` | 富化单个 IP — 返回 OCSF 4001 |
| `POST` | `/bulk` | 批量查询最多 500 个 IP |
| `GET` | `/health` | 情报源健康状态与修复代理状态 |
| `GET` | `/export/{format}` | 导出黑名单 (ndjson, txt, cidr) |
| `GET` | `/asn/{asn}/ranges` | 将 ASN 扩展为 IP 范围 |
| `POST` | `/admin/*` | 管理操作(需要 `ADMIN_KEY`) |
### 示例
```
curl http://localhost:8004/lookup/1.2.3.4
```
```
{
"class_uid": 4001,
"severity_id": 4,
"dst_endpoint": { "ip": "1.2.3.4" },
"enrichments": [
{ "name": "geo", "value": { "country": "CN", "city": "Beijing" } },
{ "name": "feodo", "value": { "tags": ["C2", "Emotet"] } }
],
"attacks": [{ "technique": { "uid": "T1071" } }]
}
```
## MCP 工具
从任何兼容 MCP 的客户端(Claude Desktop、claude.ai)连接到 `http://localhost:8004/mcp`。
| 工具 | 描述 |
|------|-------------|
| `ip_lookup` | 富化单个 IP |
| `bulk_hunt` | 批量 IP 富化 |
| `asn_expand` | 将 ASN 扩展为 IP 范围 |
| `feed_status` | 查询情报源健康状态 |
| `promote_ioc` | 将 IP 提升至监控列表 |
| `explain_verdict` | 生成 IP 的人类可读判定说明 |
## 威胁情报源
### 阶段 1 — 无需 API 密钥
| 情报源 | 来源 | 更新频率 |
|------|--------|---------------|
| Feodo Tracker | abuse.ch | 每 30 分钟 |
| Emerging Threats | ProofPoint | 每 60 分钟 |
| Spamhaus DROP | Spamhaus | 每 12 小时 |
| TOR Exit Nodes | torproject.org | 每 60 分钟 |
| CINS Army | CINS | 每 60 分钟 |
| Blocklist.de | blocklist.de | 每 60 分钟 |
| SAPICS ASN | SAPICS | 每 24 小时 |
### 阶段 2 — 可选 API 密钥
| 情报源 | 环境变量 | 获取地址 |
|------|---------|-------------|
| ThreatFox | `THREATFOX_API_KEY` | [abuse.ch/threatfox](https://abuse.ch/threatfox) |
| OTX | `OTX_API_KEY` | [otx.alienvault.com](https://otx.alienvault.com) |
| Shadowserver | `SHADOWSERVER_API_KEY` | [shadowserver.org](https://www.shadowserver.org) |
| AbuseIPDB | `ABUSEIPDB_API_KEY` | [abuseipdb.com](https://www.abuseipdb.com) |
## 架构
```
┌─────────────────────────────────────────────┐
│ Clients │
│ curl / Claude Desktop / Browser UI │
└──────────────┬──────────────────────────────┘
│
┌──────────────▼──────────────────────────────┐
│ FastAPI + FastMCP │
│ app/main.py (port 8004) │
├─────────────────────────────────────────────┤
│ LookupEngine │ Enrichers │ MCP Tools │
│ (bisect) │ geo/shodan │ 6 tools │
├─────────────────────────────────────────────┤
│ IntelStore │
│ (in-memory, atomic swap) │
├─────────────────────────────────────────────┤
│ APScheduler │ SelfRepairAgent │
│ (10 cron jobs)│ (health monitoring) │
├─────────────────────────────────────────────┤
│ Feed Updaters (10) │
└─────────────────────────────────────────────┘
```
## 配置
所有配置均通过环境变量进行。将 `.env.example` 复制为 `.env`:
```
cp .env.example .env
```
核心设置:
| 变量 | 默认值 | 描述 |
|----------|---------|-------------|
| `PORT` | `8004` | 服务器端口 |
| `ADMIN_KEY` | — | 用于 admin endpoint 的必需密钥 |
| `REPAIR_AGENT_ENABLED` | `true` | 启用对降级情报源的自动修复 |
| `FRESHNESS_ALERT_HOURS` | `48` | 如果情报源数据早于 N 小时则发出警报 |
## 开发
```
# 安装依赖
pip install -r requirements.txt
# 本地运行(不使用 Docker)
uvicorn app.main:app --reload --port 8004
# 运行测试(仅单元测试,无网络)
pytest tests/ -v -m "not live_feeds"
# 运行所有测试(需要网络访问)
pytest tests/ -v
```
### 项目结构
```
app/
├── main.py # FastAPI app + FastMCP mount
├── mcp_tools.py # MCP @mcp.tool() definitions
├── intel_store.py # Unified in-memory store
├── lookup.py # Bisect engine
├── scorer.py # Risk score computation
├── repair_agent.py # Self-healing feed monitor
├── scheduler.py # APScheduler cron setup
├── ocsf.py # OCSF 4001 serialization
├── enrichers/ # Geo, Shodan, rDNS, AbuseIPDB
├── models/ # Pydantic v2 models
└── updaters/ # Per-feed update scripts (10 feeds)
```
## Claude Code 集成
本仓库提供了完整的 [Claude Code](https://claude.ai/code) 设置。当您在 Claude Code 中打开该项目时,它会自动加载:
- **项目说明** (`CLAUDE.md`) — 架构、不变量、约定和测试命令
- **专用子代理** (`.claude/agents/`) — 每个代理负责技术栈中的某一层:
| 代理 | 职责 |
|-------|------|
| `api-builder` | `app/main.py`、`app/mcp_tools.py`,所有 REST 路由和 MCP 工具 |
| `feed-builder` | `app/updaters/` — 情报源抓取、解析、验证、替换 |
| `repair-engineer` | `app/repair_agent.py`、`app/scheduler.py` — 健康状态机 |
| `schema-validator` | `app/models/`、`app/ocsf.py`、`app/config.py` — Pydantic v2 模型 |
| `test-writer` | `tests/` — pytest fixture、覆盖率、回归测试 IP |
- **自动测试钩子** (`.claude/settings.json`) — 每次编辑 Python 文件后运行 `pytest -m "not live_feeds"`
- **开发服务器启动** (`.claude/launch.json`) — 在端口 5173 启动 UI 开发服务器
无需额外设置 — 克隆仓库,在 Claude Code 中打开它,代理即可随时使用。
## 安全
要报告漏洞,请参阅 [SECURITY.md](SECURITY.md)。请勿开启公开的 issue。
## 许可证
[MIT](LICENSE)
标签:AV绕过, Docker, FastAPI, IP情报, 威胁情报, 威胁情报聚合, 安全防御评估, 开发者工具, 网络测绘, 请求拦截, 逆向工具