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 их ловит по контенту, но не всегда. Пока работаем с пользовательскими правилами и белыми/чёрными списками на уровне домена.
Почтовую инфраструктуру для клиентов мы ведём в рамках сопровождения. Если почтовый сервер стоит сам по себе без присмотра - спам-статистика этого года хороший повод его проверить.
- OpenSSH без паролей: ввели политику и забыли про словарные атаки · 6 августа 2009
- syslog-ng 3: централизованные логи с 80+ серверов без потерь · 23 апреля 2009