Борьба со спамом в 2020 (rpamd, SpamAssassin и нейросети)

Уже 15 лет (ужас какой!) использую для фильтрации спама SpamAssassin, и что-то стали возникать к нему притензии. С одной стороны, кажется, спама в интернете стало сильно меньше, чем в конце нулевых. По моим ощущениям, мне стало в месяц приходить ~300 писем вместо нескольких тысяч. (Возможно дело в том, что крупные почтовые сервисы его довольно успешно фильтруют, благодаря своим ресурсам, и “обычные пользователи” стали сильно менее доступны для спамеров.) С другой же стороны, стал замечать, что SA успешно отфильтровывает примерно половину спама (с достаточно консервативными настройками без false-positive). С третьей стороны не байесом же единым, за последние десять лет и нейросети выросли и какой-нибудь SVM кажется кто-то должен уже был внедрить (по крайней мере Саша Петров мне еще в своей дипломной работе его прикручивал и вроде как неплохие результаты получал, хотя до продакшн решения не доделал).

В общем решил я посмотреть на то, что у нас нового появилось в этой области: количество инструментов увеличилось, но всё это просто классификаторы (практически все на наивном байесе, хотя некоторые, вроде как заявляется, и более точные, чем тот, что внутри SpamAssassin), в отличие от SA, который еще с кучей эвристик, нацеленных именно на анализ почты (корректность заголовков, работа с RBL, скоринг для хостов, сетей и автономных систем, участвовавших в передаче письма, DMARC, DKIM, SPF и прочее).

Но на фоне всего этого болота заметил довольно развитый и живой проект rspamd. По сути примерно такой же комбайн, как SpamAssassin, только вместо перла C и lua, ну и комьюнити сильно меньше. Зато встроенный milter, вроде как более “правильный” байес, встроенная реализация dkim (можно выкинуть opendkim), встроенный грейлистинг (он вообще сейчас от спама помогает?) и даже есть экспериментальный нейросетевой классификатор.

В общем показалось, что штука довольно интересная, чтобы ее попробовать – поставил и показалось, что работает оно гораздо лучше, чем SpamAssassin.

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

Ну раз так, то устроем side-by-side сравнение на живом трафике!

Дано:

  • Свежая чистая инсталляция почтового сервера: postfix + dovecot.
  • На postfix полностью отключены все аутлупы по rbl и фильтрации HELO, которые я использовал раньше.
  • rspamd 1.9.4 с чистой базой и дефолтными настройками. (add_header = 7)
  • SpamAssassin (через spamass-milter) с +/- дефолтными настройками (включил по максимуму разные модули, в том числе pyzor, razor и txrep) и тоже чистой базой. (required_score 7.0)
  • Немножко скриптов, которые отправляют на дообучение (в оба сервиса) те письма, которые были классифицированы неправильно (в тот момент, когда я перекладываю письмо в папку Junk или обратно).
  • Почтовый поток порядка нескольких тысяч писем в месяц, из которых две-три сотни – это спам.
  • Система “Спамографопостроитель 1.0”, которая рисует в реальном времени гистограммы оценок по всем полученным письмам.

Немного подробнее по гистограммам: они обновляются в реальном времени и рисуются в четырёх вариантах: общие оценки для rspamd и SA, оценки байесовского фильтра для rspamd и SA. Вертикальной чертой на каждом графике отображена граница спам/не спам, так что слева от нее мы видим не спам и фолс-негатив, а справа спам и фолс-позитив. Пока оценок мало + фильтры не натренированы графики должны быть довольно шумными, но, хочется надеяться, дальше ситуация исправится. Опять же по этим графикам можно будет прикинуть, насколько корректно выбрана граница для классификации.

Чуть позже добавлю генерацию численных метрик и гистограммы для нейросетевого классификатора rspamd, когда он обучится

А пока: давайте наблюдать!

PS. Дорогие спамеры, не могли бы насыпать мне побольше образцов спама на spam@gerasiov.net. Пожалуйста!

2 thoughts on “Борьба со спамом в 2020 (rpamd, SpamAssassin и нейросети)”

  1. Интересны итоговые результаты данного эксперимента

    1. Да в общем на картинке текущее состояние отображено. Оно, на самом деле не совсем честное – там два фильтра чуть-чуть влияли на друг на друга при последовательном получении нескольких одинаковых писем из-за не совсем правильно построенного эксперимента. В итоге фолс позитив SA мог переобучить фильтр rspamd и дальше он тоже начинал фолсить, пока я вручную письма не пересортирую.
      По факту я сейчас выкинул spamassassin – там если поиграться с отсечкой, то rspamd показывает такие же результаты (немного лучше), но он сильно меньше ресурсов требует.

Leave a Reply

Your email address will not be published. Required fields are marked *