В связи со сменой хостинг-панели на сервере с ISPConfig на ZPanel пришлось заменить и сервер входящей почты с Courier на Dovecot, поскольку Zpanel поддерживает работу только с последним. Раньше почтовая связка работала через вирусный сканер Amavis, который подключал SpamAssassin для определения спамности письма. Тот помечал спамное письмо, модифицируя тему (subject) по шаблону ***SPAM***. Потом письмо направлялось во Входящие. Фильтрация помеченных писем производилась не на сервере, а уже у меня на локальной машине, после получения. Это было удобно по той простой причине, что некорректно распознанные письма могли попасть в спам незаслуженно, но при этом они не терялись и не удалялись. И в случае обнаружения, я их быстро мог восстановить.
Однако с переходом на Dovecot такая возможность отчего-то исчезла: все письма, которые считались спамом, перестали идти во Входящие и архивировались в определенной карантинной директории на сервере. Кроме того, в связи с переездом от Hetzner'а к Edis , мощностей для адекватной работы стало не хватать. В частности, система виртуализации на серверах от Edis OpenVZ не поддерживает нормальную работу со свопом. Проще говоря, если забилась оперативка в связи с наплывом посетителей, простаивающие в ней программы выгружены в дисковый кэш не будут.
Решение у проблемы оказалось в вышеописанных условиях простым и эффективным. Избавляемся от Amavis (заодно и от Clamav), освобождая память. А далее работаем со SpamAssassin напрямую, указав его в качестве фильтра в конфигурации Postfix.
По порядку. Сначала ставим SpamAssassin, если не установлен, естественно:
apt-get install spamassassin spamc
Создаем соответствующие группу и пользователя для него, указав директории для логов:
# groupadd spamd
# useradd -g spamd -s /bin/false -d /var/log/spamassassin spamd
# mkdir /var/log/spamassassin
# chown spamd:spamd /var/log/spamassassin
Редактируем /etc/default/spamassassin таким образом:
ENABLED=1
SAHOME="/var/log/spamassassin/"
OPTIONS="--create-prefs --max-children 2 --username spamd \
-H ${SAHOME} -s ${SAHOME}spamd.log"
Поправим немного конфиг SpamAssassin (изменение темы спамного письма, отключение изменения тела письма...):
# Rewrite the subject of suspected spam e-mails
#rewrite_header Subject *****SPAM*****
rewrite_header Subject *****SPAM***** (_SCORE_)
# Just add an X-Spam-Report header to suspected spam, rather than rewriting the content of the e-mail
report_safe 0
# Also we want to add a detailed ham report header to even e-mail that ISN'T suspected to be spam
add_header ham HAM-Report _REPORT_
# Set the threshold at which a message is considered spam (3 is usually sufficient)
required_score 3.0
Запускаем его:
/etc/init.d/spamassassin start
Поправим Postfix, чтобы он использовал SpamAssassin в качестве фильтра. В этом случае пришедшее письмо сразу будет отправлено на проверку и обработку. Правим в самом начале файла /etc/postfix/master.cf:
smtp inet n - - - - smtpd
-o content_filter=spamassassin
А в самом конце файла добавляем:
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
Все. Теперь у всех подозрительных писем к темам будет приписываться пометка ***SPAM***, и эти письма уже на локальном компе можно фильтровать по папкам.