Spamhaus: кто на самом деле слушает DROP

Частная некоммерческая организация, зарегистрированная в Андорре, ведёт список сетей, которые интернету предлагается не маршрутизировать вообще. Список называется DROP — Do not Route Or Peer. Формулировка предельная: не пометить письмо, не отправить в спам, а не пропускать трафик как таковой.

Притязание сильное. Вопрос, который стоит задавать любому такому притязанию, звучит скучно и неудобно: а кто, собственно, слушается? Не «кто мог бы», не «кто по идее должен», а кто на практике, сегодня, в проводах.

Мы измерили. Не мнением, а сокетами.

Кто ведёт список

The Spamhaus Project основан Стивом Линфордом в Лондоне в 1998 году. Сегодня это некоммерческая компания The Spamhaus Project SLU, зарегистрированная в Андорре под номером 18159. Она составляет и бесплатно публикует репутационные списки: SBL, XBL, PBL, DROP и другие.

Рядом стоит вторая структура — Spamhaus Technology Ltd, коммерческая компания в Лондоне. Собственными словами организации: когда «запросы на доставку в реальном времени и в объёме выросли, мы сделали эти данные доступными через партнёра, Spamhaus Technology». То есть некоммерческий проект производит списки, коммерческая компания продаёт к ним промышленный доступ.

Это не обвинение. Это структура, и её стоит держать в голове, когда читаешь оценку охвата: организация заявляет о защите 4,5 миллиарда пользователей. Цифра описывает потенциальный охват данных, а не число сетей, которые исполняют самую жёсткую рекомендацию из всех.

Что именно означает DROP

SBL — ручной листинг за спам и злоупотребления. DROP — его подмножество: блоки, которые Spamhaus считает целиком находящимися под контролем криминала, с рекомендацией не маршрутизировать и не пирить. Список публикуется машиночитаемо, сегодня в формате drop_v4.json.

Два блока, на которых построен этот замер:

Важная деталь: один тикет на весь блок означает, что списывается не «пара грязных адресов», а сеть целиком. Это максимально жёсткая форма листинга, какая у Spamhaus есть.

Стенд: один хост, два адреса

Обычная ошибка таких проверок — сравнивать разные машины и записывать в репутацию то, что на деле география, провайдер и маршрут. Здесь этой ошибки нет.

Оба адреса живут на одном и том же пограничном сервере, уходят через один аплинк, один default route, один сетевой стек. Отличается ровно один параметр — какой адрес источника привязывается к сокету:

Всё, что разойдётся между ними, — это чистая репутация адреса, без примесей. Всего 57 назначений и 168 соединений.

Маршрутизация: рекомендацию не исполняют

Самое сильное утверждение о DROP — что список заезжает в BGP-фильтры транзитных операторов и префикс перестаёт быть виден. Это проверяется напрямую: сколько full-feed пиров RIPE RIS видят анонс.

ПрефиксСтатусВидимость
91.240.118.0/24SBL + DROP322/328 — 98,2%
109.238.87.0/24SBL + DROP324/328 — 98,8%
212.116.240.0/24чист328/328 — 100%
1.1.1.0/24 (Cloudflare)эталон84/85 — 98,8%

Блок, помеченный «не маршрутизировать и не пирить», виден в мировой таблице маршрутизации ровно так же хорошо, как префикс Cloudflare. Разница — доли процента, шум нескольких приватных пиров.

Ни один транзитный оператор, попавший в RIS, эту рекомендацию не исполняет. Самое громкое слово в списке на практике не подкреплено ничем.

Достижимость: одно попадание из сорока пяти

Дальше — прикладная часть. Сорок пять назначений: пакетные репозитории, CDN, платёжные системы, публичные API, российские банки и госсервисы, обычные крупные сайты. Каждое — TCP, TLS и HTTP с обоих адресов подряд.

Совпало почти всё. GitHub, Docker Hub, Debian, PyPI, Let's Encrypt, Stripe, PayPal, Telegram, Госуслуги, Сбербанк, Т-Банк — одинаковые ответы с листингованного и чистого адреса, байт в байт. Там, где приходил отказ, он приходил обоим одинаково: это поведение самих сайтов, а не реакция на источник.

Разошлось ровно одно назначение — и разошлось надёжно.

hetzner.com отдаёт 403 Forbidden адресу из DROP и 200 OK чистому. Повторный прогон: десять из десяти, без единого исключения.

Это не флап и не рулетка балансировщика, а детерминированное решение по репутации источника. И показательно, кто его принимает: хостинг-провайдер. Не банк, не госуслуга, не платёжка — инфраструктурная компания, у которой репутационные фиды стоят по профессии.

Вот честный масштаб власти DROP: 2% назначений, и эти два процента сосредоточены в отрасли, которая сама торгует инфраструктурой.

И один случай в обратную сторону

Reddit стабильно, семь прогонов из семи, отдаёт 403 Blocked чистому адресу и 200 OK листингованному.

Это стоит осознать. Сайт, который решает, кого пускать, а кого нет, посмотрел на два адреса и заблокировал тот, у которого репутация в порядке. Его скоринг смотрит на ASN, гео, историю запросов, отпечаток клиента — на что угодно, кроме DROP. Для большого репутационного слоя современного веба этого списка попросту не существует.

Каскада нет

Отдельный страх — что листинг в Spamhaus протягивает адрес через весь остальной ландшафт блоклистов. Проверено шестнадцать списков: Barracuda, SpamCop, SORBS, UCEPROTECT трёх уровней, PSBL, blocklist.de, DroneBL, CBL, GBUdb, Interserver и другие.

Оба листингованных адреса нашлись ровно в одном списке из шестнадцати — в самом Spamhaus. Снежного кома не происходит.

Чего этот замер не показал

Границы метода надо называть вслух, иначе получается не исследование, а агитация.

Почта не измерена. Двадцать пятый порт на тестовой машине закрыт провайдером для всех адресов сразу — таймаут одинаков и у листингованного, и у чистого. Что режет именно аплинк, подтверждено с третьей машины другого провайдера, где баннеры почтовых серверов приходят штатно. Про SMTP из этого стенда не следует ничего — хотя здесь спора и не было: любой почтовый сервер, который сверяется с SBL, соединение отклонит. Это не гипотеза, а способ, которым список устроен и для которого он, собственно, и создавался.

Корпоративные периметры не измерены. Входящий трафик в сети с pfBlockerNG, CrowdSec, FortiGuard и подобными фидами снаружи не проверяется в принципе — туда нужно попасть изнутри. Эта часть осталась не опровергнутой, а именно непроверенной. Косвенный довод в её пользу — найденный hetzner.com: если так поступает один хостер на выборке из сорока пяти сайтов, доля таких периметров ненулевая.

Наша запись

Наша запись: самая устойчивая форма власти в сети — не та, что исполняется, а та, в исполнение которой верят. DROP говорит «не маршрутизируйте». Никто из транзита не слушает. Но фраза работает и без исполнения: хостер отказывает клиенту, площадка не берёт блок, покупатель сбивает цену, инженер закладывает в проект обход несуществующей стены. Власть здесь не в фильтре, а в репутации фильтра.

Это чистая механика Исфет — беспорядка, что маскируется под порядок. Не вентиль, который перекрывает поток, а слух о вентиле, который заставляет поток свернуть самостоятельно. Прелесть конструкции в том, что она не требует ни принуждения, ни бюджета, ни согласия сетей: достаточно, чтобы люди пересказывали её друг другу как факт.

Маат начинается с малого и скучного: с измерения. Взвесить сердце — значит положить утверждение на весы и посмотреть на стрелку, а не на того, кто утверждение произнёс. Спамхаус делает нужную работу и делает её давно; вопрос не в его добросовестности, а в нашей привычке принимать масштаб на слово. Проверенное утверждение и повторённое утверждение — разные вещи, даже когда произносятся одинаково.

Что это значит на практике

Для оператора, который держит сети, вывод конкретный:

То есть блок в DROP — это не «мёртвый» блок. Это блок с известным дефектом: непригоден под почту, пригоден под остальное, с двухпроцентным хвостом точечных отказов. Решение о покупке или использовании такого блока — вопрос цены, а не приговора.

Как это проверить самому

Одна практическая мина, на которой подрывается большинство самостоятельных проверок: Spamhaus блокирует запросы через публичные резолверы. Если спрашивать через 1.1.1.1 или 8.8.8.8, ответ будет 127.255.255.254 — это код ошибки «запрос через публичный резолвер», и его очень легко принять за «адрес чист».

Проверка живости резолвера — тестовый адрес обязан вернуть три кода:

dig +short @<резолвер> 2.0.0.127.zen.spamhaus.org A
→ 127.0.0.2, 127.0.0.4, 127.0.0.10

Если пусто — вопрос не в адресе, а в резолвере. Сам замер воспроизводится сырыми сокетами с привязкой к нужному адресу источника: именно привязка к сокету, а не запуск с разных машин, делает сравнение честным.

Источники