Photo by Samuel Regan-Asante
SPAM. Настройка spamassassin. Пересылка в СПАМ

SPAM. Настройка spamassassin. Пересылка в СПАМ

10.12.23

Для борьбы со СПАМом есть хороший инструмент — spamassassin. Для его установки на Ubuntu 22.04 надо:

# apt install spamassassin spamc spamass-milter

spamass-milter нужен для для интеграции spamassassin с Postfix SMTP Server. После установки надо внести изменение в два файла. Начнём с /etc/default/spamass-milter Надо закомментировать строчку с опцией -r

#OPTIONS="${OPTIONS} -r 15"

Эта строка заставляет SMTP сервер отклонять письма с оценкой 15 и выше. На первых этапах этого лучше не делать. Так как есть вероятность, что нужные пользователям письма будут отклонены. Особенно при дефолтных настройках spamassassin. Чуть позже мы рассмотрим как переместить подозрительные письма в СПАМ.

Далее, добавим следующие строки в файл /etc/postfix/main.cf

smtpd_milters = local:spamass/spamass.sock
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
milter_protocol = 6
non_smtpd_milters = $smtpd_milters

Если у вас есть ещё сервисы, такие как DKIM, DMARK, то добавьте local:spamass/spamass.sock в первую строчку (smtpd_milters) через запятую после них.

Далее надо рестартовать spamass-milter, spamassassin и postfix:

# systemctl restart postfix spamass-milter spamassassin

Добавить spamassassin в автозагрузку

# systemctl enable spamassassin

Пересылка СПАМа в папку Junk

Настроим пересылку СПАМа в соответствующую папку всем абонентам. Для этого надо установить dovecot-sieve (полагаю, что сам Dovecot уже установлен и настроен):

# apt install dovecot-sieve dovecot-managesieved

Далее, правим файлы настроек dovecot’a. В /etc/dovecot/conf.d/15-lda.conf надо добавить протокол:

protocol lda {
  # Space separated list of plugins to load (default is global mail_plugins).
  mail_plugins = $mail_plugins sieve
}

Файл /etc/dovecot/conf.d/20-lmtp.conf:

protocol lmtp {
      mail_plugins = quota sieve
}

В файле /etc/dovecot/conf.d/90-sieve.conf найдите и раскомментируйте или приведите к следующему виду строку:

sieve_default = /var/lib/dovecot/sieve/default.sieve

Это мы указали где будет файл с дефолтным скриптом sieve. Можно ещё указать параметр sieve = где будут располагаться индивидуальные файлы пользователей.

Далее правим (создаём) сам /var/lib/dovecot/sieve/default.sieve:

require ["fileinto", "mailbox"];

if header :contains "X-Spam-Flag" "YES" {
   fileinto :create "Junk";
   stop;
}

Тут мы все письма с заголовком X-Spam-Flag YES перемещаем в папку Junk, а если её нет — создаём. Далее, выполним скрипт:

# sievec /var/lib/dovecot/sieve/default.sieve

Что создаст файл /var/lib/dovecot/sieve/default.svbin

Добавим в файл /etc/postfix/main.cf строчку:

mailbox_command = /usr/lib/dovecot/deliver -d $LOGNAME

Перезапускаем Dovecot и Postfix

systemctl restart dovecot.service postfix.service

Тестирование

Для тестирования отправьте письмо с какого-нибудь почтового сервиса (Яндекс подойдёт) письмо в адрес какого-то абонента своего сервера с темой:

*****SPAM***** XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X

и любым текстом. Такое письмо должно попасть в папку СПАМ. Если так, то дальше можно приступать к «тонким» настройкам spamassassin

Настройка spamassassin

Пользовательские настройки хранятся в файле /etc/spamassassin/local.cf В самом файле есть много аннотаций и всё доступно. Можно включить report_safe 1 и в письма будет добавляться отчет. Можно это сделать на период тестирования и настройки.

Если вы запустили OpenDMARK сервис, то добавьте строки:

header    CUSTOM_DMARC_FAIL   Authentication-Results =~ /dmarc=fail/
describe  CUSTOM_DMARC_FAIL   DMARC check failed
score     CUSTOM_DMARC_FAIL   3.0

Тут мы добавили 3 балла если не пройден тест DMARK.

Черные и белые списки

Можно формировать «чёрные» и «белые» списки. Используйте параметры blacklist_from и whitelist_from для добавления определённого адреса или адреса домена в чёрный или белый список. Например:

blacklist_from vasja@gmail.com
blacklist_from *@some-bad-spam-domain.com
whitelist_from *@canonical.com

Проверка

Проверить синтаксис можно командой:

# spamassassin --lint

Если вывод нулевой, то всё ОКей и можно перезапускать spamassassin