Ключевые слова:smap, mail, imap, sendmail, (найти похожие документы)
From: Алексей Цыбань <leshats@od.anything3d.com.
Newsgroups: email
Date: Mon, 23 May 2005 18:21:07 +0000 (UTC)
Subject: Установка и настройка SpamAssassin на сервере с sendmail и cyrus-imap.
Введение
Недавно одим пользователь пожаловался мне, что получает в день 150-200
спамерских писем и 10-20 писем по работе. В таком случае без
работоспособной системы фильтрации спама обойтись невозможно.
В данной статье описывается установка системы SpamAssassin
на сервер, на котором уже работает связка sendmail + cyrus-imap.
Для связи sendmail и spamassassin будет использован spamass-milter
SpamAssassin проделывает над полученным почтовым сообщением ряд тестов.
Каждый тест меет свою весовую оценку. Оценки всех положительных тестов
складываются и результат сообщается пользователю. Перечень всех тестов и
оценок можно посмотреть здесь http://spamassassin.apache.org/tests_3_0_x.html
Список всех положительных тестов помещается в заголовок сообщения
X-Spam-Report.
Система настраивается так, чтобы пропускать всю почту, за исключением
вирусов. Спам только помечается и каждый пользователь сам решает, что с
ним делать дальше.
Установка
Рекомендуется sendmail 8.12.+. Sendmail должен быть собран с поддержкой milter.
Описанные команды и файлы конфигурации верны для SpamAssaissin 3.0.3
Я устанавливал SpamAssassin в Gentoo и в Slackware. Для Gentoo все просто:
emerge -pv mail-filter/spamassassin
И поправим /etc/conf.d/spamd:
SPAMD_OPTS="-m 30 -u nobody"
PIDFILE="/etc/mail/spamassassin/spamd.pid"
И еще добавим spamd в автозапуск:
rc-update add spamd default
Для Slackware воспользуемся CPAN:
perl -MCPAN -e shell [as root]
o conf prerequisites_policy ask
install Digest::SHA1
install HTML::Parser
install Storable
install MIME::Base64
install DB_File
install Net::DNS
install Mail::SpamAssassin
quit
И добавим в стартовые скрипты где-то перед sendmail:
/usr/bin/spamd -m 20 -u nobody -r /etc/mail/spamassassin/spamd.pid -d
Установка spamass-milter.
Для Gentoo все опять не сложно:
emerge -pv spamass-milter
rc-update add spamass-milter default
Файл конфигурации оставляем как есть.
Для Slackware скачаем spamass-milter отсюда http://savannah.nongnu.org/projects/spamass-milt/
./configure --prefix=/usr
make
su
make install
И в стартовые скипты между spamd и sendmail добавляем.
/usr/sbin/spamass-milter -p /var/run/spamass-milter.sock -f
Теперь правим /etc/spamassassin/local.cf. Рекомендую прочитать
документацию по нему. Мой вариант привожу ниже.
trusted_networks 192.168/16 127/8
trusted_networks 127.
whitelist_from localhost
#Добавляет строку к теме если письмо признано спамом.
rewrite_header Subject ****SPAM*(_SCORE_)****
#Добавляет развернутый рапорт в заголовок X-Spam-Report
add_header all Report _REPORT_
#Порог срабатывания для принятия решения спам - не спам. Для почтового
#сервера разработчики рекомендуют 8.0 - 10.0. Для отднльных пользователей
#можно использовать 5.0 и даже 4.0
required_hits 8.0
report_safe 0
use_bayes 1
bayes_auto_learn 1
skip_rbl_checks 0
#DCC Razor и прочие я пока не использую, и без них хорошо работает
use_razor2 0
use_dcc 0
use_pyzor 0
use_auto_whitelist 1
auto_whitelist_path /etc/mail/spamassassin/auto_whitelist
bayes_path /etc/mail/spamassassin/bayes
Поправим права:
chown nobody /etc/mail/spamassassin
В sendmail.mc добавляем:
INPUT_MAIL_FILTER(`clmilter',`S=local:/var/clamav/clmilter.sock, F=T, T=C:1m;S:5m;R:5m;E:1h')
INPUT_MAIL_FILTER(`spamassassin', `S=local:/var/run/spamass-milter.sock, F=T, T=C:15m;S:4m;R:4m;E:10m')
define(`confMILTER_MACROS_CONNECT',`b, j, _, {daemon_name}, {if_name}, {if_addr}')
Clmilter - это проверка на вирусы через Clamav.
Пересобираем sendmail.mc.
Запускаем spamd, spamass-milter. Проверяем, что они запустились.
Рекомендую добавить к ключам spamd -D и внимательно прочитать его
отладочные логи. Логи его по умолчанию попадают в maillog.
Если все в порядке, перезапускаем sendmail.
Внимательно смотрим в maillog, убеждаемся, что почта ходит. Убеждаемся,
что SpamAssassin работает.
Рекомендую проверить права на файлы bayes_* в /etc/mail/spamassassin.
Пользователь nobody должен иметь права на запись.
Cyrus
Для того, чтобы все желающие могли поучаствовать в обучении байесовского
фильтра создаем на IMAP сервере две общие папки. IS_Spam и NOT_Spam
cyradm --user cyrus localhost
cm IS_Spam
sam IS_Spam anyone write
cm NOT_Spam
sam NOT_Spam anyone write
В файл /root/.fetchmailrc добавляем:
poll localhost proto IMAP
user nobody pass nobodypass
А в crontab пользователя root:
20 * * * * /usr/bin/fetchmail -a -s -n --folder ForSpam -m '/usr/bin/sa-learn --spam' -u nobody localhost
30 * * * * /usr/bin/fetchmail -a -s -n --folder NOT_Spam -m '/usr/bin/sa-learn --ham' -u nobody localhost
Для автоматического перемещения спама в папку SPAM каждому желающему
можно настроить sieve скрипт. Рекомендую воспользоваться SquirrelMail
веб-интерфейсом к почте и плугином для управления sieve к нему. Очень
удобный и понятный интерфейс.
Сам sieve скрипт для выглядит примерно так:
require ["fileinto"];
if
header :contains "X-Spam-Level" "******"
{
fileinto "INBOX.SPAM";
stop;
}
Фильтровать удобнее всего по заголовку X-Spam-Level. В нем количество
звездочек соответствует целой части спам-оценки.
В моем ведении оказались два почтовых сервера разных организаций,
которые являлись релеями друг для друга. SpamAssassin стоял на обоих и в
логах часто стали появляться строки типа этой:
Milter change: header X-Spam-Level: from ************* to *
Естественно, спам с сильно пониженной оценкой проходил через фильтры и
вызывал неудовольствие пользователей. Разбор логов показал, что
приходящий с нормального релея спам проходит проверки на DNSBL, из-за
чего общая спам-оценка может сильно понизится.
Пришлось добавить в команду запуска spamass-milter ключ -i <ip-addr>.
Теперь почтовый сервер не перепроверяет на спам почту, приходящую от
своего релея.
/usr/sbin/spamass-milter -p /var/run/spamass-milter.sock -f -i IP.OFF.2ND.REL
Для взаимной синхронизации баз байесовского фильтра между серверами я
использовал команды в crontab:
20 1 * * * /usr/bin/fetchmail -a -s -n --folder ForSpam -m '/usr/bin/sa-learn --spam' -u nobody remote.server
30 1 * * * /usr/bin/fetchmail -a -s -n --folder NOT_Spam -m '/usr/bin/sa-learn --ham' -u nobody remote.server
И запись в файл /root/.fetchmailrc:
poll remote.server proto IMAP
user nobody pass nobodypass
keep
Хотя при большом количестве спама, а главное, при большой активности
пользователей, такой подход может привести к заметному росту трафика
между серверами.
В описанной конфигурации спам-оценку больше 5.0 получает около 80%
спама. Ложные срабатывания бывают очень редко.
у меня стоит связка
sendmail + cyrus-sasl2 + mysql + courier-imap-*/authdaemond + drweb + clamav + SpamAssasin и все работает без глюков в формате maildrop, что очень удобно.
SMTP: GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN
POP3: PLAIN LOGIN CRAM-MD5 CRAM-SHA1 CRAM-SHA256 +SSL
в базе юзеры, домены/адреса/маршрутизация,пермишены и квоты, логи.
Возникла проблемка с SpamAssassin. При фильтрации, не спам письма, бывет, но очень редко, попадают на спам ящик. Большая часть пользователей не замечают этого, а некоторые личности требуют, чтоб вся почта, спам это или нет валилась им на ящик. Вот и всего этого встает вопрос - Можно ли сделать избирательное фильтрование почты, для одних ящиков фильтруется для других нет? Возможно ли такое?
в статье небольшая путаница насчёт ящика для спама
создаётся IS_Spam
в кроне используется ForSpam
--
Ещё момент, данные данные ящики (IS_Spam,NOT_Spam) - можно подключить всем пользователям как общие папки. куда спам/не-спам письмо можно будет просто перетащить.