rajshevde-01/Threat-Feed-Aggregator
GitHub: rajshevde-01/Threat-Feed-Aggregator
一款轻量级威胁情报聚合与标准化平台,将多个公开威胁源统一采集、去重并提供 Web 仪表盘和 REST API 供检索分析。
Stars: 0 | Forks: 0
# 威胁源聚合器与标准化工具
集中管理来自 11 个以上公开源的威胁情报,将其标准化至统一的数据库中,并通过 Web 仪表盘和 REST API 进行搜索和分析。
## *免责声明
## iocs.json 未包含在内
`data/iocs.json` 文件已从本仓库中移除,因为它包含敏感信息和机密。**切勿将任何密钥或凭证提交到本仓库。**
若要使用本项目,您必须在 `data/` 目录中提供自己的 `iocs.json` 文件。在提交或推送到 GitHub 之前,请确保您的文件不包含任何敏感密钥或凭证。
**切勿将密钥、API 凭证或敏感数据分享或上传至公开仓库。**
如果您需要模板,请创建一个空的 `iocs.json` 或使用您自己的威胁源导出文件。
## 项目结构
```
├── src/aggregator/
│ ├── app.py # Flask app with REST API
│ ├── cli.py # CLI commands (fetch, schedule, search, dashboard)
│ ├── fetcher.py # HTTP feed fetching with retries
│ ├── parsers.py # TXT/CSV/JSON parsers
│ ├── normalizer.py # Schema normalization + type detection
│ ├── store.py # SQLite CRUD and advanced search
│ └── utils.py # Config loading and logging
├── templates/
│ └── index.html # Dashboard UI (Jinja2)
├── static/
│ ├── styles.css # Dashboard styling (dark/light theme)
│ ├── theme.js # Theme switcher (localStorage)
│ └── styles.css # Signal-room aesthetic design
├── config/
│ └── feeds.json # 11 threat feeds (TXT, CSV, JSON)
├── scripts/windows/ # Windows Task Scheduler setup scripts
├── Dockerfile # Container image
├── docker-compose.yml # Multi-service orchestration
└── run_cli.py # CLI entry point
```
## 为什么选择这个项目?
**问题所在:**
- 安全团队需要监控多个来源(AbuseIPDB、URLhaus、OpenPhish 等)的威胁
- 每个源都有不同的格式(TXT、CSV、JSON)和结构
- 人工汇总既耗时又容易出错
- 缺乏统一的界面来对来源进行去重和搜索
- 将源集成到安全工具中需要编写自定义代码
**解决方案:**
此工具自动获取威胁源,将其标准化为统一的 SQLite 数据库,并提供:
- **单一事实来源**:所有 IOC(入侵指标)在源之间进行去重
- **快速搜索**:在 <500ms 内通过简单匹配/正则/CIDR 查询 IP、域名、URL
- **Web 仪表盘**:具有深色/浅色主题界面的 UI,供分析师搜索和筛选威胁
- **REST API**:程序化访问,以便与 SIEM、防火墙或自定义工具集成
- **定时更新**:通过 CLI 调度或 Docker 自动获取源
## 功能特性
- 通过 HTTP 获取源
- 解析 TXT、CSV、JSON 格式
- 标准化结构:`type | value | source | severity | date_added`
- 跨源去重
- IOC 类型标记(ip、domain、url)
- 统一的 IOC 数据库(SQLite)
- 具有深色/浅色主题切换功能的 Web 仪表盘
- 高级搜索:简单、正则、CIDR 范围
- 用于程序化访问的 REST API
- 搜索/筛选工具(CLI)
- 具有重试和日志记录功能的弹性获取
- 基于间隔的调度
## 使用案例
**SOC 分析师**:在所有威胁源中搜索可疑的 IP/域名,无需切换标签页
```
python run_cli.py search --query 192.168.1.1 --db data/iocs.db --search-mode simple
```
**安全工程师**:构建每日更新的防火墙阻止列表,包含所有高危威胁
```
python run_cli.py fetch --feeds config/feeds.json --db data/iocs.db --export-json blocklist.json
# 导出 JSON → firewall API 集成
```
**威胁猎手**:通过 REST API 查询威胁,用于自定义分析/报告工具
```
curl 'http://localhost:5000/api/iocs?query=phishing&type=url&search_mode=regex'
```
**DevOps/安全团队**:通过 Docker 运行自动化的每日源更新
```
docker-compose up # Scheduled fetches + dashboard + API
```
## 系统要求
- Python 3.10+
## 快速开始
```
# 1. 安装依赖
pip install -r requirements.txt
# 2. 获取并规范化威胁源
python run_cli.py fetch --feeds config/feeds.json --db data/iocs.db
# 3. 启动 Web Dashboard
python run_cli.py dashboard --db data/iocs.db --host 127.0.0.1 --port 5000
# 打开 http://127.0.0.1:5000 → 搜索、过滤、切换 Dark Mode
# 或使用 REST API
curl 'http://127.0.0.1:5000/api/iocs?query=192.168&type=ip'
```
## 设置
1. 创建并激活虚拟环境
2. 安装依赖:
```
pip install -r requirements.txt
```
## 包含的威胁源
默认配置聚合了 **11 个公开威胁源**,涵盖恶意软件、网络钓鱼、僵尸网络和垃圾邮件:
| 源 | 类型 | 来源 |
|------|------|--------|
| Feodo (AbuseIPDB) | 僵尸网络 C2 | abuse.ch |
| OpenPhish | 钓鱼 URL | openphish.com |
| URLhaus | 恶意软件 URL | urlhaus.abuse.ch |
| PhishTank | 网络钓鱼 | phishtank.com |
| Spamhaus DROP | 垃圾邮件/僵尸网络 | spamhaus.org |
| Spamhaus eDROP | 垃圾邮件/僵尸网络 | spamhaus.org |
| BlockList.de | 暴力破解 IP | blocklist.de |
| Firehol | 多源 | firehol.org |
| CINS Army | DDoS/垃圾邮件 | cinsscore.com |
| AbuseIPDB SSL 黑名单 | 恶意 SSL 证书 | abuse.ch |
**总计**:178,000+ 个唯一 IOC,全部经过去重并标准化为单一结构。
通过编辑 `config/feeds.json` 添加或自定义源。
## 配置源
编辑示例配置:
- `config/feeds.json`
每个源条目包括:
- `name`
- `url`
- `format` (txt, csv, json)
- `severity` (可选)
- `enabled` (可选)
## 获取并标准化源
```
python run_cli.py fetch --feeds config/feeds.json --db data/iocs.db --export-json data/iocs.json
```
可选的限制和重试控制:
```
python run_cli.py fetch --feeds config/feeds.json --db data/iocs.db --max-total 200000 --max-per-feed 50000
```
## 定时获取
```
python run_cli.py schedule --feeds config/feeds.json --db data/iocs.db --interval 3600
```
## 自动化
### Docker (可选)
构建一次并运行一次性获取:
```
docker compose run --rm fetch
```
在长期运行的容器中运行调度器:
```
docker compose up schedule
```
在容器中运行仪表盘:
```
docker compose up dashboard
```
### Windows 任务计划程序
创建或更新计划任务(从仓库根目录运行):
```
powershell -ExecutionPolicy Bypass -File scripts/windows/create_scheduled_task.ps1 -IntervalMinutes 60
```
移除任务:
```
powershell -ExecutionPolicy Bypass -File scripts/windows/remove_scheduled_task.ps1
```
## 搜索 IOC 数据库
```
python run_cli.py search --db data/iocs.db --type ip --query 1.2.
```
## 运行仪表盘
```
python run_cli.py dashboard --db data/iocs.db --host 127.0.0.1 --port 5000
```
仪表盘默认监听 127.0.0.1:5000。
### 高级搜索
仪表盘包含三种搜索模式:
1. **简单**(默认) - 子串匹配
- `192.168` 查找所有包含该子串的 IP
2. **正则** - 完整正则表达式支持
- `^192\.168` 查找以 192.168 开头的 IP
- `malware.*c2` 查找匹配该模式的 URL
3. **CIDR** - 基于网络的查询(仅限 IP)
- `192.168.0.0/16` 查找子网内的所有 IP
- `10.0.0.0/8` 用于更广泛的范围
组合筛选器:搜索 + 类型 + 来源 + 严重程度 + 日期范围
### REST API
用于程序化访问的完整 JSON API:
```
# 健康检查
curl http://127.0.0.1:5000/api/health
# 获取统计信息
curl http://127.0.0.1:5000/api/stats
# 分页搜索
curl 'http://127.0.0.1:5000/api/iocs?query=192.168&type=ip&page_size=50'
# 正则搜索
curl 'http://127.0.0.1:5000/api/iocs?query=^10\.&search_mode=regex&type=ip'
# CIDR 搜索
curl 'http://127.0.0.1:5000/api/iocs?query=192.168.0.0/16&search_mode=cidr&type=ip'
# 获取可用过滤器
curl http://127.0.0.1:5000/api/filters
```
完整端点文档请参阅 [API.md](API.md)。
## 输出结构
导出时,每条 IOC 记录均以 JSON 格式存储:
```
{
"type": "ip",
"value": "1.2.3.4",
"source": "example-feed",
"severity": "medium",
"date_added": "2026-02-13T00:00:00Z"
}
```
## 注意事项
- 部分源包含标头、注释或额外列;解析器会尝试处理常见情况。
- 标记为 `enabled: false` 的源将被跳过,直到您将其设置为 true。
- 日志默认写入 `logs/ingest.log`。
- ThreatFox 导出需要 auth-key;获取后请更新 URL 并启用该源。
- Spamhaus EDROP 列表已合并至 DROP 中。
- abuse.ch SSLBL IP 黑名单已被标记为弃用。
## 免责声明
本工具聚合了来自开源源的**公开威胁情报**。按“原样”提供,用于安全研究和防御目的。
**请负责任地使用:**
- ✅ 在防火墙和 WAF 中阻止恶意 IP/域名
- ✅ 增强您的检测和响应能力
- ✅ 支持合法的安全运营
- ❌ 切勿用于攻击性操作或未授权访问
- ❌ 切勿在无适当署名的情况下重新分发威胁数据
- ❌ 切勿用于非法活动
威胁源的准确性和完整性取决于其维护者。在采取行动之前,请务必与您自己的安全团队一起验证发现结果。
## 作者
**Raj Shevde**
- 🔗 **LinkedIn**: [linkedin.com/in/raj-shevde](https://www.linkedin.com/in/raj-shevde/)
- 📧 联系方式:如有问题、反馈或合作,请通过 LinkedIn 联系
**贡献**:发现了 Bug 或有功能建议?提交 Issue 或发送 Pull Request!
标签:Docker, ESC4, ETL, Flask, IOC聚合, JavaCC, Jinja2, NIDS, OSINT, Python, REST API, SQLite, Web Dashboard, 失陷指标, 威胁情报, 威胁源聚合, 威胁猎杀, 安全运营, 安全防御评估, 容器化, 开发者工具, 恶意软件情报, 情报分析, 扫描框架, 数据清洗, 文档结构分析, 无后门, 网络安全, 网络测绘, 网络诊断, 自动化收集, 请求拦截, 逆向工具, 隐私保护, 黑白名单