четверг, 17 сентября 2009 г.

Postfix и Spamassassin: Как фильтровать спам

Перевод статьи: Postfix and Spamassassin: How to filter spam

Postfix - это популярный агент передачи почты (mail transport agent - MTA), используемый на многих системах Unix/Linux. В наше время сети переполнены спамом, но к счастью, существует способ отфильтровать их с помощью такой программы, как spamassassin.

Эта статья не рассматривает процесс установки postfix. Для этого вы можете обратиться к статье "Как запустить postfix с виртуальными доменами".

1. Начало

На этот момент у вас должен иметься работающий SMTP-сервер под управлением postfix. Потребуется пара пакетов, которые нужно установить: spamassassin и его клиент spamc.
$ sudo apt-get install spamassassin spamc
Пакет spamassassin содержит демон, который может быть вызван пользовательской программой, например procmail... но также может быть встроен в агент передачи почты, такой как postfix.

2. Использование spamassassin как самостоятельного демона

В этой части урока, мы запустим spamassassin под его собственным пользователем (по умолчанию в debian sarge - это root), поменяем некоторые настройки и заставим postfix использовать spamassassin в качестве фильтра содержимого на выходе очереди. Это означает, что содержимое проверяется фильтрами spamassassin после того, как postfix решил его доставить.

2.1. Настройка spamassassin

И так, теперь вы установили 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

2.2. Конфигурирование spamassassin

Теперь нам нужно задать 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.

3. Заставляем 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
4. Заключение

Это один из возможных способов настройки, который позволяет фильтровать спам с помощью spamassassin и postfix.

Существуют другие способы сделать то же самое (на которых я остановлюсь в другой раз), например воспользоваться amavis, который использует spamassassin без необходимости использовать демон spamassassin (spamd).

Представленный вариант по прежнему отправляет все письма их получателям (хотя кто-то вроде меня предпочитает их отклонять и выбрасывать письма, помеченные как спам). Можно настроить правило в своём почтовом или веб-клиенте, фильтруя все письма содержащие тему "[***** SPAM" и перемещая их в нужное место в клиенте, так что вы сможете легко отделить их от вашей ценной почты, но в конце концов, если они здесь, то вам незачем удалять их, потому что в спаме иногда попадаются действительно важные письма.

В конце концов, знаменитые почтовые провайдеры, такие как yahoo, google, hotmail ... поступают так, пусть и у вас будут каталоги "Спам" и "Письма".

Надеюсь, что кому-то помог.

4 комментария:

t800 комментирует...

Со spampd не доводилось работать?

morbo комментирует...

Это переводная статья. Автора лень спрашивать. От своего лица могу сказать - мне со spampd работать приходилось. В более поздней моей заметке я даже описал как настроить spampd: Настройка почтовой системы на основе Postfix, Dovecot, PostfixAdmin

tiandrey комментирует...

# Включить систему Бэйс
# Включить автообучение Бэйс

Бедный Байес в гробу перевернулся от такого издевательства. Там речь идёт о Байесовском классификаторе, а не о "системе Бэйс".

morbo комментирует...

О чём там идёт речь - понятно и так, а я по чём купил, за столько и продаю.