Установка и настройка системы фильтрации спама Rspamd

История электронной почты началась еще в далеком 1965 году, когда сотрудники американского института написали программу для пересылки электронных сообщений для операционной системы того времени, установленной и работавшей на компьютере IBM. С тех пор прошло много времени и электронная почта стала ежедневным средством обмена сообщениями практически для любого современного пользователя. Конечно, популярностью данной технологии не могли не воспользоваться некоторые недобросовестные люди, которые стали использовать данную технологию для рассылки различного рода рекламы, вредоносных программ и другой бесполезной мелочи, которые в повседневной жизни прозвали спамом. И так появились на свет системы фильтрации спама.

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

Отмечу, что в статье я не буду рассматривать общие принципы работы систем фильтрации спама. Данной информации полно как на официальных сайтах соответствующего ПО, так и вообще на просторах сети Интернет. Ну что же, от слов к делу...

Установка Rspamd будет осуществляться из портов на ОС FreeBSD версии 11. На сегодняшний день в портах доступна версия Rspamd 1.4.2. Однако мне пришлось использовать разрабатываемую ветку 1.5, поскольку в стабильной версии некорректно работает модуль multimap (внизу статьи приведена ссылка на описание данной проблемы). Большинство параметров я оставил без изменений, настройки по умолчанию достаточно точно классифицируют нежелательные письма как спам, в тоже время я добавил свой список нежелательные доменов, письма с которых классифицируются всегда как спам. Отмечу, что реализацию белых и черных списков возможно реализовать с помощью модулей regexp, multimap и whitelist. Я реализовал все это дело через модуль multimap, поскольку на мой взгляд он оказался более удобным.

  1. # cd /usr/ports/mail/rspamd-devel
  2. # make install clean

Из предложенных опций я ничего не выбрал. По окончанию установки, в /usr/local/etc появится папка rspamd с конфигурационными файлами. Редактирование конфигурационных файлов Rspamd имеет свои особенности, так созданные при установке конфиги не редактируются, вместо этого в директориях /usr/local/etc/rspamd/local.d и /usr/local/etc/rspamd/override.d создаются одноименные конфигурационные файлы, в которых осуществляется изменение параметров. Обобщая, в директории local.d конфиги дополняют существующую конфигурацию, а в override.d конфиги изменяют ранее определенные переменные.

У меня содержимое дынных директорий такое, /usr/local/etc/rspamd/local.d:

  1. # ls -l /usr/local/etc/rspamd/local.d
  2.  
  3. -rw-r--r--  1 root  wheel   683 14 янв.  23:00 metrics.conf
  4. -rw-r--r--  1 root  wheel   206 14 янв.  23:36 multimap.conf

/usr/local/etc/rspamd/override.d
  1. # ls -l /usr/local/etc/rspamd/override.d
  2.  
  3. -rw-r--r--  1 root  wheel  331 14 янв.  20:12 options.inc
  4. -rw-r--r--  1 root  wheel   56  7 янв.  14:08 worker-controller.inc
  5. -rw-r--r--  1 root  wheel   80  7 янв.  13:57 worker-normal.inc

Далее я приведу содержимое всех файлов с комментариями. В файле /usr/local/etc/rspamd/local.d/metrics.conf я определил свои "символы" (в терминологии Rspamd), которые добавляют и уменьшают количество спам баллов проверяемого письма. Таким образом я реализовал черные и белые списки почтовых доменов. Любой символ имеет свое имя, состоящее из латинских букв, количество спам очков, которое он прибавляет или убавляет, а также описание. Символы могут объединяться в группы. Группы позволяют определить какие-либо дополнительные параметры, например ограничить максимальное количество спам баллов в этой группе или задать значение по умолчанию.

  1. group "local" {
  2.   symbol "LOCAL_BL_IP" {
  3.     weight = 5.0;
  4.     description = "Sender ip listed in local ip blacklist";
  5.   }
  6.   symbol "LOCAL_BL_FROM" {
  7.     weight = 5.0;
  8.     description = "Sender from listed in local from blacklist";
  9.   }
  10.   symbol "LOCAL_BL_RCPT" {
  11.     weight = 5.0;
  12.     description = "Recipient listed in local rcpt blacklist";
  13.   }
  14.   symbol "LOCAL_WL_IP" {
  15.     weight = -5.0;
  16.     description = "Sender ip listed in local ip whitelist";
  17.   }
  18.   symbol "LOCAL_WL_FROM" {
  19.     weight = -5.0;
  20.     description = "Sender from listed in local from whitelist";
  21.   }
  22.   symbol "LOCAL_WL_RCPT" {
  23.     weight = -5.0;
  24.     description = "Recipient listed in local rcpt whitelist";
  25.   }
  26. }

В файле /usr/local/etc/rspamd/local.d/multimap.conf я определил дополнительные правила анализа писем. Через него возможно реализовать анализ сообщений практически по любым свойствам письма. Подробное описание есть в документации Rspamd.
  1. local_bl_from {
  2.   # Какие данные из письма брать для сравнения, в моем случае анализируется отправитель
  3.   type = "from";
  4.   # К каждому виду анализа, который задается с помощью параметра "type" возможно
  5.   # задать дополнительные параметры. В данном случае из адреса отправителя
  6.   # например user@example.ru для проверки будет браться только доменная часть.
  7.   filter = "email:domain";
  8.   # Разрешить использование регулярных выражений в файле
  9.   #regexp = true;
  10.   # Заранее определенный "символ", в соответствии с которым будут начислены
  11.   # спам баллы
  12.   symbol = "LOCAL_BL_FROM";
  13.   # Файл со списком доменов ($LOCAL_CONFDIR раскрывается как /usr/local/etc/rspamd)
  14.   map = "$LOCAL_CONFDIR/extra/blacklist.map";
  15.   # Описание
  16.   description = "Local blacklist rule";
  17. }

Далее я переопределил стандартные настройки, разместив необходимые файлы в папке override.d. Вот содержимое файла /usr/local/etc/rspamd/override.d/options.inc:
  1. # Здесь указываем проверки, которые будут проходить письма.
  2. # убрал проверку spf и dkim, поскольку они у меня реализованы через MTA
  3. filters = "chartable,surbl,regexp,fuzzy_check";
  4. # Интервал, через который происходит проверка на предмет новых данных во внешних файлах
  5. map_watch_interval = 1min;
  6. check_all_filters = false;
  7.  
  8. # Директория для хранения временных файлов
  9. tempdir = "/var/tmp";
  10.  
  11. # Объем истории
  12. history_rows = 500;
  13.  
  14. # Сканировать любые сообщения, даже если они оформлены не по стандарту
  15. allow_raw_input = true;

В файле /usr/local/etc/rspamd/override.d/worker-controller.inc задаются параметры администрирования сервиса Rspamd, количество рабочих процессов, пароль и другие данные:
  1. count = 1;
  2. password = "q1";
  3. secure_ip = "192.168.0.3";

В файле /usr/local/etc/rspamd/override.d/worker-normal.inc задаются параметры сервиса Rspamd, количество рабочих процессов, привязка к IP и другие параметры:
  1. count = 3;
  2. mime = true;
  3. task_timeout = 8s;
  4. bind_socket = "192.168.0.3:11333";

Далее необходимо скачать с официального сайта базы данных со статистикой для bayes фильтра или использовать свои (см. файл statistic.conf):
  1. # cd /var/db/rspamd
  2. # fetch http://rspamd.com/rspamd_statistics/bayes.spam.sqlite
  3. # fetch http://rspamd.com/rspamd_statistics/bayes.ham.sqlite
  4. # chown nobody:nobody *.sqlite

Добавить сервис в /etc/rc.conf и запускать:
  1. # echo "rspamd_enable=YES" >> /etc/rc.conf
  2. # service rspamd start

После запуска должно появиться множество процессов Rspamd:
  1. # ps -aux | grep rspam
  2.  
  3. nobody    8488  0,0  0,2 236124  29924  -  IsJ  23:26       0:00,32 rspamd: main process (rspamd-1.5.0)
  4. nobody    9316  0,0  0,4 368940  72476  -  SJ   23:37       0:27,74 rspamd: controller process (rspamd-1.5.0)
  5. nobody    9317  0,0  0,7 444928 120488  -  SJ   23:37       0:10,57 rspamd: normal process (rspamd-1.5.0)
  6. nobody    9318  0,0  0,9 440932 153400  -  SJ   23:37       0:25,47 rspamd: normal process (rspamd-1.5.0)
  7. nobody    9319  0,0  0,9 447108 156880  -  SJ   23:37       0:25,40 rspamd: normal process (rspamd-1.5.0

Если Rspamd у вас не стартовал, тогда смотрите логи в /var/log/rspamd. На этом настройку Rspamd можно считать завершенной. Подробное описание всех модулей Rspamd смотрите на официальном сайте. Местами документация там конечно скудная, но поиск в интернете и просмотр стандартных конфигурационных файлов подскажет что делать. Достаточно полезной для отладки является утилита rspamadm, с помощью которой, например, можно посмотреть какой конфиг получился в итоге и найти опечатки или неточности. Для отладки своих фильтров можно использовать утилиту rspamc -v , которая покажет какие проверки были применены, за что сообщение получило те или иные баллы.

Комментарии

Аватар пользователя Гость

Спасибо за статью, хотя мне, как автору Rspamd, хотелось бы узнать, что все-таки плохо задокументировано в проекте?

Аватар пользователя nekit

Спасибо за статью, хотя мне, как автору Rspamd, хотелось бы узнать, что все-таки плохо задокументировано в проекте?

И вам респект за проект. Отвечая на ваш вопрос, скажу, что например, в разделе справка отсутствует описание опций командной строки утилит, входящих в пакет (хотя некоторое описание в страницах ман присутствует, но опять же без примеров). Далее, задокументированы не все параметры файла options.inс, в документации ничего не сказано про заранее созданные базы для bayes фильтра, как часто они обновляются и т.п. При использовании Rspamd в связке с Exim есть примеры настройки, но нет описания переменных, которые создаются после проверки письма.

Аватар пользователя Гость

Документация конфигурации сделана больше не на сайте (там больше практические примеры), а через rspamadm confighelp - об этом я даже добавил раздел в FAQ: https://rspamd.com/doc/faq.html#where-can-i-find-all-configuration-options-supported-by-rspamd Правда, там пока нет про lua плагины, но это мы добавим. Про Exim я понял, поправим. Готовые базы bayes делались очень давно, поэтому я убрал упоминания о них, и вообще рекоммендую Redis, а не sqlite: https://rspamd.com/doc/faq.html#which-backend-should-i-use-for-statistics

Аватар пользователя nekit

Спасибо, за помощь. Было бы хорошо справку, выводимую rspamadm, также вести и на сайте. В браузере куда удобнее работать со справочным материалом, чем в консоле. Про редис почитал, и я правильно понял, что заранее предопределенных bayes баз уже не делается?

Аватар пользователя Гость

толи я дурак, толи лыжи не едут)

Another option is to disable spam filtering for some senders or recipients based on user settings. You can specify want_spam = yes and Rspamd will skip messages that satisfy a particular rule’s conditions.

Ребят, подскажите пжл как сделать белый список почт вида vasya@mail.ru, только будет около 20 почт
Написано прописать в user setting правило, а где эти настройки пользователей лежат? Всё обрыл, ничего похожего не нашёл

И правильно ли я правило сделал?

settings {
       rcpt = "vasya@mail.ru";
     want_spam = yes;
   }
 

Аватар пользователя nekit

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

local_wl_from {
# Какие данные из письма брать для сравнения, в моем случае анализируется отправитель
type = "from";

# К каждому виду анализа, который задается с помощью параметра "type" возможно
# задать дополнительные параметры. В данном случае из адреса отправителя
# например user@example.ru для проверки будет браться только доменная часть.
filter = "email:domain";

# Разрешить использование регулярных выражений в файле
#regexp = true;

# Заранее определенный "символ", в соответствии с которым будут начислены
# спам баллы
symbol = "LOCAL_WL_FROM";

# Файл со списком доменов ($LOCAL_CONFDIR раскрывается как /usr/local/etc/rspamd)
map = "$LOCAL_CONFDIR/extra/whitelist.map";

# Описание
description = "Local whitelist rule";
}

А в файле whitelist.map указываются необходимые Вам емэйлы.

Добавить комментарий

Filtered text

CAPTCHA
Этот вопрос предназначен для предотвращения автоматической отправки форм спам-ботами.
Fill in the blank.