Релиз системы фильтрации спама Rspamd 1.4
После четырёх месяцев разработки доступны новые релизы Rspamd 1.4 и Rmilter 1.10, в которых появилась поддержка пулов соединений с Redis, добавлены новые модули, улучшена поддержка нейронных сетей, применён алгоритм сжатия zstd для протокола и реализованы многие другие важные усовершенствования.
Rspamd — это система фильтрации спама для электронной почты, написанная на языках C и Lua в качестве более быстрой замены SpamAssassin, ориентированная на применение в крупных почтовых кластерах. Rspamd поддерживает практически все возможности, реализованные в SpamAssassin, и имеет ряд особенностей, позволяющих фильтровать почту в среднем в 10 раз быстрее, чем SpamAssassin, а также обеспечивать лучшее качество фильтрации. Правила для выявления признаков спама отличаются гибкостью и в простейшем виде могут содержать регулярные выражения, а в более сложных ситуациях могут оформляться на языке Lua. Расширение функциональности и добавление новых типов проверок реализуется через модули, которые могут создаваться на языках Си и Lua. Например, доступны модули для проверки отправителя с использованием SPF, подтверждения домена отправителя через DKIM, формирования запросов в списки DNSBL. Для упрощения настройки, создания правил и отслеживания статистики предоставляется административный web-интерфейс.
Основные новшества:
- Пул соединений с Redis. Rspamd теперь может подключаться к Redis, используя пул постоянных соединений. Эта функция не требует каких-либо специальных настроек и позволяет повторное использование существующих соединений, улучшающих профиль нагрузки для Redis.
- Новый плагин классификации с использованием нейросетей. Добавлен плагин для использования и обучения нейросетей, сохраняющий данные в Redis. Данный плагин позволяет кластеризовать результаты фильтров для более точной оценки потока писем. Использование Redis позволило распределять обучение и данные нейросетей по всему кластеру сканеров Rspamd.
- Улучшение байесовского статистического классификатора. Rspamd теперь использует больше метаданных для оценки вероятности спама. С результами тестирования производительности классификатора Rspamd в сравнении с другими спам-фильтрами можно познакомиться в данной статье.
- Новый плагин проверки сообщений антивирусами. Rspamd теперь умеет проверять сообщения на наличие вирусов с помощью сторонних антивирусов. Этот модуль предоставляет ряд функций:
- Работа с различными типами антивирусных систем: ClamAV, Sophos и F-Prot
- Поддержка пользовательских шаблонов (например, экспериментальные базы данных для ClamAV)
- Поддержка кэширования результатов
- Проверка только писем с вложениями, чтобы сохранить ресурсы антивируса
- Белые списки, ограничения на размер и пользовательские скрипты оценки результатов
- Плагин проверки MX записей. Rspamd теперь может проверить работоспособность MX отправителя для сканированных сообщений с помощью нового плагина проверки MX. Этот плагин полезен для защиты от сообщений с некорректными обратными путями (например, когда спам рассылается с ботнета, который не в состоянии принять ответ на письмо).
- Поддержка компрессии в протоколе. Rmilter и Rspamd теперь поддерживают сжатие передаваемых данных алгоритмом zstd. Этот алгоритм является быстрым и эффективным для уменьшения загрузки процессора и сети при передаче данных. Zstd также используется для хранения больших объемов данных в Redis (например, нейронных сетей).
- Переработана система обработки ошибок DNS в SPF, DKIM и DMARC. Rspamd теперь умеет работать с временными ошибками при выполнении связанных с DNS проверками, например, DKIM, DMARC или SPF. Существуют специальные символы для представления как временных, так и постоянных ошибок для этих плагинов.
- Адаптивные и пользовательские лимиты. Модуль ratelimit теперь поддерживает адаптивные лимиты, то есть, ограничения могут быть ужесточены для неизвестных или «плохих» отправителей, а для известных отправителей с хорошей репутацией — наоборот, расширены. Кроме этого, данные модуль поддерживает с новой версии пользовательские скрипты для создания собственных лимитов.
- Мониторинг ресурсов. В новой версии Rspamd получил поддержку проверки состояния внешних сервисов, например, DNS листов. В этом режиме Rspamd проверяет, что DNSBL доступен и что он не заблокировал все адреса (что иногда приводит к курьезным ситуациям). Если эти проверки не проходят, то такой ресурс на время игнорируется (до следующей проверки).
- Redis-бэкенд для fuzzy хешей. Начиная с Rspamd 1.4, можно хранить нечеткие хэшей в Redis. Это хранилище является более быстрым и масштабируемым, чем SQLite. Утилита «rspamadm» теперь умеет конвертировать хеши из хранилища SQLite в Redis.
- Экспорт данных в graphite. В новой версии Rspamd умеет сохранять статистику, передавая данные внешней системе мониторинга (пока поддерживается только graphite). Также возможен экспорт данных в Redis pub/sub и Yandex Clickhouse (экспериментальный плагин).
- Динамическая конфигурация в Redis. Эта функция полезна, когда вам нужно управлять несколькими экземплярами Rspamd централизованно. Пока что динамическая конфигурация ограничивается настройкой весов символов, действий и отключения определенных проверок. В будущем эти функции планируется расширить.
- Настройки пользователей в Redis. Настройки пользователя теперь можно загружать из Redis. Это полезно, когда пользователей много и они часто обновляются. В таком случае нет необходимости каждый раз загружать настройки для всех пользователей.
- Кольцевой буфер ошибок. Rspamd теперь умеет сохранять ошибки работы в кольцевой буфер. Этот буфер отображается в web интерфейсе и позволяет быстро определить, если в работе Rspamd возникает какая-то проблема.
- Сообщения для MTA. Rspamd теперь умеет передавать сообщение, которое MTA должно показать клиенту, например, при грейлистинге:
{ "messages": { "smtp_message": "Try again later"}}
Эта функция также поддерживается Rmilter 1.10. - Обновления Rspamd Lua API. В новой версии добавлен ряд новых возможностей в Lua API:
- Периодические события:
rspamd_config:add_periodic(ev_base, 1.0, function(cfg, ev_base) local logger = require "rspamd_logger" i = i + 1 logger.infox(cfg, "periodic function, %s", i) return false -- if return false, then the periodic event is removed end, true)
- Скрипты, выполняемые при старте или завершении процессов:
rspamd_config:add_on_load(function(cfg, ev_base, worker) if worker:get_name() == 'normal' then -- Do something end end) color="#461b7e">
- Поддержка новых хеш-функций (MD5, SHA1, SHA256, SHA512):
local hash = require "rspamd_cryptobox_hash" hash.create_specific('md5', 'string'):hex() -- b45cffe084dd3d20d928bee85e7b0f21 color="#461b7e">
- Поддержка https в lua_http
- Пакетное обучение нейросетей (в отдельном треде)
- Zstd-компрессия
- Периодические события:
- Улучшения веб-интерфейса. Новая версия Rspamd включает в себя ряд изменений в веб-интерфейсе:
- Новая закладка настройки символов
- Таблица последних ошибок сканера
- Улучшена загрузка вкладок
- Пароли по умолчанию теперь нельзя применять для доступа к web-интерфейсу
© OpenNet