Журнал Системный Администратор, Сентябрь 2003

Журнал Системный Администратор

Сентябрь 2003

Цена: $4.5 US

  Подписаться

Зарегистриванные пользователи, пожалуйста следуйте этой ссылке

Версия для печати Вернуться к оглавлению

Postfix + ... + SpamAssassin Mini-HOWTO

Mini-HOWTO

Андрей Мозговой

Спам. Рассылка рекламы. Бороться с нежелательной почтой можно по-разному. Эта статья расскажет, как прикрутить фильтр SpamAssassin к MTA Postfix. Надеюсь, статья получится выдержанной в стиле mini-howto.

Пожалуйста, не пытайтесь прикрутить фильтр к ненастроенному/работающему серверу Postfix. Далее будем полагать, что у читателя настроен и нормально работает почтовый сервер и уже установлен SpamAssassin.

Установка SpamAssassin (коротко): SpamAssassin – это perl-модуль. Состоит из трех основных частей:

n  spamd – daemon, к которому подключается клиент;

n  spamc – client, который подключается к spamd. На вход клиенту подаются письма, с выхода забираются отфильтрованные письма;

n  spamassassin – perl-скрипт, работает сам по себе, подробней – «man spamassassin». Установка подробно описана в файле INSTALL.

 

Мой Postfix работает в следующей связке: Postfix + Cyrus-SASL + Mysql + Courier-IMAP + SquirrelMail + DrWeb, а теперь еще и SpamAssassin.

n  Postfix – сам MTA;

n  Cyrus-SASL – используется для авторизации пользователей (пока только SMTP AUTH);

n  MySQL – БД – хранит все бюджеты пользователей;

n  Courier-IMAP – POP3- и IMAP-сервисы;

n  SquirrelMail – веб-интерфейс для пользователей, кстати, нормально работает с кириллицей;

n  DrWeb – антивирус, работает как фильтр, в этом собственно вся проблема и была. Если прикручивать SpamAssassin как один-единственный фильтр, думаю, проблем особых возникнуть не должно. Схема проста, в master.cf прописывам фильтр, например, spam, с опцией:

 

-o content_filter=spam

 

    daemon smtpd, говорим «использовать фильтр spam». Письмо, пришедшее на smtp, переправляется на spamс, spamс проверяет и с помощью sendmail возвращает обратно в очередь.

 

--- MASTER.CF ---

#=====================================================================

# service type private unpriv chroot wakeup maxproc command+args

#               (yes)  (yes)  (yes) (never)  (100)

#=====================================================================

   smtp    inet  n       -      n      -      50      smtpd

  -o content_filter=spam:dummy

...

# SpamAssassin Filter

# ====================================================================

   spam    unix  -       n      n      -       -       pipe

 flags=R user=spam argv=/usr/bin/spamc -u spam -e /usr/sbin/sendmail -t

--- END MASTER.CF ---

(Кстати, с «:dummy» надо еще поэкспериментировать.)

Но SpamAssassin у меня не единственный фильтр, есть еще и DrWeb. Вот как было все прописано до использования SpamAssassin.

--- MASTER.CF ---

#=====================================================================

# service type private unpriv chroot wakeup maxproc command+args

#               (yes)  (yes)  (yes) (never)  (100)

#=====================================================================

    smtp  inet    n      -      n      -       50      smtpd

  -o content_filter=drweb:dummy

...

# DrWeb AntiVirus Filter

#=====================================================================

    drweb unix    -      n      n      -       -       pipe

 flags=R user=drweb argv=/opt/drweb/drweb-postfix -f ї

    ${sender} -- ${recipient}

--- END MASTER.CF ---

Фильтровать почту будем, используя именно spamc/spamd, а не через perl-скрипт spamassassin. Так оно намного быстрее… да и вообще симпатичнее.

Создаем в системе пользователя с домашним каталогом «/etc/mail/spamassassin», shell можно не давать (/bin/fasle). Но валидный shell очень удобен, когда надо добавить/удалить какой-нибудь адрес в White/Black List. Решайте сами. Также создаем группу spam. Каталоги /etc/mail/spamassassin и /usr/local/share/spamassassin отдаем в распоряжение бюджету spam (chown –R spam.spam /path/to/dir).

С документацией по настройке spamd трудности [2], я использовал веб-интерфейс, написанный Michael Moncur [3]. Принцип фильтрации следующий: во всех письмах, распознанных как спам, поля темы меняются на «SPAM: <original subject>».

Запускаем spamd: прочтите руководство и выберите необходимые параметры (man spamd). Меня устроило следующее:

/usr/bin/spamd -d -a -c -m 50 -u spam

  * используйте опцию "-D" для отладки.

  * не забудьте прописать spamd в стартовых скриптах

Уже можно протестировать SpamAssassin. Сохраните спамовское письмо, которое пришло к вам, на сервере и подайте его на вход spamc (желательно сразу использовать параметр -u user).

/usr/bin/spamc -u spam -e /usr/sbin/sendmail –t </path/to/spam_mail

Письмо пройдет проверку и вернется в очередь MTA, затем опять упадет к вам в Home_Dir. Можете проверять почтовый ящик. Если spamd был запущен с опцией «-D» – в лог-файле (скорее всего в /var/log/maillog) вы найдете подробный отчет о проделанной работе. Работает? Отлично, прикручиваем фильтр в Postfix. (Не работает? Внимательно прочтите сообщения в лог-файле.)

Приступим к настройке Postfix. (DrWeb настроен и нормально работает.) Есть как минимум два варианта, как подключить SpamAssassin к Postfix.

n  Первый способ я нашел в статье reVen [6]. Его суть: передача почты от сервиса к сервису, прописанных в master.cf. Но мне такой способ не понравился. Зачем дополнительно использовать Perl в перенаправления с сокета на сокет? Можно вообще без лишних сокетов (мое личное мнение).

n  Может, я изобрел велосипед, но дошел до этого сам, хотя ничего сложного в нем нет. Изменяем в master.cf фильтр\сервис drweb, в сумме получаем следующий файл:

 

--- MASTER.CF ---

#=====================================================================

# service type private unpriv chroot wakeup maxproc command+args

#               (yes)  (yes)  (yes)  (never) (100)

#=====================================================================

    smtp  inet    n      -      n      -      50      smtpd

  -o content_filter=drweb:dummy

...

# DrWeb AntiVirus Filter and SpamAssassin Filter

# ====================================================================

   drweb  unix    -      n      n      -      -       pipe

flags=R

user=drweb

argv=/usr/local/sbin/postfix_filter -f ${sender} -- ${recipient}

--- END MASTER.CF ---

А вот и маленький, да удаленький скриптик на BASH, который получает письмо от Postfix, проверяет его на spam с помощью spamc и отдает его (письмо) антивирусу DrWeb.

--- /usr/local/sbin/postfix_filter ---

#!/bin/sh

 

(/usr/bin/spamc -u spam -s 1024000 | /opt/drweb/drweb-postfix $@) <&0

--- END /usr/local/sbin/postfix_filter ---

  * -s – максимальный разрер проверяемого письма,

  * по умолчанию 250k

Вот и вся настройка. Еще раз повторюсь, если что-то не работает, внимательно прочтите лог-файлы.

Ссылки:

1. SpamAssassin Homesite: http://www.spamassassin.org, в статье описывается версия 2.55.

2. http://www.spamassassin.org/doc/Mail_SpamAssassin_Conf.html

3. http://www.yrex.com/spam/spamconfig.php

4. http://www.perl.com/CPAN – все необходимое для Perl.

5. Postfix Homesite: http://www.postfix.org

6. http://raven.elk.ru/unix/how-to/postfix2+cyrus-sasl2+kav+spamassassin+courier-imap+tls+mysql+FreeBSD4/postfix2+cyrus-sasl2+kav+spamassassin+courier-imap+tls+mysql+FreeBSD4.html – вариант использования Postfix + SpamAssassin

7. Статьи по настройке Postfix: http://www.onix.opennet.ru/mail/mail.html; http://linuxnews.ru/docs/new/isp-mail/version1.2/isp-mail-howto.1.2.rus.txt




Все права зарезервированы. Этот материал принадлежит или лицензирован компании PLARANA INC. Только для частного использования. Любое распространение запрещено без письменного разрешения PLARANA INC
Версия для печати Вернуться к оглавлению


CrAzYMaN
2008-09-11 03:23:01

Дока полная лажа