Настройка антиспам-фильтра SpamAssassin в связке с Postfix на FreeBSD 11
Сегодня речь пойдёт о настройке антиспам-фильтра SpamAssassin на FreeBSD. К сожалению, активное развитие русскоязычного сообщества по настройке unix серверов, в частности FreeBSD, закончилось где-то в начале 2000-ых и актуальной информации по данной теме сейчас крайне мало. Убедиться в этом не сложно, достаточно посмотреть на даты последних публикаций или ветки форумов. Чуть лучше дела у линуксоидов, но тоже не фонтан. По всей видимости, делиться знаниями и наработками безвозмездно, сейчас никто не желает или просто знаний нет... конечно, это всё печально.
- сайт SpamAssassin: https://spamassassin.apache.org
- страница wikipedia: https://ru.wikipedia.org/wiki/SpamAssassin
Что такое SpamAssassin? По сути, это набор скриптов на языке Perl для выявления спама, работает в связке с любыми MTA (Postfix, Exim, Qmail или Sendmail). Сразу хочу обратить ваше внимание на один, весьма важный момент - SpamAssassin не умеет удалять, блокировать или, каким-то образом, перемещать нежелательные сообщения (к примеру в папку SPAM).
На борту у SpamAssassin имеется статистический обучаемый анализатор, на основе байесовского классификатора. Фильтр умеет взаимодействовать с базами данных, черными/белыми списками и системами, основанными на сигнатурном анализе (Razor, Pyzor, DCC). Таким образом, SpamAssassin анализирует, переданные ему сообщения, по ряду характерных признаков, и назначает определенное количество баллов по каждому из них. Набранные баллы, суммируются и сравниваются с пороговым значением для признания письма спамом, что отображается в заголовке письма.
Установка SpamAssassin на FreeBSD
Устанавливаем SpamAssassin из пакета. На данный момент самый свежий SpamAssassin версии 3.4.1 от 2015-04-28:
pkg add spamassassin
или традиционно через порты:
cd /usr/ports/mail/spamassassin make install
На мой взгляд, первый вариант предпочтительнее. Хоть сам пакет и не большой, однако тянет за собой кучу зависимостей, потому установка из портов, отнимает гораздо больше по времени.
После установки, желательно, ознакомиться с прилагаемой инструкцией /usr/local/share/doc/spamassassin/INSTALL, после чего уже вносить изменения в файлы конфигурации, которые находятся в каталоге /usr/local/etc/mail/spamassassin/.
В конфете /usr/local/etc/mail/spamassassin/local.cf указывается порог срабатывания фильтра, какие тесты предполагается использовать и задать им требуемые баллы, также определяются заголовок сообщения о спаме, белые/черные списки, автообучение и многое другое. Подробнее останавливаться на тонкой настройке фильтра не буду, замечу лишь, что свежеустановленный spamassassin ОБЯЗАТЕЛЬНО нуждается в обучении, без этого он практически бесполезен в борьбе с русскоязычным спамом.
По идее, спамфильтр можно запустить и с настройками по умолчанию. Вот пример того, что вы увидите в конфигурационном файле с некоторыми пояснениями:
# заголовок писем со спамом (по умолчанию добавляется *****SPAM*****) # слегка изменим его чтобы отображалось значение, присвоенное письму фильтром #rewrite_header Subject *****SPAM***** rewrite_header Subject *** SPAM *** (_SCORE_) # пороговое значение, при котором сообщение считается спамом (оставил по умолчанию 5.0) required_score 5.0 # не изменять тело письма, только добавлять заголовки (по умолчанию 1) report_safe 0 # какие сети или хосты считаются надежными (т. е. не спамеры) # trusted_networks 212.17.35. # использовать для проверки почты теорему Байеса (default: 1) и включить автообучение use_bayes 1 bayes_auto_learn 1
в файл /etc/rc.conf следует добавить:
spamd_enable="YES" spamd_flags="-u spamd -H /var/spool/spamd"
Вторая строка нужна для запуска фильтра от пользователя spamd (создаётся при установке пакета). По умолчанию SpamAssassin работает от суперпользователя (root), что не очень здорово.
На заключительном этапе предлагается выполнить два скрипта sa-update и sa-compile для обновления базы и компиляции набора правил SpamAssassin. Везде почему-то опускают этот момент.
Настройка связки Postfix и SpamAssassin на FreeBSD
Spamassasin уже полностью готов к работе, однако Postfix пока ничего об этом не знает. Намекнём ему о такой возможности. Для этого подправим конфигурационный файл master.cf в каталоге /usr/local/etc/postfix/:
Находим строку (в самом начале):
smtp inet n - n - - smtpd
и демону smtpd дописываем дополнительную опцию -o content_filter=spamassassin:
smtp inet n - n - - smtpd -o content_filter=spamassassin
В самый конец файла добавляем строку с информацией о новом транспорте:
spamassassin unix - n n - - pipe user=spamd argv=/usr/local/bin/spamc -f -e /usr/local/sbin/sendmail -io ${sender} ${recipient}
Заметьте, что клиент, для работы с spamassassin - spamc, запускается с правами пользователя spamd. Также, у sendmail я убрал дополнительный параметр -f (обычно везде пишется /usr/local/sbin/sendmail -oi -f ${sender} ${recipient}). При указании данного параметра, postfix возвращал отправителю его же сообщение.
Перезапустив Postfix, можем наблюдать работу SpamAssassin в логах и дополнительных заголовках письма. Протестировать работу SpamAssassin можно стандартной сигнатурой GTUBE, поместив её в тело письма или просто в файл:
# spamassassin -t < sample-spam.txt > spam.out
Обучение SpamAssassin
Видим, что кое-как фильтр начал работать. Почему кое-как? Как я уже писал выше, SpamAssassin нужно обучать. Для обучения, в комплекте идёт утилита sa-learn.
Обучить программу следует от имени того же пользователя, от которого она работает. Скармливаем sa-learn письма со спамом (формат ящиков maildir):
sa-learn -u spamd --spam путь_к_каталогу_писем_со_спамом
Обучение программы нормальными письмами:
sa-learn -u spamd --ham путь_к_каталогу_писем_без_спама
Для других форматов следует задавать особые параметры --mbox или --mbx.
В заключение, хочу дать несколько полезных ссылок по теме:
интеграции SpamAssassin с Postfix. Описано решение как удалять помеченные спам-сообщения (англ.).: https://wiki.apache.org/spamassassin/IntegratePostfixViaSpampd
хорошая статья в журнале "Системный администратор", но старенькая: http://samag.ru/archive/article/559
и пара материалов по обучению Bayesian: https://spamassassin.apache.org/full/3.4.x/doc/sa-learn.txt, http://faisal.com/docs/salearn
Если считаете статью полезной,
не ленитесь ставить лайки и делиться с друзьями.