Выпуск системы фильтрации спама Rspamd 1.5


Состоялся релиз системы фильтрации спама Rspamd 1.5, предоставляющей средства для оценки сообщений по различным критериям, включая правила, статистические методы и чёрные списки, на основе которых формируется итоговый вес сообщения, используемый для принятия решения о необходимости блокировки. Rspamd поддерживает практически все возможности, реализованные в SpamAssassin, и имеет ряд особенностей, позволяющих фильтровать почту в среднем в 10 раз быстрее, чем SpamAssassin, а также обеспечивать лучшее качество фильтрации. Код системы написан на языке Си и распространяется под лицензией BSD.

Rspamd построен с использованием событийно-ориентированной архитектуры (Event-driven) и изначально рассчитан на применение в высоконагруженных системах, позволяя обрабатывать сотни сообщений в секунду. Правила для выявления признаков спама отличаются высокой гибкостью и в простейшем виде могут содержать регулярные выражения, а в более сложных ситуациях могут оформляться на языке Lua. Расширение функциональности и добавление новых типов проверок реализуется через модули, которые могут создаваться на языках Си и Lua. Например, доступны модули для проверки отправителя с использованием SPF, подтверждения домена отправителя через DKIM, формирования запросов в списки DNSBL. Для упрощения настройки, создания правил и отслеживания статистики предоставляется административный web-интерфейс.

Основные новшества:

-Задействован новый MIME-парсер, заменивший собой ранее используемую библиотеку gmime. Основной причиной создания собственного MIME-парсера стала необходимость более полного контроля за разбором, для того чтобы обрабатывать специально задаваемые спамерами некорректные MIME-конструкции. Например, новый парсер позволил наладить обработку дублирующихся заголовков Content-Type, некорректного оформления структур multipart, неверного кодирования имён файлов, несоответствия заголовка Content-Transfer-Encoding и фактического метода кодирования, манипуляций с переводом строки в заголовках или пустым телом сообщения;
-Для перевода из одной кодировки символов в другую вместо libiconv задействована библиотека libicu, которая примерно в два раза быстрее и поддерживает такие возможности как автоматическое определение кодировки и выявление наличия подмены символов на похожие по начертанию;
-Переработан Web-интерфейс, который разбит на модули, что позволяет добавлять новые возможности не трогая остальной код. В web-интерфейсе также появилась возможность агрегирования статистики от разных серверов с Rspamd и улучшены графики оценки пропускной способности;
-Модуль rspamd_tcp для создания произвольных TCP-клиентов на языке Lua, переработан для поддержки сложных протоколов, поддерживающих цепочку интерактивных команд и учитывающих состояние соединения. Например, теперь возможно определить отдельную логику реагирования на передачу различных команд внутри сеансов SMTP или IMAP;
-Представлен новый легковесный модуль url_redirector, предназначенный для раскрытия перенаправления URL через сервисы коротких ссылок. Модуль написан на языке Lua, использует Redis для кэширования уже раскрытых ссылок и может расставлять теги для других модулей;
-Добавлен модуль Rmilter headers, упрощающий добавление произвольных заголовков через Rmilter, в том числе Authentication-Results и заголовков, специфичных для SpamAssassin;
-Добавлен модуль DKIM signing для настройки цифровых подписей DKIM, предоставляющий такие возможности как хранения DKIM-ключей в Redis;
-Добавлен модуль Force actions, предназначенный для принудительного выполнения действия при наличии или отсутствии определённых символов в сообщении;
-Переработан модуль экспорта метаданных, позволяющий выявить сообщения, соответствующие заданным правилам, и передать внешнему сервису выделенные из них данные. В новом выпуске предоставлены более гибкие операции и функции для экспорта параметров сообщения в формате JSON, что делает модуль более применимым для операций помещения в карантин, ведения логов и и генерации предупреждений;
-Реализован плагин для привязки тегов к URL с возможностью их кэширования в Redis;
-Добавлен плагин для динамического определения репутации URL на основе данных о доменах, хранимых в Redis;
-Модуль multimap теперь может применяться для сопоставления информации, извлечённой из заголовков "Received";
-В модуле RBL добавлена поддержка использования хэшей в черных списках "email" и "helo";
-В модуле взаимодействия с антивирусным ПО добавлена поддержка Avira SAVAPI;
-В системе нечёткого хэширования (fuzzy hashing) добавлена поддержка неточного сопоставления изображений, прикреплённых к письму;
-Добавлены новые правила: OMOGRAPH_URL для определения URL, вводящих в заблуждение, FROM_NAME_HAS_TITLE, REPLYTO_EMAIL_HAS_TITLE и FROM_NAME_EXCESS_SPACE;
-В rspamadm добавлена команда grep для поиска по аналогии с утилитой exigrep;
-Проведены оптимизации производительности: в декодировщике Base64 задействованы бэкенды sse4.2 и avx, расширено кэширование внутренних объектов, осуществлён переход на более быструю хэш-функцию t1ha, задействованы оптимизации на этапе связывания, встроен luajit 2.1.