Monday, July 25, 2011

Обзор rspamd

Планировал разместить эту статью на хабре, но, к сожалению, по каким-то причинам она не прошла премодерации в "песочнице". Поэтому продублирую ее здесь.


Система Rspamd разрабатывается как основная система фильтрации спама в Рамблер-Почте. Однако же, изначально я планировал сделать систему, которая бы не уступала по возможностям, гибкости и качеству работы Spamassassin'а, однако была бы лишена основных его недостатков: чрезмерного использования регулярных выражений, достаточно слабой оптимизацией и общей задумчивостью работы, а также достаточно неточной статистикой. Так созрела идея rspamd - системы, ядро которой было бы оптимизированно для фильтрации большого потока писем, которая была бы легко расширяема и использовала бы более совершенные алгоритмы статистики. Ядро rspamd написано на Си и использует событийную модель обработки сообщений (основанную на libevent). Расширяется rspamd путем написания плагинов и правил на языке lua. Сам проект с самого основания был Open Source (под BSD лицензией) и сейчас расположен на bitbucket.

Преамбула

 

На rspamd сильно повлияли такие проекты, как nginx, crm114 и, конечно же, spamassassin. От nginx rspamd взял модель обработки данных, а также принципы обработки различной информации - максимально используются наиболее оптимальные алгоритмы, такие как конечные автоматы, суффиксные деревья и прочее. В crm114, на мой взгляд, реализовано наибольшее количество разнообразных статистических алгоритмов и подходов, которые затем медленно внедряются и в другие системы. Например, rspamd для статистического анализа сообщений использует алгоритм анализа биграмм из слов, а не униграмм, как SA и многие другие спам-фильтры. Это позволяет оценивать вероятность (или же частоту) не просто слов, а спектра из сочетаний слов. С одной стороны это увеличивает размер статистики, а с другой - увеличивает ее точность. Но, конечно же, больше всего rspamd взял от SpamAssassin'а, послужившего прототипом и опорной точкой создания проекта. Идеология оценки сообщения на основании многих факторов - регулярных выражений, DNS блок-листов, различных списков, статистики, сигнатур, фишинга и прочего - взята именно из SpamAssassin'а. Кроме этого, оценка была расширена до понятия "метрика", что может позволить оценить сообщение по разным наборам правил.

Для кого предназначен Rspamd

 

Rspamd может подойти для систем различного масштаба, как крупных почтовых систем, так и небольших, обрабатывающих несколько писем в час. Первые найдут в rspamd такие возможности, как легкое горизонтальное масштабирование, master-slave синхронизацию статистики, встроенные команды для мониторинга работы, высокая скорость работы и возможность выдерживать резкие всплески загрузки (за счет отключения сложных проверок), а также гибкую расширяемую архитектуру. Для небольших систем rspamd вполне подойдет с настройками "из коробки". Также я планирую организовать раздачу статистики, чтобы пользователи могли поставить rspamd и иметь готовую систему для фильтрации спама. Rspamd умеет интегрироваться в различные MTA, а также работать в режиме SMTP прокси (более подробно об этом написано в данной статье документации).

Получение, установка и конфигурация системы

 

Rspamd сейчас работает только на Unix-like системах (проверялась работоспособность на различных видах Linux, FreeBSD и OpenSolaris). В FreeBSD rspamd есть в виде порта (mail/rspamd), обладатели остальных системы, к сожалению, будут вынуждены собирать rspamd из исходников. Этот процесс, как и начальная конфигурация, описан в "быстром старте". Конфигурация rspamd может осуществляться двумя способами: через xml файл и через lua. Первый способ предназначен для установки базовых параметров, например, так задаются веса и пороги срабатывания различных действий для сообщения:



Второй способ применяется для написания правил и более "тонкой" настройке rspamd. Например, можно сделать функцию, которая выбирает "подходящие" файлы статистики для сообщения (в базовой поставке поставляется такая функция для подбора статистики по языку сообщения). Вот пример определения наличия пустого письма с картинкой в письме:



Для обучения, проверки писем и мониторинга rspamd можно использовать консольный клиент rspamc.


Текущее состояние проекта


Не так давно я делал небольшое тестирование производительности rspamd и SA (проверял потоком в 30 одновременных соединений на примерно одинаковых правилах). Приблизительные результаты были таковы:

Rspamd:
rspamd stat


SpamAssassin:
spamassassin stat

Пользователи rspamd сейчас - это, помимо Рамблер-Почты, несколько крупных провайдеров. У проекта единственный разработчик, поэтому я заинтересован в новых пользователях для улучшения качества проекта и реализации новых идей. Кроме того, в последней версии (0.4.0) я приложил много усилий на стабилизацию, упрощение и улучшение качества своего проекта. Поэтому если кто-то будет получать меньше спама, благодаря rspamd, то я не зря писал код и эту статью.

1 comment:

  1. Есть ли репозитории для Debian/Ubuntu?

    ReplyDelete