AuvaLabs/threatwatch
GitHub: AuvaLabs/threatwatch
一款零成本、自托管的网络威胁情报仪表板,聚合 142 个 RSS 和暗网源,提供十分钟级刷新的威胁态势视图。
Stars: 0 | Forks: 0
# ThreatWatch
**零成本、自托管的网络威胁情报平台**
[](https://www.python.org/)
[](LICENSE)
[](docker-compose.yml)
[]()
[]()
[](https://github.com/AuvaLabs/threatwatch)
**[在线演示](https://threatwatch.auvalabs.com)** · **[GitHub Pages](https://auvalabs.github.io/threatwatch/)**
聚合来自 142 个 RSS 源和暗网源的威胁情报,按类别对文章进行分类,并提供实时仪表板。在你自己的基础设施上运行。无需 API 密钥。
[功能特性](#features) · [快速开始](#quick-start) · [仪表板](#dashboard) · [架构](#architecture) · [API](#api-endpoints) · [贡献](#contributing)
## 仪表板预览

## 功能特性
### 采集
- 142 个 RSS 源(安全博客、Google News、Bing News、全球 CERT)
- 暗网监控(ThreatFox IOC、勒索软件受害者追踪、C2 服务器 IP)
- 10 分钟刷新周期,自动部署到 GitHub Pages
- 8 线程并行获取,数秒内处理完所有源
- 滚动 7 天时间窗口,支持跨管道运行合并
### 分类
- 22 个威胁类别:勒索软件、零日漏洞、APT、DDoS、供应链等
- 75+ 个威胁行为者和恶意软件家族(APT28、LockBit、Lazarus Group 等)
- 80+ 个国家/地区,支持地理归因
- 15 个行业部门
- 噪声过滤:自动排除产品公告、职位列表、融资轮次
- 基于正则表达式的关键词分类器,无需调用 API
### 去重
- 使用词元倒排索引进行模糊匹配
- 比原生成对比较快 24 倍
- 跨区域合并,采用内容优先的区域归因
### 仪表板
- 服务端渲染,加载时间不到一秒
- 单个 HTML 文件,无构建步骤,无框架
- 自动生成的威胁情报简报(普通模式)
- 可选 AI 驱动的简报(支持任何 LLM 提供商 —— 在 UI 中切换)
- 关键事件面板,包含直接文章链接
- 威胁行为者聚焦和行业影响面板,支持下钻
- 区域过滤器(Global、NA、EMEA、MENA、APAC、LATAM)—— 感知内容
- 类别过滤器(勒索软件、违规、DDoS、APT 等)
- 文章详情视图,包含 IOC 提取(CVE、IP、哈希、域)
- 亮色和暗色主题
### 集成
- RSS 源输出,适用于阅读器和 SIEM
- JSON API,用于程序化访问
- 启用 CORS,支持嵌入其他仪表板
## 快速开始
### Docker Compose(推荐)
```
git clone https://github.com/AuvaLabs/threatwatch.git
cd threatwatch
# 创建 .env file (可选,无文件也可运行)
cp .env.example .env
# 启动所有服务
docker compose up -d
```
管道在启动时立即运行,随后每 10 分钟运行一次。仪表板地址为 **http://localhost:8098**。
### 手动设置
```
# 克隆
git clone https://github.com/AuvaLabs/threatwatch.git
cd threatwatch
# 安装 dependencies
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
# 创建 data directories
mkdir -p data/output/hourly data/output/daily \
data/state/ai_cache \
data/logs/run_logs data/logs/summaries
# 运行 pipeline
python threatdigest_main.py
# 启动 dashboard server
python serve_threatwatch.py
```
如需自动刷新,请添加 cron 作业:
```
*/10 * * * * cd /path/to/threatwatch && /path/to/venv/bin/python threatdigest_main.py >> data/logs/cron.log 2>&1
```
## 配置
### 环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
| `PORT` | `8098` | 仪表板服务器端口 |
| `SITE_DOMAIN` | `localhost:8098` | RSS 源链接的域名 |
| `FEED_CUTOFF_DAYS` | `7` | 文章滚动窗口 |
### 可选:AI 驱动简报
ThreatWatch 无需任何 API 密钥即可工作。要启用 AI 驱动的简报,请配置任何兼容 OpenAI 的 LLM 提供商:
| 变量 | 默认值 | 描述 |
|---|---|---|
| `LLM_API_KEY` | _(空)_ | 你的 LLM 提供商的 API 密钥 |
| `LLM_BASE_URL` | `https://api.openai.com/v1` | API 基础 URL |
| `LLM_MODEL` | `gpt-4o-mini` | 模型名称 |
| `LLM_PROVIDER` | `auto` | `auto`、`openai`、`anthropic`、`ollama` |
支持 OpenAI、Groq、Together、Ollama(免费/本地)、Mistral、DeepSeek 以及任何兼容 OpenAI 的 API。
### 源配置
源在 `config/` 目录下的 YAML 文件中定义:
| 文件 | 描述 |
|---|---|
| `feeds_native.yaml` | 安全博客、供应商公告、CERT |
| `feeds_google.yaml` | Google News 搜索查询 |
| `feeds_bing.yaml` | Bing News 搜索查询 |
编辑这些文件以添加或删除源。无需重启。更改将在下一次管道运行时应用。
## 架构
**管道** (`threatdigest_main.py`):源 > 获取 > 去重 > 抓取 > 分类 > AI 简报(可选) > 输出
**服务器** (`serve_threatwatch.py`):Python HTTP 服务器,支持 SSR、ETag 缓存、gzip、CORS
**前端** (`threatwatch.html`):单个 HTML 文件。无构建步骤,无框架。
**存储**:平面 JSON 文件。无数据库,无 Redis,无消息队列。
### 项目结构
```
threatdigest_main.py # Pipeline orchestrator
serve_threatwatch.py # HTTP server with SSR
threatwatch.html # Dashboard UI (single file)
modules/
├── feed_loader.py # YAML feed config parser
├── feed_fetcher.py # Parallel RSS fetcher
├── deduplicator.py # Fuzzy dedup (word-shingle index)
├── article_scraper.py # Full-text extraction
├── keyword_classifier.py # Zero-cost regex classifier
├── briefing_generator.py # AI briefing (any LLM provider)
├── darkweb_monitor.py # Dark web intel aggregation
├── output_writer.py # JSON/RSS output
├── config.py # Global configuration
└── ...
config/
├── feeds_native.yaml # Security blogs & CERTs
├── feeds_google.yaml # Google News feeds
└── feeds_bing.yaml # Bing News feeds
scripts/
├── deploy_gh_pages.py # GitHub Pages static deploy
├── validate_feeds.py # Feed health checker
├── cleanup.py # Data cleanup utility
└── weekly_digest.py # Weekly summary generator
data/
├── output/ # JSON + RSS output files
├── state/ # Pipeline state & cache
└── logs/ # Run logs & summaries
tests/ # Test suite
docker-compose.yml # Two-service deployment
Dockerfile # Python 3.11-slim based
```
## API 端点
服务器默认在端口 **8098** 上运行:
| 方法 | 路径 | 描述 |
|---|---|---|
| `GET` | `/` | 仪表板(服务端渲染 HTML) |
| `GET` | `/api/articles` | 所有文章(JSON) |
| `GET` | `/api/articles?offset=0&limit=20` | 分页文章 |
| `GET` | `/api/briefing` | 威胁情报简报 |
| `GET` | `/api/stats` | 管道运行统计 |
| `GET` | `/api/rss` | RSS 源(XML) |
所有 JSON 端点均支持 CORS、ETag 条件请求和 gzip 压缩。
## 运行测试
```
# 安装 dev dependencies
pip install -r requirements.txt
# 运行 tests
pytest tests/ -v
# 运行 with coverage
pytest tests/ --cov=modules --cov-report=term-missing
```
## 安全
有关我们的安全策略以及如何报告漏洞,请参阅 [SECURITY.md](SECURITY.md)。
## 行为准则
本项目遵循 [Contributor Covenant](CODE_OF_CONDUCT.md)。参与本项目即表示你同意遵守此准则。
## 许可证
[MIT](LICENSE) — 可免费用于个人和商业用途。
作者:[Nicholai Imbong](https://github.com/nicholaiimbong) · [AuvaLabs](https://github.com/AuvaLabs)
[](https://buymeacoffee.com/nicholaiimbong)
标签:APT, Docker, ESC4, HTTP/HTTPS抓包, IOC, nuclei, OSINT, Petitpotam, Python, RSS聚合, Self-hosted, TIP, 仪表盘, 勒索软件, 多模态安全, 威胁情报, 威胁源, 安全运营, 安全防御评估, 开发者工具, 态势感知, 恶意软件, 情报收集, 扫描框架, 无后门, 暗网监控, 构建工具, 漏洞研究, 网络安全, 网络调试, 自动化, 请求拦截, 隐私保护, 零成本, 零日漏洞