如何用一行代码屏蔽数十万个钓鱼网站
大多数钓鱼网站只存活几天。诈骗者注册一个与热门服务名称相似的域名,从几十个粗心的用户那里窃取私钥或信用卡数据,然后转向下一个地址。传统杀毒软件的数据库往往在分析阶段就落后了,此时主要损害已经造成。
最近我发现了PhishDestroy团队的开源项目Destroylist。它不仅仅是一个恶意地址列表,而是一个全面的威胁情报收集系统,能够自动搜索诈骗内容、验证网页、向注册机构报告违规行为,并以各种可用格式提供现成的订阅源。
包含什么内容,适合谁使用
该项目的数据库包含超过88.8万个跟踪域名。其中约18万个位于钓鱼资源的主要验证列表中。项目通过自有的解析器从13个来源收集数据,持续过滤误报。

该订阅源在四种明确的场景中很有用:
- 通过Pi-hole、AdGuard Home或Unbound配置家庭网络或办公室DNS服务器。
- 在重定向用户之前,验证Web服务、即时通讯机器人或加密货币钱包中的链接。
- 在SOC或OSINT研究工具中丰富数据。
- 训练自己的流量过滤模型。
多种格式的订阅源和快速Redis集成
该仓库的一个很好的特点是,作者考虑到了你将如何获取数据。你不需要编写解析器来清理日志或动态转换JSON。项目目录包含针对各种工具的现成文件:
- Hosts文件(适用于Pi-hole、
/etc/hosts或Windows) - AdBlock(适用于uBlock Origin和AdGuard)
- Dnsmasq
- Unbound(适用于pfSense和OPNsense)
- RPZ(适用于BIND和Knot DNS)
- Redis
如果你需要将最新订阅源加载到Redis中进行O(1)查找,仓库中包含一个现成的一行命令:
curl -s https://cdn.jsdelivr.net/gh/phishdestroy/destroylist@main/rootlist/formats/primary/redis.txt | redis-cli --pipe
运行此命令后,在evil-domain.com检查地址变得即时完成:
SISMEMBER destroylist:primary evil-domain.com
所有列表都可以直接从GitHub获取,也可以通过jsDelivr CDN获取。第二种方式更可取,因为频繁请求原始GitHub文件很容易导致429错误。
HTTP内容验证和伪装问题
许多黑名单创建者仅限使用DNS解析。如果域名响应ping或返回IP地址,就被认为是活跃的。但攻击者经常使用伪装:如果搜索引擎机器人或自动化安全扫描器访问网站,它会得到一个空白页面或占位符。实际的钓鱼内容只向具有正确HTTP头和地理位置的真实用户显示。
Destroylist有一个单独的HTTP验证订阅源。项目的脚本不只是检查DNS记录——每12小时发起真实的HTTP请求并分析页面内容。
如果钓鱼页面当前正在提供服务,该域名会被添加到content_active.json中。然而,作者诚实地警告:如果一个网站不在内容检查列表中,这并不意味着它是安全的。由于伪装,使用完整列表更合乎逻辑。
免费的威胁情报API
如果你不想存储本地数据库或定期更新文本文件,该项目有一个公共REST API。它完全免费,无需注册,也不需要API密钥。
该API的特别功能是0到100分的风险评分计算。评分由以下因素组合形成:
- 存在于项目主列表中(+40分)
- 确认的DNS活动(+30分)
- 社区报告(+20分)
- 可疑关键词如airdrop、wallet、metamask(每个+5分)
- 高风险TLD如
.xyz、.top、.club(+5分)
你可以通过cURL用一条命令检查域名:
curl "https://api.destroy.tools/v1/check?domain=suspicious-site.xyz"
响应是一个透明的JSON,包含威胁级别(severity)和获得的分数:
{
"domain": "suspicious-site.xyz",
"threat": true,
"risk_score": 85,
"severity": "critical"
}
对于批量检查,/v1/check/bulk有一个POST端点,每次请求最多接受500个域名。如果你要过滤用户输入或批量处理传入的日志,这很方便。
定期检查的Python示例:
import requests
def check_domain(domain: str) -> bool:
response = requests.get(f"https://api.destroy.tools/v1/check?domain={domain}")
if response.status_code == 200:
data = response.json()
return data.get("threat", False)
return False
if check_domain("suspicious-site.xyz"):
print("Внимание! Домен находится в черном списке.")
对抗注册商和自动化
Destroylist不仅作为一个数据库有趣,而且作为自动化对抗滥用的先例也很有意义。项目作者开发了一个管道,在检测到威胁后生成证据(截图、流量转储、WHOIS转储),并向托管提供商、注册商以及超过50个安全服务(包括Google Safe Browsing、VirusTotal、Cloudflare和Microsoft Security)发送正式投诉。
仓库透明地维护所有提交滥用报告的历史记录。项目发布关于忽视ICANN要求、几个月不响应数十份滥用报告的注册商的报告。
如果合法域名意外被误伤,网站上有一个申诉表单和公开的GitHub Issues。作者会及时处理请求,并将更正的地址添加到allowlist.json文件中。

总结
Destroylist是一个成熟的开源工具(MIT许可证),更新频率很高。由于其灵活的导出结构,可以轻松集成到家庭Pi-hole和需要实时过滤诈骗的生产服务中。
查看仓库,获取你需要的订阅源格式,或者保存免费的API地址。项目是活跃的,由社区积极开发,真正有助于让网络更清洁。
相关项目