История электронной почты началась еще в далеком 1965 году, когда сотрудники американского института написали программу для пересылки электронных сообщений для операционной системы того времени, установленной и работавшей на компьютере IBM. С тех пор прошло много времени и электронная почта стала ежедневным средством обмена сообщениями практически для любого современного пользователя. Конечно, популярностью данной технологии не могли не воспользоваться некоторые недобросовестные люди, которые стали использовать данную технологию для рассылки различного рода рекламы, вредоносных программ и другой бесполезной мелочи, которые в повседневной жизни прозвали спамом. И так появились на свет системы фильтрации спама.
Сегодня пойдет речь о достаточно молодом и перспективном проекте Rspamd. Основными достоинствами Rspamd являются: низкое потребление ресурсов и высокая скорость работы. Rspamd достаточно гибкий в настройке и позволяет реализовать надежную систему фильтрации спама, поддерживается всеми популярными MTA и имеет собственный веб-интерфейс для просмотра статистики. Вместе с тем, учитывая возраст проекта и высокую интенсивность разработки, разработчиками происходит изменение структуры конфигурационных файлов, ПО достаточно плохо задокументировано и многие вещи приходится додумывать логически, что конечно осложняет процесс интеграции. Однако один раз разобравшись, дальше будет проще. Все же, к настоящему времени проект Rspamd достиг некоторой стабильности и готов к эксплуатации в боевом режиме.
Отмечу, что в статье я не буду рассматривать общие принципы работы систем фильтрации спама. Данной информации полно как на официальных сайтах соответствующего ПО, так и вообще на просторах сети Интернет. Ну что же, от слов к делу...
Установка Rspamd будет осуществляться из портов на ОС FreeBSD версии 11. На сегодняшний день в портах доступна версия Rspamd 1.4.2. Однако мне пришлось использовать разрабатываемую ветку 1.5, поскольку в стабильной версии некорректно работает модуль multimap (внизу статьи приведена ссылка на описание данной проблемы). Большинство параметров я оставил без изменений, настройки по умолчанию достаточно точно классифицируют нежелательные письма как спам, в тоже время я добавил свой список нежелательные доменов, письма с которых классифицируются всегда как спам. Отмечу, что реализацию белых и черных списков возможно реализовать с помощью модулей regexp, multimap и whitelist. Я реализовал все это дело через модуль multimap, поскольку на мой взгляд он оказался более удобным.
cd /usr/ports/mail/rspamd-devel
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:
ls -l /usr/local/etc/rspamd/local.d
-rw-r--r-- 1 root wheel 683 14 янв. 23:00 metrics.conf
-rw-r--r-- 1 root wheel 206 14 янв. 23:36 multimap.conf
/usr/local/etc/rspamd/override.d:
ls -l /usr/local/etc/rspamd/override.d
-rw-r--r-- 1 root wheel 331 14 янв. 20:12 options.inc
-rw-r--r-- 1 root wheel 56 7 янв. 14:08 worker-controller.inc
-rw-r--r-- 1 root wheel 80 7 янв. 13:57 worker-normal.inc
Далее я приведу содержимое всех файлов с комментариями. В файле /usr/local/etc/rspamd/local.d/metrics.conf я определил свои "символы" (в терминологии Rspamd), которые добавляют и уменьшают количество спам баллов проверяемого письма. Таким образом я реализовал черные и белые списки почтовых доменов. Любой символ имеет свое имя, состоящее из латинских букв, количество спам очков, которое он прибавляет или убавляет, а также описание. Символы могут объединяться в группы. Группы позволяют определить какие-либо дополнительные параметры, например ограничить максимальное количество спам баллов в этой группе или задать значение по умолчанию.
group "local" {
symbol "LOCAL_BL_IP" {
weight = 5.0;
description = "Sender ip listed in local ip blacklist";
}
symbol "LOCAL_BL_FROM" {
weight = 5.0;
description = "Sender from listed in local from blacklist";
}
symbol "LOCAL_BL_RCPT" {
weight = 5.0;
description = "Recipient listed in local rcpt blacklist";
}
symbol "LOCAL_WL_IP" {
weight = -5.0;
description = "Sender ip listed in local ip whitelist";
}
symbol "LOCAL_WL_FROM" {
weight = -5.0;
description = "Sender from listed in local from whitelist";
}
symbol "LOCAL_WL_RCPT" {
weight = -5.0;
description = "Recipient listed in local rcpt whitelist";
}
}
В файле /usr/local/etc/rspamd/local.d/multimap.conf я определил дополнительные правила анализа писем. Через него возможно реализовать анализ сообщений практически по любым свойствам письма. Подробное описание есть в документации Rspamd.
local_bl_from {
# Какие данные из письма брать для сравнения, в моем случае анализируется отправитель
type = "from";
# К каждому виду анализа, который задается с помощью параметра "type" возможно
# задать дополнительные параметры. В данном случае из адреса отправителя
# например user@example.ru для проверки будет браться только доменная часть.
filter = "email:domain";
# Разрешить использование регулярных выражений в файле
#regexp = true;
# Заранее определенный "символ", в соответствии с которым будут начислены
# спам баллы
symbol = "LOCAL_BL_FROM";
# Файл со списком доменов ($LOCAL_CONFDIR раскрывается как /usr/local/etc/rspamd)
map = "$LOCAL_CONFDIR/extra/blacklist.map";
# Описание
description = "Local blacklist rule";
}
Далее я переопределил стандартные настройки, разместив необходимые файлы в папке override.d. Вот содержимое файла /usr/local/etc/rspamd/override.d/options.inc:
# Здесь указываем проверки, которые будут проходить письма.
# убрал проверку spf и dkim, поскольку они у меня реализованы через MTA
filters = "chartable,surbl,regexp,fuzzy_check";
# Интервал, через который происходит проверка на предмет новых данных во внешних файлах
map_watch_interval = 1min;
check_all_filters = false;
# Директория для хранения временных файлов
tempdir = "/var/tmp";
# Объем истории
history_rows = 500;
# Сканировать любые сообщения, даже если они оформлены не по стандарту
allow_raw_input = true;
В файле /usr/local/etc/rspamd/override.d/worker-controller.inc задаются параметры администрирования сервиса Rspamd, количество рабочих процессов, пароль и другие данные:
count = 1;
password = "q1";
secure_ip = "192.168.0.3";
В файле /usr/local/etc/rspamd/override.d/worker-normal.inc задаются параметры сервиса Rspamd, количество рабочих процессов, привязка к IP и другие параметры:
count = 3;
mime = true;
task_timeout = 8s;
bind_socket = "192.168.0.3:11333";
Далее необходимо скачать с официального сайта базы данных со статистикой для bayes фильтра или использовать свои (см. файл statistic.conf):
cd /var/db/rspamd
fetch http://rspamd.com/rspamd_statistics/bayes.spam.sqlite
fetch http://rspamd.com/rspamd_statistics/bayes.ham.sqlite
chown nobody:nobody *.sqlite
Добавить сервис в /etc/rc.conf и запускать:
echo "rspamd_enable=YES" >> /etc/rc.conf
service rspamd start
После запуска должно появиться множество процессов Rspamd:
# ps -aux | grep rspam
nobody 8488 0,0 0,2 236124 29924 - IsJ 23:26 0:00,32 rspamd: main process (rspamd-1.5.0)
nobody 9316 0,0 0,4 368940 72476 - SJ 23:37 0:27,74 rspamd: controller process (rspamd-1.5.0)
nobody 9317 0,0 0,7 444928 120488 - SJ 23:37 0:10,57 rspamd: normal process (rspamd-1.5.0)
nobody 9318 0,0 0,9 440932 153400 - SJ 23:37 0:25,47 rspamd: normal process (rspamd-1.5.0)
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 < message.elm, которая покажет какие проверки были применены, за что сообщение получило те или иные баллы.
пт, 20/01/2017 - 18:01
Спасибо за статью, хотя мне, как автору Rspamd, хотелось бы узнать, что все-таки плохо задокументировано в проекте?
пт, 20/01/2017 - 21:18
И вам респект за проект. Отвечая на ваш вопрос, скажу, что например, в разделе справка отсутствует описание опций командной строки утилит, входящих в пакет (хотя некоторое описание в страницах ман присутствует, но опять же без примеров). Далее, задокументированы не все параметры файла options.inс, в документации ничего не сказано про заранее созданные базы для bayes фильтра, как часто они обновляются и т.п. При использовании Rspamd в связке с Exim есть примеры настройки, но нет описания переменных, которые создаются после проверки письма.
Вск, 22/01/2017 - 00:20
Документация конфигурации сделана больше не на сайте (там больше практические примеры), а через 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
Вск, 22/01/2017 - 10:47
Спасибо, за помощь. Было бы хорошо справку, выводимую rspamadm, также вести и на сайте. В браузере куда удобнее работать со справочным материалом, чем в консоле. Про редис почитал, и я правильно понял, что заранее предопределенных bayes баз уже не делается?
ср, 24/05/2017 - 19:26
толи я дурак, толи лыжи не едут)
Ребят, подскажите пжл как сделать белый список почт вида vasya@mail.ru, только будет около 20 почт
Написано прописать в user setting правило, а где эти настройки пользователей лежат? Всё обрыл, ничего похожего не нашёл
И правильно ли я правило сделал?
сб, 27/05/2017 - 16:44
Так в статье ведь сказано как сделать на примере черного списка и модуля multimap. Если использовать конфигурацию из статьи, то в файле конфигурации модуля multimap должны быть записи вида:
А в файле whitelist.map указываются необходимые Вам емэйлы.
пт, 18/10/2019 - 00:07
День добрый, не подскажите, как прописать в модуле markasjunk2 в RoundCube обучение RSPAMD ?
пт, 18/10/2019 - 15:18
Добрый день. У меня обучение RSpamd настроено через Dovecot, как за пример брал информацию здесь. Может наведет на мысли как сделать тоже самое с плагином roundcube.
Добавить комментарий