В связи со сменой хостинг-панели на сервере с 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***, и эти письма уже на локальном компе можно фильтровать по папкам.

Наверх