Et spamfilter, der læser alle sprog og forklarer hver afgørelse.

Spam Scanner fanger spam, phishing, svindel og malware til Node.js, kommandolinjen og mailservere som Postfix, Exim og Haraka. Hvert resultat viser de test, der slog til, og hvorfor.

npm install -g spamscanner
  • Node.js 18+
  • Milter, spamd, HTTP
  • Ollama, Claude, ChatGPT
  • Ingen telemetri
$ spamscanner scan message.eml
SPAM  score 16.3 (spam at 5.0, reject at 15.0)  action: reject  language: en
   +6.3  BAYES_999                    Classifier spam probability 99.9%
   +5.0  PHISHING_LOOKALIKE_DOMAIN    "paypa1-secure.top" imitates paypal by swapping characters
   +3.0  DECEPTIVE_LINK               A link shows "https://www.paypal.com/signin" but goes to paypa1-secure.top
   +2.0  FROM_NAME_BRAND              Display name says "paypal" but the message is from paypa1-secure.top
$ echo $?
1

Sådan bedømmes en besked

Hvert tjek lægger point til eller trækker point fra, og summen afgør sagen. Grænser og point kan ændres, og intet er en sort boks: resultatet nævner hver test.

  1. Læs

    Beskeden fortolkes, og dens tekst normaliseres: stiliserede bogstaver, usynlige tegn og forvekslelige alfabeter omgøres.

  2. Tjek

    Klassifikatoren og tjekkene af links, vedhæftede filer, godkendelse, blokeringslister og regler kører samtidig, hver med en tidsgrænse.

  3. Score

    Hver test lægger point til eller trækker point fra. Ved 5 er en besked spam; ved 15 bør en mailserver afvise den.

  4. Spørg

    Tvivlsomme tilfælde kan sendes til en sprogmodel, som lægger op til 6 point til eller trækker op til 3 fra.

  • under 5acceptér
  • 5 til 15markér som spam
  • 15 og deroverafvis

Se det på 1:58

Hvordan en besked får sin score, hvordan alle sprog læses, hvornår en sprogmodel spørges, og hvordan det kobles på Postfix, Exim, Haraka og Node.js.

Fortalt på engelsk med engelske undertekster.

Videoens titelbillede: Spam Scanner-logoet.

Hvad den tjekker

Ord er ét signal. Links, afsendere, vedhæftede filer og godkendelse siger lige så meget, og ingen af dem afhænger af beskedens sprog.

  • En klassifikator til alle skriftsystemer

    Ord, ordpar, links, afsendere, HTML og vedhæftede filer, optalt og kombineret på samme måde som SpamBayes, med et ærligt »usikker«, når sporene peger i hver sin retning.

    Sådan afgør den
  • Alle sprog, omhyggeligt

    Unicode-orddeling til kinesisk, japansk og thai, forklædninger omgjort og ingen straf for et sprog, som modellen har set lidt ham på.

    Sprog
  • Phishing

    Forvekslelige domæner med kyrilliske eller ombyttede bogstaver, links, hvis tekst viser en anden adresse, varemærker i visningsnavne og Cloudflares malware-resolver.

    Phishingtjek
  • Vedhæftede filer

    Programfiler genkendt på deres bytes, også når de er omdøbt til .pdf; dobbelte filendelser; programmer i ZIP-filer; Office-makroer; aktive PDF'er; ClamAV.

    Tjek af vedhæftede filer
  • Godkendelse

    SPF, DKIM, DMARC og ARC, DNS-blokeringslister, tilladelses- og blokeringslister og en regel for post, der forfalsker dit eget domæne.

    Godkendelse
  • Sprogmodeller

    Tvivlsomme tilfælde sendes til en model: Ollama på din egen maskine eller Claude, ChatGPT, Gemini og enhver OpenAI-kompatibel server.

    Sprogmodeller

Alle test og deres pointSådan virker det

Alle sprog, uden gætteri

Ord findes med Unicode-reglerne, så sprog, der skrives uden mellemrum, virker, og forklædninger omgøres før optællingen. Det er de ord, klassifikatoren tæller, beregnet da denne side blev bygget.

Et sprog, som den medfølgende model har set lidt ham på, får »usikker« i stedet for »spam«, så almindelig post på arabisk eller koreansk aldrig markeres på grund af skriftsystemet. Sprog

Forklædt engelsk

Claim your fr␣ee prіze: V1agra 𝐅𝐑𝐄𝐄

  • claim
  • your
  • free
  • prize
  • viagra
  • free

Et mellemrum med nul bredde, et kyrillisk і, et tal i stedet for et bogstav og matematiske fede bogstaver

Kinesisk, uden mellemrum

恭喜您获得一百万元大奖

  • 恭喜
  • 您
  • 获得
  • 一
  • 百万
  • 元
  • 大奖

Opdelt med en ordbog

Thai, uden mellemrum

ยินดีด้วยคุณได้รับรางวัลหนึ่งล้านบาท

  • ยินดี
  • ด้วย
  • คุณ
  • ได้
  • รับ
  • รางวัล
  • หนึ่ง
  • ล้าน
  • บาท

Opdelt med en ordbog

Russisk

Поздравляем! Вы выиграли миллион

  • поздравляем
  • вы
  • выиграли
  • миллион

Gjort til små bogstaver efter Unicode-reglerne

Kobles på din mailserver

En milter til Postfix og Sendmail, en SpamAssassin-kompatibel spamd-server til spamc, Exim og Haraka, et indholdsfilter, et HTTP API, en TCP-server og biblioteket.

De tilføjer alle X-Spam-Flag, X-Spam-Score, X-Spam-Status-headere og fjerner dem, en afsender har forfalsket.

Shell
spamscanner milter --port 7831 --auth --subject-tag "[SPAM]"

# /etc/postfix/main.cf
smtpd_milters = inet:127.0.0.1:7831
milter_default_action = accept

En milter tjekker post under SMTP-sessionen, så spam over afvisningsgrænsen bliver afvist, før den modtages. Vejledning til Postfix

En sprogmodel til de tvivlsomme tilfælde

Tydelig spam og tydelig ham når aldrig frem til den. Når scoren ligger tæt på grænsen, eller klassifikatoren er usikker, læser en model beskeden og svarer spam, phishing, svindel, malware eller ham. Kør en på din egen maskine, eller brug en hostet, med vilkårlig URL, port og godkendelse.

Instruktioner til AI-filtre, der er gemt i en besked, scores som spam, og modellen får at vide, at beskeden er data. End-to-end-testene tjekker det mod en rigtig model via Ollama.

  • Ollama
  • LM Studio
  • llama.cpp server
  • vLLM
  • LocalAI
  • Jan
  • OpenAI
  • Anthropic (Claude)
  • Google Gemini
  • Mistral AI
  • Groq
  • OpenRouter
  • DeepSeek
  • xAI
  • Together AI
  • Fireworks AI
  • Cerebras
  • Hugging Face Inference Providers
  • Azure OpenAI
  • Cloudflare Clef
  • Cloudflare Clef Flash
  • TypeSafe Jev
  • TypeSafe Jev on OpenRouter
  • Any decision model server
Shell
ollama pull qwen3.5:4b
spamscanner llm-test --llm ollama --llm-model qwen3.5:4b
spamscanner milter --llm ollama --llm-model qwen3.5:4b

Med omrids: kører på din egen maskine. Personoplysninger fjernes, før en besked sendes til en hostet udbyder.

OllamaHugging FaceLicensStørrelse
qwen3.5:0.8bQwen/Qwen3.5-0.8BApache-2.01.3 GB
gemma4:e2bgoogle/gemma-4-E2B-itApache-2.04.6 GB
qwen3.5:4bQwen/Qwen3.5-4BApache-2.03.3 GB
qwen3.5:9bQwen/Qwen3.5-9BApache-2.06.6 GB
gpt-oss-safeguard:20bopenai/gpt-oss-safeguard-20bApache-2.014 GB

Anbefalede åbne modeller. Alle anbefalinger

Målt og kan trænes

Den medfølgende model er trænet på offentlige datasæt og testet på beskeder, den ikke har set. En model, der er trænet på din egen post, klarer sig bedre: træn den fra mbox-filer, Maildirs eller datasæt, mål den, og lær den op fra »rapportér spam«-knapper.

Træning

Beskeder holdt ude af træningenBeskederPræcisionGenkaldelseFalske positiver
engelsk6.564100,0 %97,1 %0,0 %
russisk1.682100,0 %97,4 %0,0 %
italiensk1.38998,1 %85,3 %1,8 %
tysk1.30997,7 %76,1 %2,2 %
spansk1.28197,5 %82,6 %2,6 %
Alle13.84099,2 %85,1 %0,6 %

Klassifikatoren alene, på hver tiende besked fra dens offentlige træningsdata, holdt tilbage. Usikre beskeder tæller som missede. Tysk, italiensk og spansk kommer fra syntetiske datasæt med upålidelige etiketter. Om den medfølgende model

Bygget til Forward Email

Forward Email gemmer ingen logs over beskedindhold og kunne derfor ikke sende post til en ekstern filtreringstjeneste. Spam Scanner kører på dine egne servere, sender intet nogen steder hen, medmindre det er sat op til det, og forklarer hver afgørelse, uden at et menneske læser posten. Forward Email og opgradering

Et projekt fra Forward Email, e-mailtjenesten med fokus på privatliv.