ADG Оставить заявку
Блог Системное администрирование 4 мин чтения

Antispam-стек 2009: SpamAssassin, Razor2, Pyzor, RBL и DKIM против девяноста процентов мусора

Обновили антиспам на Postfix/Dovecot: SpamAssassin с Razor2 и Pyzor, RBL-фильтрация, DKIM для исходящей почты - доставляемость на крупные провайдеры заметно улучшилась.

Контекст момента

По данным Symantec, к 2009 году спам составляет до 90% мирового email-трафика - исторический максимум

По данным Symantec, около девяноста процентов email-трафика в этом году - спам. Девяносто. Это не журналистское преувеличение, а цифра из их квартального отчёта, которую мы не без удовольствия распечатали и показали паре клиентов, которые до этого считали антиспам «лишней тратой». Цифра подействовала.

На нескольких инсталляциях Postfix + Dovecot у нас был скромный антиспам: базовый SpamAssassin без внешних плагинов, один-два RBL и ощущение, что «ну, работает же». Работало - в 2006-2007 году. К осени 2009 ящики начали забиваться куда плотнее, а жалобы на пропущенный спам и на то, что «письмо улетело в Яндекс, но не дошло» - участились.

Что именно было не так

Проблема распалась на две независимые части.

Первая - пропуск входящего спама. SpamAssassin без обновлений и без подключённых краудсорсных баз работает на своих эвристиках и правилах sa-update. Этого хватало для очевидного мусора, но современный спам лучше мимикрирует под нормальное письмо: правильные заголовки, не забаненные IP, текст без триггерных слов. Один эвристический движок это не ловит.

Вторая - проблемы с доставкой исходящей почты. Письма клиентов периодически падали в спам или вовсе не доставлялись на Mail.ru, Яндекс, Gmail. Причина банальная: нет DKIM-подписи, нет SPF, IP-репутация не подтверждена. Крупные провайдеры смотрят на это всё жёстче, и сервер без подписи начинает выглядеть подозрительно просто потому, что у остальных она есть.

Что поставили и как настроили

Начали с входящего. К SpamAssassin подключили два плагина совместного обнаружения: Razor2 и Pyzor. Оба работают по одному принципу - при проверке письма клиент считает его хеш и сверяет с сетевой базой уже подтверждённого спама. Если хеш совпал - оценка сразу прыгает вверх. Разница между ними в архитектуре и составе базы, поэтому использовать оба имеет смысл: покрытие выше.

Параллельно расширили список RBL-проверок. К Spamhaus ZEN добавили SORBS и Barracuda BRBL. Здесь важный момент: RBL нужно мониторить, а не просто включить и забыть. Barracuda требует регистрации, SORBS периодически даёт ложные срабатывания на легитимные IP - мы выставили веса так, чтобы одно попадание в RBL не убивало письмо сразу, а добавляло очков к общему счёту SpamAssassin.

Конфиг Postfix пополнился несколькими проверками в smtpd_recipient_restrictions и smtpd_client_restrictions с reject_rbl_client. После этого часть мусора стала отсекаться ещё на стадии SMTP-соединения, до того как SpamAssassin вообще видит тело письма - это разгружает систему.

DKIM для исходящей почты

Это оказалась самая результативная часть. Поставили OpenDKIM, сгенерировали ключи, прописали TXT-записи в DNS, привязали к Postfix через milter. Плюс проверили и поправили SPF-записи - у некоторых клиентов они либо отсутствовали, либо были написаны некорректно (include вместо явных диапазонов, из-за чего часть легитимных серверов в SPF не попадала).

Эффект не мгновенный - несколько дней на то, чтобы DNS-записи разошлись и провайдеры начали их учитывать. Но уже через неделю количество жалоб на «письмо не дошло на Mail.ru» заметно упало. Письма с DKIM-подписью и корректным SPF проходят туда без вопросов, пока IP не попал в чёрные списки - а это уже другая история и другая работа.

Что в итоге

После обновления стека картина стала заметно лучше. Пропущенного спама меньше, доставляемость исходящей почты выросла. Точных цифр не даём принципиально - слишком разные объёмы и потоки у разных клиентов, усреднять бессмысленно.

Несколько практических наблюдений:

  • Razor2 + Pyzor вместе работают лучше каждого по отдельности, установка занимает минут двадцать, смысл есть.
  • Веса RBL-правил важнее самого списка RBL. Включить пять списков с reject - это не защита, это генератор ложных срабатываний. Нужны очки, а не бан.
  • DKIM без SPF - половина работы. Оба механизма дополняют друг друга, и если SPF написан с ошибками, DKIM эффект смазывает.
  • sa-update нужен в cron. Правила SpamAssassin устаревают быстро, и без регулярного обновления база деградирует за несколько месяцев.

Серая зона остаётся: письма с легальных ESP-платформ (рассылки через SendGrid, ExactTarget и подобные), которые технически подписаны правильно, но содержат мусор. SpamAssassin их ловит по контенту, но не всегда. Пока работаем с пользовательскими правилами и белыми/чёрными списками на уровне домена.

Почтовую инфраструктуру для клиентов мы ведём в рамках сопровождения. Если почтовый сервер стоит сам по себе без присмотра - спам-статистика этого года хороший повод его проверить.

Контакт

Нужна такая же инженерная работа?

Опишите задачу и контекст. Ответим в течение рабочего дня, при необходимости подпишем NDA.