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:
| Controllo | Si attiva con | Cosa invia |
|---|---|---|
| SPF, DKIM, DMARC, ARC | --auth | Query DNS sui record del mittente |
| Blocklist DNS | --dnsbl, --uribl | L'indirizzo IP del client e i domini dei link, come query DNS |
| ClamAV | --clamav | Gli allegati, al tuo clamd |
| Un modello linguistico | --llm | Un riassunto del messaggio, al server che indichi |
Le analisi non vengono registrate né conservate. Sicurezza e privacy
Installare su un server#
npm install --global spamscannerOppure il binario autonomo, con Node.js e il modello integrati:
curl -fsSL https://github.com/spamscanner/spamscanner/releases/latest/download/install.sh | bashLo 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:
[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=yesL'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 posta | Comando | Porta |
|---|---|---|
| Postfix o Sendmail | spamscanner milter | 7831 |
| Postfix, senza mai rifiutare posta | spamscanner filter, un filtro dei contenuti | nessuna |
| Exim, Haraka o spamc | spamscanner spamd | 783 |
| Qualsiasi cosa parli HTTP | spamscanner http | 7832 |
| Un semplice client TCP | spamscanner server | 7830 |
| Un server di posta scritto in Node.js | import 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:
ollama pull qwen3.5:4b
spamscanner milter --llm ollama --llm-model qwen3.5:4bqwen3.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:
spamscanner train --spam ~/Maildir/.Junk --ham ~/Maildir/cur --out /var/lib/spamscanner/model.json
SPAMSCANNER_MODEL=/var/lib/spamscanner/model.json spamscanner milterUn 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é.