Власний спам-фільтр

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. Початок роботи

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

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

Сервери milterПоштовий фільтр: протокол із 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 ·