zer0lightning/siftblock
GitHub: zer0lightning/siftblock
一个基于关键词过滤的可配置 DNS 黑名单生成器,从公开威胁情报源中自动聚合匹配域名并定时输出拦截列表。
Stars: 0 | Forks: 0
# SiftBlock
*过滤任意关键词。拦截匹配项。*
SiftBlock 是一个可配置的 DNS 黑名单生成器。克隆该项目,使用与你相关的术语编辑 `keywords.txt`,它会通过 GitHub Actions,按计划自动将来自公开威胁情报源中匹配的域名聚合到你自己的 `blocklist.txt` 中。
它不与任何特定品牌或事件绑定。最常见的用途是**品牌监控**:监视冒充你的公司、产品或即将发布的品牌的域名,并将其转化为你可以(或你的组织可以)实际订阅的黑名单。
## 快速开始
1. Fork 或克隆此仓库。
2. 编辑 [`keywords.txt`](keywords.txt) —— 将示例术语替换为你自己的内容(你的品牌名称、产品名称、发布代号等)。
3. 可选:编辑 [`whitelist.txt`](whitelist.txt) —— 用于存放匹配了关键字,但实际上属于你/合法的域名,确保它们永远不会被拦截。
4. 可选:编辑 [`meta.txt`](meta.txt) —— 用于在你的黑名单顶部显示的标题/描述。
5. 推送。下次计划的 GitHub Actions 运行将自动构建 `blocklist.txt` —— 无需更改代码。
该仓库附带了一个可用的示例(2026 年世界杯钓鱼术语),因此你可以在进行任何自定义之前立即看到实际输出。
## 你需要自定义的文件
| 文件 | 是否必需? | 用途 |
|---|---|---|
| `keywords.txt` | **是** | 匹配术语,每行一个,不区分大小写的子字符串匹配。这是核心目的——将其指向你的品牌。 |
| `whitelist.txt` | 可选 | 始终排除的域名,即使它们匹配关键字(及其子域名)。如果不需要,可以删除或留空。 |
| `meta.txt` | 可选 | 在 `blocklist.txt` 头部显示的 `Title:` / `Description:`。如果省略,则回退到通用的默认值。 |
**示例 —— 监控虚构的“Acme”产品发布:**
```
keywords.txt:
acme2027
acmelaunch
whitelist.txt:
acme.com
launch.acme.com
meta.txt:
Title: Acme 2027 Launch Threat Intelligence DNS Blocklist
Description: Blocks phishing and scam domains themed around the Acme 2027 launch.
```
无论你的关键字是什么,输出始终命名为 `blocklist.txt` —— 因此即使你稍后更新了关键字列表,你的订阅 URL 也永远不会改变。
## 数据源
源威胁情报列在 [`sources.txt`](sources.txt) 中(并未在脚本中硬编码),目前聚合了以下来源:
- [BlocklistProject Phishing](https://github.com/blocklistproject/Lists)
- [NoTracking Hosts Blocklists](https://github.com/notracking/hosts-blocklists)
- [Phishing.Database](https://github.com/mitchellkrogza/Phishing.Database)
- [UT1 Blacklists (phishing)](https://github.com/olbat/ut1-blacklists)
- [UT1 Blacklists (malware)](https://github.com/olbat/ut1-blacklists)
- [Maltrail](https://github.com/stamparm/maltrail)
- [Ultimate Hosts Blacklist](https://github.com/Ultimate-Hosts-Blacklist/MalwareDomainList.com)
- [StevenBlack Hosts](https://github.com/StevenBlack/hosts)
- [HaGeZi DNS Blocklists](https://github.com/hagezi/dns-blocklists)
## 格式示例
纯域名列表,每行一个条目,并带有描述性标题:
```
# 标题:Siftblock Threat Intelligence DNS Blocklist
# 描述:拦截钓鱼、诈骗和恶意软件域名。
# 关键词:rfwc26, wc2026, worldcup
# 最后修改时间:2026年6月20日 10:00 UTC
# 条目数量:1521
# worldcup-tickets-scam.com
fake-worldcup26.net
...
```
## 工作原理
`generate_blocklist.py` **并发**获取 `sources.txt` 中的每个源,根据 `keywords.txt` 过滤所有域名,移除所有被 `whitelist.txt` 覆盖的内容,进行去重、排序,最后写入 `blocklist.txt`。GitHub Actions 工作流每小时运行一次此操作,并且仅在内容发生更改时提交结果。
```
.github/workflows/blocklist.yml ← hourly: generates blocklist.txt
.github/workflows/blocklist-daily.yml ← daily: new-domain diff
generate_blocklist.py ← fetch + sift engine
scripts/build_daily_header.py ← header builder used by the daily workflow
sources.txt ← threat-intel feed URLs
keywords.txt ← YOUR match terms — edit this
whitelist.txt ← YOUR exclusions — edit this
meta.txt ← YOUR title/description — edit this
blocklist.txt ← generated output (updated hourly)
blocklist-snapshot.txt ← previous-day reference (auto-managed)
daily/YYYY-MM-DD.txt ← new domains observed per day
```
### 可靠性保障
如果以下任一情况看起来像是部分数据获取失败而不是真实的数据变动,脚本将中止运行且**不会修改 `blocklist.txt`**:
- 少于 50% 的已配置数据源返回了数据(例如 GitHub 宕机或速率限制)。
- 新条目数少于上一次运行数量的 50%。
这可以防止短暂的网络波动用一个空白或几乎空白的列表覆盖掉优秀的黑名单。
### 工作流调度
每小时和每日运行的工作流共享一个 GitHub Actions 并发组(`siftblock-write`),因此它们永远不会同时运行——或同时推送——即使它们的 cron 定时恰好在同一分钟(UTC 午夜)。每日差异任务本身也不会重新获取数据源;它直接复用每小时任务刚刚生成的 `blocklist.txt`。
### 每日差异
每天 UTC 午夜,第二个工作流会将当前的黑名单与前一天的快照进行比较,并将**新观察到的域名**写入 `daily/YYYY-MM-DD.txt` 中——这是一份记录域名首次出现时间的持续日志。
## 误报
如果合法域名被拦截,请[提交一个 Issue](https://github.com/zer0lightning/siftblock/issues) 并附上该域名以及应将其移除的简短理由——或者如果这是你自己的 Fork,你可以直接将其添加到 `whitelist.txt` 中。
## 许可与免责声明
请参阅 [DISCLAIMER.md](DISCLAIMER.md)。输出内容按“原样”提供,不带任何担保。底层威胁情报数据的荣誉完全归属于上游数据源的维护者。
标签:DNS, Docker 部署, GitHub Actions, 品牌保护, 威胁情报, 开发者工具, 网络运维, 自动笔记, 逆向工具, 黑白名单生成