Власний спам-фільтр
Spam Scanner працює на вашому сервері й залишає пошту там. Модель класифікатора входить до пакета, немає ні телеметрії, ні перевірки оновлень, а за замовчуванням він надсилає лише DNS-запит про ім'я хоста кожного посилання.
Що залишає сервер#
За замовчуванням лише імена хостів із посилань у листі. Їх перевіряють на фільтрувальних резолверах Cloudflare (1.1.1.2 і 1.1.1.3) звичайними DNS-запитами, і жодна частина листа чи його адрес не надсилається. --no-cloudflare вимикає й це.
Будь-яка інша перевірка, що використовує мережу, вимкнена, доки ви її не ввімкнете:
| Перевірка | Вмикається | Що надсилає |
|---|---|---|
| SPF, DKIM, DMARC, ARC | --auth | DNS-запити про записи відправника |
| DNS-списки блокування | --dnsbl, --uribl | IP-адресу клієнта й домени посилань, як DNS-запити |
| ClamAV | --clamav | Вкладення, вашому власному clamd |
| Мовна модель | --llm | Короткий зміст листа, на вказаний вами сервер |
Перевірки не записуються в журнал і не зберігаються. Безпека та конфіденційність
Встановлення на сервер#
npm install --global spamscannerАбо окремий виконуваний файл із вбудованими Node.js і моделлю:
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. Початок роботи
Перевірки оновлень немає. Щоб оновитися, знову запустіть команду встановлення: обидві команди ставлять останній реліз.
Запуск як служба#
Сервери milterПоштовий фільтр: протокол із Sendmail, який також використовує Postfix; він дозволяє окремій програмі перевіряти кожен лист під час сеансу SMTP., HTTP, TCP і spamdДемон SpamAssassin. Його протокол використовують spamc, Exim, Haraka та інші клієнти SpamAssassin. слухають 127.0.0.1, якщо --host не вказує інше. Запускайте їх від непривілейованого користувача, наприклад під systemd:
[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 або Sendmail | spamscanner milter | 7831 |
| Postfix, ніколи не відхиляючи пошту | spamscanner filter, контентний фільтр | немає |
| Exim, Haraka або spamc | spamscanner spamd | 783 |
| Усе, що вміє HTTP | spamscanner http | 7832 |
| Простий TCP-клієнт | spamscanner server | 7830 |
| Поштовий сервер на Node.js | import SpamScanner from 'spamscanner' | немає |
Сервери можуть додавати до листа заголовки X-Spam-Flag, X-Spam-Score і X-Spam-Status, а бібліотека повертає оцінку й кожен тест, що спрацював. Посібники: спам-фільтр для Postfix, інші поштові сервери і HTTP API.
Мовні моделі локально#
Мовна модель необов'язкова й читає лише спірні випадки: явний спам і явний hamБажана пошта: протилежність спаму. до неї не доходять. З OllamaПрограма, яка завантажує й запускає відкриті мовні моделі на вашому комп’ютері та надає HTTP API. вона працює на тому самому сервері, тож жоден лист його не залишає:
ollama pull qwen3.5:4b
spamscanner milter --llm ollama --llm-model qwen3.5:4bqwen3.5:4b працює на CPU. З хмарним провайдером персональні дані видаляються з листа перед надсиланням. Мовні моделі
Навчання на власній пошті#
Вбудовану модель навчено на відкритих наборах даних. Модель, навчена на пошті, яку отримує ваш сервер, працює краще й залишається на цьому сервері:
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 необов'язкові й працюють як окремі служби.