Filtro antispam self-hosted

Spam Scanner gira sul tuo server e tiene lì la posta. Il modello del classificatore è incluso nel pacchetto, non ci sono telemetria né controlli degli aggiornamenti e, di default, l'unica cosa che invia è una query DNS per il nome host di ogni link.

Cosa esce dal server#

Di default, solo i nomi host dei link di un messaggio. Vengono cercati sui resolver con filtro di Cloudflare (1.1.1.2 e 1.1.1.3) come normali query DNS, e nessuna parte del messaggio o dei suoi indirizzi viene inviata. --no-cloudflare disattiva anche questo.

Ogni altro controllo che usa la rete resta spento finché non lo attivi:

ControlloSi attiva conCosa invia
SPF, DKIM, DMARC, ARC--authQuery DNS sui record del mittente
Blocklist DNS--dnsbl, --uriblL'indirizzo IP del client e i domini dei link, come query DNS
ClamAV--clamavGli allegati, al tuo clamd
Un modello linguistico--llmUn riassunto del messaggio, al server che indichi

Le analisi non vengono registrate né conservate. Sicurezza e privacy

Installare su un server#

Shell
npm install --global spamscanner

Oppure il binario autonomo, con Node.js e il modello integrati:

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

Lo script di installazione verifica il binario con il file SHA256SUMS della release prima di installarlo, e ogni binario ha un'attestazione di provenienza della build firmata che gh attestation verify controlla. Ci sono binari per Linux (x64 e arm64), macOS e Windows. I binari Linux richiedono glibc, quindi su Alpine installa con npm. Primi passi

Non c'è controllo degli aggiornamenti. Per aggiornare, esegui di nuovo il comando di installazione: entrambi i comandi installano l'ultima release.

Eseguirlo come servizio#

I server milterMail filter: un protocollo nato con Sendmail, usato anche da Postfix, che permette a un programma separato di esaminare ogni messaggio durante la sessione SMTP., HTTP, TCP e spamdIl demone di SpamAssassin. Il suo protocollo è usato da spamc, Exim, Haraka e altri client SpamAssassin. ascoltano su 127.0.0.1 a meno che --host non indichi altro. Eseguili con un utente senza privilegi, per esempio con 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

L'unità completa e la sua configurazione sono nella guida a Postfix. Nessuno dei server parla TLS: per raggiungerne uno da un'altra macchina usa una rete privata, un tunnel SSH o un reverse proxy con TLS.

Collegare il tuo server di posta#

Server di postaComandoPorta
Postfix o Sendmailspamscanner milter7831
Postfix, senza mai rifiutare postaspamscanner filter, un filtro dei contenutinessuna
Exim, Haraka o spamcspamscanner spamd783
Qualsiasi cosa parli HTTPspamscanner http7832
Un semplice client TCPspamscanner server7830
Un server di posta scritto in Node.jsimport SpamScanner from 'spamscanner'nessuna

I server possono aggiungere al messaggio le intestazioni X-Spam-Flag, X-Spam-Score e X-Spam-Status, e la libreria restituisce il punteggio e ogni test scattato. Guide: filtro antispam per Postfix, altri server di posta e l'API HTTP.

Tenere locali i modelli linguistici#

Un modello linguistico è facoltativo e legge solo i casi dubbi: lo spam evidente e il hamPosta desiderata: il contrario dello spam. evidente non ci arrivano mai. Con OllamaUn programma che scarica ed esegue modelli linguistici aperti sulla tua macchina, con un'API HTTP. gira sullo stesso server, quindi nessun messaggio ne esce:

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

qwen3.5:4b gira su una CPU. Con un provider ospitato, invece, i dati personali vengono rimossi dal messaggio prima dell'invio. Modelli linguistici

Addestrarlo sulla tua posta#

Il modello incluso è addestrato su dataset pubblici. Un modello addestrato sulla posta che riceve il tuo server funziona meglio, e resta su quel server:

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

Un file di modello contiene conteggi di caratteristiche sottoposte a hash, non parole né testo dei messaggi. Addestramento

Requisiti#

Node.js 18 o successivo su Linux, macOS o Windows, o niente con un binario autonomo. ClamAVUn motore antivirus open source. Il suo demone, clamd, analizza i file inviati tramite un socket. e Ollama sono facoltativi e girano come servizi a sé.

Modifica questa pagina su GitHub · Markdown ·