Спам-фильтр для Postfix

Spam Scanner начинает фильтровать сервер Postfix примерно за пять минут. Он работает как milterMail filter: протокол из Sendmail, который также использует Postfix; позволяет отдельной программе проверять каждое письмо во время SMTP-сессии., поэтому Postfix спрашивает его о каждом письме во время SMTP-сессии и может отклонить спам до приёма.

Установка и запуск#

Shell
npm install --global spamscanner
spamscanner milter --port 7831 --auth --subject-tag "[SPAM]"

--auth проверяет SPFSender Policy Framework: запись в DNS со списком серверов, которым разрешено отправлять почту от имени домена., DKIMDomainKeys Identified Mail: подпись письма, которая проверяется открытым ключом, опубликованным в DNS отправителя., DMARCПолитика в DNS, которая сообщает получателям, что делать с письмом от имени домена, не прошедшим выравнивание SPF и DKIM. и ARCAuthenticated Received Chain: подписи, которые переносят результаты аутентификации через пересылающие серверы.; --subject-tag помечает спам в теме. Каждое письмо получает заголовки X-Spam-Flag, X-Spam-Score, X-Spam-Status и X-Spam-Action, а любой заголовок X-Spam-*, добавленный отправителем, сначала удаляется.

Подключение Postfix#

INI
# /etc/postfix/main.cf
smtpd_milters = inet:127.0.0.1:7831
milter_protocol = 6
milter_default_action = accept
Shell
sudo postfix reload

milter_default_action = accept пропускает почту без фильтрации, если milter недоступен; tempfail вместо этого просит отправителей повторить попытку.

Отклонение спама во время SMTP-сессии#

Shell
spamscanner milter --port 7831 --auth --reject

Письма на пороге отклонения (15 баллов) отклоняются ответом 451 4.7.1 Message rejected as spam. Код 451 временный: отправитель сохраняет письмо и повторяет попытку, поэтому неверное решение стоит задержки, а не потерянного письма. Когда результаты выглядят правильно, --reject-code 550 делает отказ окончательным.

Без milter#

Контент-фильтр работает после того, как Postfix принял письмо: Postfix передаёт его по конвейеру в spamscanner filter, который добавляет заголовки и возвращает письмо. Во время сессии ничего не отклоняется, а при сбое доставка всегда откладывается, а не возвращается отправителю. Настройка контент-фильтра

Спам в Junk#

С Dovecot помеченную почту раскладывает правило Sieve:

Text
require ["fileinto"];
if header :is "X-Spam-Flag" "YES" { fileinto "Junk"; stop; }

Проверено на настоящем Postfix#

Сквозные тесты проекта запускают Postfix с milter и контент-фильтром: hamНужная почта: противоположность спама. доставляется с заголовками, а поддельный X-Spam-Flag удаляется, спам помечается, а GTUBEGeneric Test for Unsolicited Bulk Email: фиксированная строка, которую любой спам-фильтр считает спамом; используется для тестирования. отклоняется с кодом 550 во время SMTP-сессии.

Далее: полное руководство по Postfix и Sendmail с модулем systemd и INPUT_MAIL_FILTER для Sendmail.

Редактировать эту страницу на GitHub · Markdown ·