开源项目
phishdestroy/destroylist avatar
phishdestroy/destroylist

Destroylist:一份带 DNS 验证和内容核验的钓鱼域名黑名单

实时网络钓鱼和诈骗域名黑名单、190k+ 精选威胁、888K+ 社区、免费 API、多种格式。

1,802 个 Star501 个 ForkHTMLMIT

秒懂

它是什么?
Destroylist 提供实时更新的钓鱼与诈骗域名黑名单,覆盖 Pi-hole、AdGuard Home、dnsmasq 等多种格式,并附带威胁情报 API。本文基于仓库文档,分析其数据分层、验证机制和适用边界。
适合谁用?
适合需要快速接入 DNS 级防护的个人或小型团队,尤其是 Pi-hole 和 AdGuard Home 用户,直接粘贴 jsDelivr 链接即可生效。不适合对数据来源有严格审计要求的企业,因为社区列表聚合自 13 个以上来源,且内容验证依赖 HTTP 状态,无法保证零误报。
能商用吗?
可以。MIT 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库在最近一天内有新的提交。
用什么语言写的?
主要是 HTML(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。

开源项目深度解析

它解决什么问题,给谁用

Destroylist 解决的是钓鱼和诈骗域名的实时拦截问题。仓库描述称其包含 19 万以上精选威胁,并有 88 万以上社区成员参与。它面向的是不想自己维护威胁情报源的人:家庭网络管理员、小型企业 IT、或者任何运行 Pi-hole 或 AdGuard Home 的用户。你不需要搭建分析管道,只要把一条 URL 粘贴进屏蔽列表设置,就能获得持续更新的域名黑名单。它同时提供多种格式,适配 dnsmasq、Unbound、RPZ 等不同 DNS 软件,这让它比单一格式的列表更通用。

数据分层:主列表、社区列表和实时验证

仓库把数据分成 Primary 和 Community 两层。Primary 是人工精选的钓鱼域名,更新频率标为实时;Community 聚合自 13 个以上来源,每两小时更新一次。在这两层之上还有 Live 版本,即经过 DNS 验证确认仍然活跃的域名,每 24 小时更新。更细的一层是 Content 版本,它通过 HTTP 内容验证来判断域名是否仍在钓鱼,Primary Content 每 12 小时更新。这个分层设计有实际意义:Primary 适合生产环境,因为误报率更低;Community 适合追求最大覆盖,但需要容忍更多噪声。Live 列表则解决了黑名单常见的死域名问题,很多钓鱼域名很快失效,DNS 验证能过滤掉已经无法解析的条目。

验证机制:DNS 和 HTTP 双重检查

文档明确区分了 DNS 验证和内容验证。Primary Live 和 Community Live 通过 DNS 解析确认域名仍然活跃,这意味着列表只保留能解析的域名,减少无效条目。Primary Content 和 Community Content 则进一步做 HTTP 内容验证,检查域名是否仍在提供钓鱼内容。这个机制是 Destroylist 与静态黑名单的关键区别。静态列表往往包含大量已经失效的域名,浪费查询资源。而内容验证能捕捉到域名被重新用于合法用途的情况,虽然文档没有说明验证的具体频率和超时策略,但 12 小时和 24 小时的更新间隔暗示验证过程是批量运行的。对于依赖 DNS 拦截的防火墙,使用 Live 版本可以显著减少无效规则。

获取与集成:一条 URL 搞定

快速开始部分给出了最直接的用法:把 `https://cdn.jsdelivr.net/gh/phishdestroy/destroylist@main/rootlist/formats/primary_active/hosts.txt` 粘贴到 Pi-hole 或 AdGuard Home 的屏蔽列表设置。仓库推荐使用 jsDelivr CDN 链接,理由是全局 CDN 无速率限制,而 GitHub 原始链接在流量大时可能返回 429。这提醒了一个现实问题:依赖 GitHub raw 的自动更新脚本容易触发限流。除了 hosts 格式,还有 TXT、AdBlock、dnsmasq、Unbound 和 RPZ 格式,每种格式都对应 Primary 和 Community 的 Live 版本。对于需要编程访问的场景,仓库提供了威胁情报 API,但没有给出具体端点示例,只说明了 API 返回的是规范化后的唯一域名,因此数值会低于原始条目数。

误报与申诉:allowlist 和人工流程

任何黑名单都面临误报风险,Destroylist 用 allowlist 来缓解。文档列出了 `allow/allowlist.json`,标注为手动更新,用于误报保护。这意味着如果你发现某个域名被错误屏蔽,可以提交申诉,但流程是人工处理的,响应时间取决于社区活跃度。这里有个实际局限:allowlist 是全局的,不是针对单个用户的。如果你用 Community 列表,误报概率更高,因为聚合来源众多,每个来源的判定标准不同。对于企业用户,这可能是致命问题,一个被误杀的域名可能导致业务中断。文档没有提供误报率数据,也没有说明 allowlist 的更新频率,所以你在生产环境使用前,需要自己监控 DNS 查询日志,及时识别被误封的合法域名。

维护成本与许可

项目使用 MIT 许可证,这意味着你可以自由使用、修改和分发,甚至集成到商业产品中,只需保留版权声明。维护成本方面,你不需要自己更新列表,但需要关注列表格式的变化。仓库有 releases 标签,最近的 `archives` 发布表明历史归档是自动生成的。不过,项目的主要维护者是社区,依赖社区提交和验证。如果维护者停止活跃,列表可能停止更新,钓鱼域名会迅速积累。另外,CDN 链接指向 `main` 分支,这意味着列表内容会随每次推送变化,如果你需要可复现的版本,应该固定到具体 release 或 commit。文档没有提供版本化下载的明确指引,这是你在自动化部署中需要自己解决的问题。

与其他黑名单的差异:验证深度决定适用场景

常见的黑名单如 StevenBlack 的 hosts 文件主要是聚合和去重,缺少实时验证。Destroylist 的差异在于它把 DNS 验证和内容验证作为数据管道的一部分,生成 Live 和 Content 版本。这带来两个优势:一是减少无效条目,二是能识别域名状态变化。但代价是更新延迟,Live 列表 24 小时才更新一次,对于快速变化的钓鱼域名,这可能不够及时。相比之下,一些商业威胁情报源提供分钟级更新,但需要付费。Destroylist 选择用社区力量换取免费,用批量验证换取覆盖。如果你的场景是家庭路由器,24 小时延迟可以接受;如果是金融行业的实时防护,这个延迟可能太大。你需要根据自身对时效性的要求来选择。

编辑结论

适合需要快速接入 DNS 级防护的个人或小型团队,尤其是 Pi-hole 和 AdGuard Home 用户,直接粘贴 jsDelivr 链接即可生效。不适合对数据来源有严格审计要求的企业,因为社区列表聚合自 13 个以上来源,且内容验证依赖 HTTP 状态,无法保证零误报。首次部署前应先核对 allowlist.json 中的豁免域名,并确认你的使用场景能接受社区数据的波动。若追求更严格的供应链安全,建议同时订阅其他独立黑名单做交叉验证。最终判断:Destroylist 作为免费、多格式的实时黑名单,实用性高,但它的可信度建立在持续维护和社区反馈之上,你需要把它当作动态数据源,而不是一次性导入的静态文件。

官方来源

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
社区笔记

社区笔记