Собственный спам-фильтр

Spam Scanner работает на вашем сервере и оставляет почту там. Модель классификатора входит в пакет, нет ни телеметрии, ни проверки обновлений, а по умолчанию он отправляет только DNS-запрос об имени хоста каждой ссылки.

Что покидает сервер#

По умолчанию только имена хостов из ссылок в письме. Они проверяются на фильтрующих резолверах Cloudflare (1.1.1.2 и 1.1.1.3) обычными DNS-запросами, и никакая часть письма или его адресов не отправляется. --no-cloudflare отключает и это.

Любая другая проверка, которая использует сеть, выключена, пока вы её не включите:

ПроверкаВключаетсяЧто отправляет
SPF, DKIM, DMARC, ARC--authDNS-запросы о записях отправителя
DNS-списки блокировки--dnsbl, --uriblIP-адрес клиента и домены ссылок, в виде DNS-запросов
ClamAV--clamavВложения, вашему собственному clamd
Языковая модель--llmКраткое содержание письма, на указанный вами сервер

Проверки не записываются в журнал и не сохраняются. Безопасность и конфиденциальность

Установка на сервер#

Shell
npm install --global spamscanner

Или отдельный исполняемый файл со встроенными Node.js и моделью:

Shell
curl -fsSL https://github.com/spamscanner/spamscanner/releases/latest/download/install.sh | bash

Скрипт установки перед установкой сверяет файл с SHA256SUMS релиза, а у каждого файла есть подписанная аттестация происхождения сборки, которую проверяет gh attestation verify. Файлы есть для Linux (x64 и arm64), macOS и Windows. Файлам для Linux нужна glibc, поэтому на Alpine устанавливайте через npm. Начало работы

Проверки обновлений нет. Чтобы обновиться, снова запустите команду установки: обе команды ставят последний релиз.

Запуск как служба#

Серверы milterMail filter: протокол из Sendmail, который также использует Postfix; позволяет отдельной программе проверять каждое письмо во время SMTP-сессии., HTTP, TCP и spamdДемон SpamAssassin. Его протокол используют spamc, Exim, Haraka и другие клиенты SpamAssassin. слушают 127.0.0.1, если --host не указывает иное. Запускайте их от непривилегированного пользователя, например под systemd:

INI
[Service]
ExecStart=/usr/local/bin/spamscanner milter --port 7831 --auth --subject-tag [SPAM]
User=spamscanner
Group=spamscanner
Restart=on-failure
NoNewPrivileges=yes
ProtectSystem=strict
ProtectHome=yes
PrivateTmp=yes

Полный юнит и его настройка приведены в руководстве по Postfix. Ни один из серверов не поддерживает TLS, поэтому для доступа с другой машины используйте частную сеть, SSH-туннель или обратный прокси с TLS.

Подключение почтового сервера#

Почтовый серверКомандаПорт
Postfix или Sendmailspamscanner milter7831
Postfix, никогда не отклоняя почтуspamscanner filter, контентный фильтрнет
Exim, Haraka или spamcspamscanner spamd783
Всё, что умеет HTTPspamscanner http7832
Простой TCP-клиентspamscanner server7830
Почтовый сервер на Node.jsimport SpamScanner from 'spamscanner'нет

Серверы могут добавлять к письму заголовки X-Spam-Flag, X-Spam-Score и X-Spam-Status, а библиотека возвращает оценку и каждый сработавший тест. Руководства: спам-фильтр для Postfix, другие почтовые серверы и HTTP API.

Языковые модели локально#

Языковая модель необязательна и читает только спорные случаи: явный спам и явный hamНужная почта: противоположность спама. до неё не доходят. С OllamaПрограмма, которая загружает и запускает открытые языковые модели на вашей машине и предоставляет HTTP API. она работает на том же сервере, так что ни одно письмо его не покидает:

Shell
ollama pull qwen3.5:4b
spamscanner milter --llm ollama --llm-model qwen3.5:4b

qwen3.5:4b работает на CPU. При облачном провайдере персональные данные удаляются из письма перед отправкой. Языковые модели

Обучение на своей почте#

Встроенная модель обучена на открытых наборах данных. Модель, обученная на почте, которую получает ваш сервер, работает лучше и остаётся на этом сервере:

Shell
spamscanner train --spam ~/Maildir/.Junk --ham ~/Maildir/cur --out /var/lib/spamscanner/model.json
SPAMSCANNER_MODEL=/var/lib/spamscanner/model.json spamscanner milter

Файл модели хранит хешированные счётчики признаков, а не слова или текст писем. Обучение

Требования#

Node.js 18 или новее на Linux, macOS или Windows, а с отдельным исполняемым файлом ничего. ClamAVАнтивирусный движок с открытым исходным кодом. Его демон clamd проверяет файлы, переданные через сокет. и Ollama необязательны и работают как отдельные службы.

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