История электронной почты началась еще в далеком 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
- # 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";
- }
- }
- 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";
- }
- # Здесь указываем проверки, которые будут проходить письма.
- # убрал проверку 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;
- count = 1;
- password = "q1";
- secure_ip = "192.168.0.3";
- count = 3;
- mime = true;
- task_timeout = 8s;
- bind_socket = "192.168.0.3:11333";
- # 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
- # echo "rspamd_enable=YES" >> /etc/rc.conf
- # service rspamd start
- # 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 - 21:18
вс, 22/01/2017 - 00:20
вс, 22/01/2017 - 10:47
ср, 24/05/2017 - 19:26
сб, 27/05/2017 - 16:44
пт, 18/10/2019 - 00:07
пт, 18/10/2019 - 15:18
пт, 20/01/2017 - 18:01
Спасибо за статью, хотя мне, как автору Rspamd, хотелось бы узнать, что все-таки плохо задокументировано в проекте?