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