Перевод статьи: Postfix and Spamassassin: How to filter spam
Postfix - это популярный агент передачи почты (mail transport agent - MTA), используемый на многих системах Unix/Linux. В наше время сети переполнены спамом, но к счастью, существует способ отфильтровать их с помощью такой программы, как spamassassin.
Эта статья не рассматривает процесс установки postfix. Для этого вы можете обратиться к статье "Как запустить postfix с виртуальными доменами".
На этот момент у вас должен иметься работающий SMTP-сервер под управлением postfix. Потребуется пара пакетов, которые нужно установить: spamassassin и его клиент spamc.
$ sudo apt-get install spamassassin spamc
Пакет spamassassin содержит демон, который может быть вызван пользовательской программой, например procmail... но также может быть встроен в агент передачи почты, такой как postfix.
В этой части урока, мы запустим spamassassin под его собственным пользователем (по умолчанию в debian sarge - это root), поменяем некоторые настройки и заставим postfix использовать spamassassin в качестве фильтра содержимого на выходе очереди. Это означает, что содержимое проверяется фильтрами spamassassin после того, как postfix решил его доставить.
И так, теперь вы установили spamassassin из репозитория debian. С настройками по умолчанию spamassassin отключен, но при включении будет запускаться от имени пользователя root. Чтобы избежать этого, мы заведём особого пользователя и группу для spamassassin. Выполните следующие команды от имени пользователя root:
# groupadd -g 5001 spamd # useradd -u 5001 -g spamd -s /sbin/nologin -d /var/lib/spamassassin spamd # mkdir /var/lib/spamassassin # chown spamd:spamd /var/lib/spamassassin
Теперь нам нужно поменять некоторые настройки в файле /etc/default/spamassassin и удостовериться, что у вас получились следующие значения:
ENABLED=1 SAHOME="/var/lib/spamassassin/" OPTIONS="--create-prefs --max-children 5 --username spamd --helper-home-dir ${SAHOME} -s ${SAHOME}spamd.log" PIDFILE="${SAHOME}spamd.pid"
Таким образом мы настроили запуск демона spamd от пользователя spamd, создали его собственный домашний каталог (/var/lib/spamassassin/) и заставили его ввести журнал в файле /var/lib/spamassassin/spamd.log
Теперь нам нужно задать spamassassin некоторые правила. Настройки по умолчанию вполне подходящие, однако вы можете захотеть слегка подправить их. Давайте отредактируем файл /etc/spamassassin/local.cf и приведём его к следующему виду:
rewrite_header Subject [***** SPAM _SCORE_ *****] required_score 2.0 # Чтобы использовать _SCORE_ нам нужно установить report_safe в 0 # Если эта опция установлена в 0, у поступающего спама к заголовками будут добавлены # записи "X-Spam-", но изменений в тело не вносится. report_safe 0 # Включить систему Бэйс use_bayes 1 use_bayes_rules 1 # Включить автообучение Бэйс bayes_auto_learn 1 # Включить или выключить проверки сети skip_rbl_checks 0 use_razor2 0 use_dcc 0 use_pyzor 0
Здесь мы указали spamassassin стандартные настройки spamd для перезаписи темы письма на [***** SPAM _SCORE_ *****], где _SCORE_ - это количество баллов, назначаемых spamassassin после различных тестов, только если действительное значение баллов выше или равно 2.0. Так, письма с баллами ниже 2 изменены не будут.
Чтобы позволить использование _SCORE_ в директиве rewrite_header, вы должны установить report_safe в 0.
В следующем разделе мы сообщаем spamassassin'у о необходимости использовать бэйсовский классификатор и улучшать его с помощью автообучения по сообщениям, которые он анализирует.
В последнем разделе мы отключаем сотрудничающие сети, такие как pyzor, razor2 и dcc. Эти сотрудничающие сети ведут актуальный каталог известных контрольных сумм для писем, которые были определены как спам. Они могут быть интересны, но я не использую их здесь, поскольку я считаю, что spamassassin справляется со спамом достаточно хорошо, используя только эти правила.
Теперь запустим spamd следующей командой:
# /etc/init.d/spamassassin start
Мы почти закончили, нам осталось настроить postfix таким образом, чтобы он передавал все письма, которые нужно доставить в локальные почтовые ящики, в spamassassin.
Теперь нам нужно сообщить postfix о необходимости использовать spamassassin. В нашем случае spamassassin будет вызываться только единожды, когда postfix завершит обработку письма.
Чтобы сообщить postfix использовать spamassassin, мы отредактируем файл /etc/postfix/master.cf и заменим строку:
smtp inet n - - - - smtpd
на:
smtp inet n - - - - smtpd -o content_filter=spamassassin
и затем в конец файла master.cf, добавим:
spamassassin unix - n n - - pipe user=spamd argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}
и наконец, наш фильтр спама настроен, нам осталось только перезагрузить настройки postfix и всё должно быть готово.
# /etc/init.d/postfix reload
Это один из возможных способов настройки, который позволяет фильтровать спам с помощью spamassassin и postfix.
Существуют другие способы сделать то же самое (на которых я остановлюсь в другой раз), например воспользоваться amavis, который использует spamassassin без необходимости использовать демон spamassassin (spamd).
Представленный вариант по прежнему отправляет все письма их получателям (хотя кто-то вроде меня предпочитает их отклонять и выбрасывать письма, помеченные как спам). Можно настроить правило в своём почтовом или веб-клиенте, фильтруя все письма содержащие тему "[***** SPAM" и перемещая их в нужное место в клиенте, так что вы сможете легко отделить их от вашей ценной почты, но в конце концов, если они здесь, то вам незачем удалять их, потому что в спаме иногда попадаются действительно важные письма.
В конце концов, знаменитые почтовые провайдеры, такие как yahoo, google, hotmail ... поступают так, пусть и у вас будут каталоги "Спам" и "Письма".
Надеюсь, что кому-то помог.