После четырёх месяцев разработки доступны новые релизы 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)
      
    • Поддержка новых хеш-функций (MD5, SHA1, SHA256, SHA512):
      
      local hash = require "rspamd_cryptobox_hash"
      hash.create_specific('md5', 'string'):hex()
      -- b45cffe084dd3d20d928bee85e7b0f21
      
    • Поддержка https в lua_http
    • Пакетное обучение нейросетей (в отдельном треде)
    • Zstd-компрессия
  • Улучшения веб-интерфейса. Новая версия Rspamd включает в себя ряд изменений в веб-интерфейсе:
    • Новая закладка настройки символов
    • Таблица последних ошибок сканера
    • Улучшена загрузка вкладок
    • Пароли по умолчанию теперь нельзя применять для доступа к web-интерфейсу


Источник: http://www.opennet.ru/opennews/art.shtml?num=45539