Zelf gehost spamfilter

Spam Scanner draait op je eigen server en houdt de mail daar. Het model van de classifier zit in het pakket, er is geen telemetrie of updatecontrole, en standaard verstuurt het alleen een DNS-query voor de hostnaam van elke link.

Wat de server verlaat#

Standaard alleen de hostnamen van links in een bericht. Die worden als gewone DNS-query's opgezocht bij de filterende resolvers van Cloudflare (1.1.1.2 en 1.1.1.3), en geen enkel deel van het bericht of de adressen wordt verstuurd. --no-cloudflare zet ook dat uit.

Elke andere controle die het netwerk gebruikt staat uit tot je hem aanzet:

ControleAanzetten metWat het verstuurt
SPF, DKIM, DMARC, ARC--authDNS-query's naar de records van de afzender
DNS-blocklists--dnsbl, --uriblHet IP-adres van de client en de domeinen van links, als DNS-query's
ClamAV--clamavBijlagen, naar je eigen clamd
Een taalmodel--llmEen samenvatting van het bericht, naar de server die je opgeeft

Scans worden niet gelogd of bewaard. Beveiliging en privacy

Installeren op een server#

Shell
npm install --global spamscanner

Of de losse binary, met Node.js en het model ingebouwd:

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

Het installatiescript controleert de binary met het bestand SHA256SUMS van de release voordat het hem installeert, en elke binary heeft een ondertekende build-provenance-attestatie die gh attestation verify controleert. Er zijn binaries voor Linux (x64 en arm64), macOS en Windows. De Linux-binaries hebben glibc nodig, dus installeer op Alpine met npm. Aan de slag

Er is geen updatecontrole. Voer om bij te werken de installatieopdracht opnieuw uit: beide opdrachten installeren de nieuwste release.

Als service draaien#

De milter-, HTTP-, TCP- en spamd-servers luisteren op 127.0.0.1, tenzij --host iets anders zegt. Draai ze als gebruiker zonder rechten, bijvoorbeeld onder 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

De volledige unit en de inrichting staan in de Postfix-handleiding. Geen van de servers spreekt TLS; gebruik een privénetwerk, een SSH-tunnel of een reverse proxy met TLS om er vanaf een andere machine bij te komen.

Je mailserver koppelen#

MailserverOpdrachtPoort
Postfix of Sendmailspamscanner milter7831
Postfix, zonder ooit mail te weigerenspamscanner filter, een contentfiltergeen
Exim, Haraka of spamcspamscanner spamd783
Alles wat HTTP spreektspamscanner http7832
Een eenvoudige TCP-clientspamscanner server7830
Een mailserver geschreven in Node.jsimport SpamScanner from 'spamscanner'geen

De servers kunnen de headers X-Spam-Flag, X-Spam-Score en X-Spam-Status aan het bericht toevoegen, en de bibliotheek geeft de score en elke test die afging terug. Handleidingen: spamfilter voor Postfix, andere mailservers en de HTTP-API.

Taalmodellen lokaal houden#

Een taalmodel is optioneel en leest alleen twijfelgevallen: duidelijke spam en duidelijke hamGewenste mail: het tegenovergestelde van spam. bereiken het nooit. Met OllamaEen programma dat open taalmodellen downloadt en op je eigen machine draait, met een HTTP API. draait het op dezelfde server, zodat geen bericht die verlaat:

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

qwen3.5:4b draait op een CPU. Gebruik je een gehoste aanbieder, dan worden persoonsgegevens uit het bericht verwijderd voordat het wordt verstuurd. Taalmodellen

Trainen op je eigen mail#

Het meegeleverde model is getraind op openbare datasets. Een model dat is getraind op de mail die je server ontvangt doet het beter, en het blijft op die 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

Een modelbestand bevat gehashte tellingen van kenmerken, geen woorden of berichttekst. Training

Vereisten#

Node.js 18 of nieuwer op Linux, macOS of Windows, of niets met een losse binary. ClamAVEen opensource-antivirusengine. De daemon, clamd, scant bestanden die via een socket worden verstuurd. en Ollama zijn optioneel en draaien als eigen services.

Bewerk deze pagina op GitHub · Markdown ·