Альтернатива SpamAssassin с поддержкой протокола spamd
Spam Scanner отвечает по протоколу spamdДемон SpamAssassin. Его протокол используют spamc, Exim, Haraka и другие клиенты SpamAssassin. из SpamAssassin, поэтому программы, написанные для SpamAssassin, используют его без изменений: spamc, условие spam в Exim, плагин spamassassin в Haraka и другие.
Замена#
sudo systemctl disable --now spamd # or spamassassin
npm install --global spamscanner
spamscanner spamd --port 783 --authspamc -c < message.eml # prints the score, exits 1 for spam
spamc -R < message.eml # the report, one line per test
spamc < message.eml # the message with X-Spam-* headersОн отвечает на CHECK, SYMBOLS, REPORT, REPORT_IFSPAM, PROCESS, HEADERS, PING и, с --allow-tell, на TELL для обучения. Сквозные тесты проекта проверяют его с помощью собственного spamc из SpamAssassin.
Что остаётся прежним#
- Заголовки:
X-Spam-Flag,X-Spam-Score,X-Spam-LevelиX-Spam-Statusв формате SpamAssassin, поэтому существующие правила Sieve, procmail и почтовых клиентов продолжают работать. - Оценка с порогом 5, составленная из именованных тестов с баллами:
BAYES_99,RBL_ZEN,SPF_FAIL,DKIM_PASSи так далее. - Баллы отдельных тестов можно менять по имени теста.
Что отличается#
- Языки. Слова выделяются по правилам Unicode, поэтому китайский, японский и тайский читаются как слова, а не как одна длинная строка, а маскировка вроде невидимых символов или кириллических букв в латинских словах сначала снимается.
- Фишинг. Похожие домены, обманные ссылки и названия брендов в отображаемых именах проверяются без дополнительных правил.
- Вложения определяются по байтам: исполняемый файл, переименованный в
.pdf, остаётся исполняемым файлом. - Языковые модели. Спорные случаи можно передавать локальной модели через OllamaПрограмма, которая загружает и запускает открытые языковые модели на вашей машине и предоставляет HTTP API. или облачной.
- Node.js. Один
npm installили автономный исполняемый файл; никаких модулей Perl и обновлений правил.
Spam Scanner не выполняет файлы правил SpamAssassin, а формат его байесовской базы данных собственный: обучите его на той же почте с помощью spamscanner train.
Exim#
spamd_address = 127.0.0.1 783
# in the DATA ACL
warn spam = nobody:true
add_header = X-Spam-Score: $spam_score
defer spam = nobody:true
condition = ${if >={$spam_score_int}{150}}
message = Message rejected as spam