Как блокировать сотни тысяч фишинговых сайтов одной строчкой кода

Большинство фишинговых сайтов живут считаные дни. Мошенники регистрируют домен со схожим написанием популярного сервиса, выкачивают приватные ключи или данные карт у пары десятков невнимательных пользователей и поднимают следующий адрес. Традиционные антивирусные базы нередко запаздывают на этап анализа, когда основной урон уже нанесен.
Недавно я наткнулся на открытый проект Destroylist от команды PhishDestroy. Это не просто еще один список нехороших адресов, а развернутая система сбора угроз, которая автоматически ищет скам, проверяет контент, репортит нарушения регистраторам и отдаёт готовые фиды во всех возможных форматах.
Что внутри и кому это пригодится
В базе проекта находится более 888 тысяч отслеживаемых доменов. Из них около 180 тысяч входят в основной проверенный список фишинговых ресурсов. Проект собирает данные из 13 источников и через собственные парсеры, постоянно фильтруя ложные срабатывания.

Фид пригодится в четырех понятных сценариях:
- Настройка домашней сети или офисного DNS-сервера через Pi-hole, AdGuard Home или Unbound.
- Валидация ссылок внутри веб-сервисов, мессенджер-ботов или криптокошельков перед тем, как перенаправить пользователя.
- Обогащение данных в 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, так и через CDN jsDelivr. Второй вариант предпочтительнее, так как при частых запросах к raw-файлам GitHub легко получить 429 ошибку.
Проверка HTTP-контента и проблема клоакинга
Многие создатели черных списков ограничиваются резолвом DNS. Если домен отвечает на ping или возвращает IP-адрес, его считают живым. Но злоумышленники часто используют клоакинг: если на сайт заходит поисковый бот или автоматический сканер безопасности, ему отдают пустую страницу или заглушку. Настоящий фишинг показывается только реальным пользователям с нужными HTTP-заголовками и геопозицией.
В Destroylist есть отдельный фид с HTTP-верификацией. Скрипты проекта не просто смотрят DNS-записи, а совершают реальные HTTP-запросы каждые 12 часов и анализируют содержимое страниц.

Если страница с фишингом действительно отдается прямо сейчас, домен попадает в content_active.json. Однако авторы честно предупреждают: если сайта нет в списке с проверкой контента, это еще не значит, что он безопасен. Из-за клоакинга логичнее использовать полный список.
Бесплатный Threat Intelligence API
Если вам не хочется хранить локальную базу или регулярно обновлять текстовые файлы, у проекта есть публичный REST API. Он абсолютно бесплатен, не требует регистрации и выдачи API-ключей.
Специфика API заключается в расчете индекса риска от 0 до 100 баллов. Оценка формируется из совокупности признаков:
- Нахождение в основном списке проекта (+40 баллов)
- Подтвержденная активность по DNS (+30 баллов)
- Жалобы сообщества (+20 баллов)
- Подозрительные ключевые слова вроде airdrop, wallet, metamask (+5 баллов за каждое)
- Рискованные доменные зоны вроде
.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"
}
Для пачечных проверок предусмотрен POST-эндпоинт /v1/check/bulk, принимющий до 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. Проект живой, развивается активным сообществом и реально помогает делать сеть чище.
