Et spamfilter som leser alle språk og forklarer hver avgjørelse.

Spam Scanner fanger spam, phishing, svindel og skadevare for Node.js, kommandolinjen og e-postservere som Postfix, Exim og Haraka. Hvert resultat lister opp testene som slo ut, 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

Slik vurderes en melding

Hver sjekk legger til eller trekker fra poeng, og summen avgjør. Terskler og poeng kan endres, og ingenting er en svart boks: resultatet navngir hver test.

  1. Les

    Meldingen tolkes og teksten normaliseres: stiliserte bokstaver, usynlige tegn og forvekslbare alfabeter blir gjort om.

  2. Sjekk

    Klassifisereren og sjekkene av lenker, vedlegg, autentisering, blokkeringslister og regler kjører samtidig, hver med en tidsgrense.

  3. Poengsum

    Hver test legger til eller trekker fra poeng. Ved 5 er en melding spam; ved 15 bør en e-postserver avvise den.

  4. Spør

    Vanskelige tilfeller kan sendes til en språkmodell, som legger til opptil 6 poeng eller trekker fra opptil 3.

  • under 5godta
  • 5 til 15merk som spam
  • 15 og overavvis

Se det på 1:58

Hvordan en melding får poeng, hvordan hvert språk leses, når en språkmodell blir spurt, og hvordan det kobles til Postfix, Exim, Haraka og Node.js.

Fortalt på engelsk, med engelske undertekster.

Tittelbildet i videoen: Spam Scanner-logoen.

Hva det sjekker

Ord er ett signal. Lenker, avsendere, vedlegg og autentisering sier like mye, og ingen av dem avhenger av språket i meldingen.

  • En klassifiserer for alle skriftsystemer

    Ord, ordpar, lenker, avsendere, HTML og vedlegg, talt opp og kombinert slik SpamBayes gjør, med et ærlig «usikker» når indisiene spriker.

    Slik avgjør det
  • Alle språk, med omhu

    Unicode-ordsegmentering for kinesisk, japansk og thai, forkledninger gjort om, og ingen straff for et språk modellen så lite ham på.

    Språk
  • Phishing

    Forvekslingsdomener med kyrilliske eller ombyttede bokstaver, lenker der teksten viser en annen adresse, merkenavn i visningsnavn og Cloudflares resolver mot skadevare.

    Phishing-sjekker
  • Vedlegg

    Kjørbare filer funnet ut fra bytene, også når de er omdøpt til .pdf; doble filendelser; programmer i ZIP-filer; Office-makroer; aktive PDF-er; ClamAV.

    Vedleggssjekker
  • Autentisering

    SPF, DKIM, DMARC og ARC, DNS-blokkeringslister, tillatelses- og blokkeringslister og en regel for e-post som forfalsker ditt eget domene.

    Autentisering
  • Språkmodeller

    Vanskelige tilfeller går til en modell: Ollama på din egen maskin, eller Claude, ChatGPT, Gemini og enhver OpenAI-kompatibel server.

    Språkmodeller

Alle tester og poengene deresSlik virker det

Alle språk, uten gjetting

Ord finnes med Unicode-reglene, så språk som skrives uten mellomrom, fungerer, og forkledninger gjøres om før opptellingen. Dette er ordene klassifisereren teller, beregnet da denne siden ble bygget.

Et språk den medfølgende modellen så lite ham på, får «usikker» i stedet for «spam», så vanlig e-post på arabisk eller koreansk blir aldri flagget på grunn av skriftsystemet. Språk

Forkledd engelsk

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

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

Et mellomrom med null bredde, en kyrillisk і, et siffer i stedet for en bokstav og matematiske fete bokstaver

Kinesisk, uten mellomrom

恭喜您获得一百万元大奖

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

Segmentert med en ordbok

Thai, uten mellomrom

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

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

Segmentert med en ordbok

Russisk

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

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

Gjort om til små bokstaver etter Unicode-reglene

Kobles til e-postserveren din

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

Alle legger til X-Spam-Flag, X-Spam-Score, X-Spam-Status-hoder og fjerner slike hoder som en avsender 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 sjekker e-post under SMTP-økten, så spam som når avvisningsterskelen, blir avvist før den er mottatt. Veiledning for Postfix

En språkmodell for de vanskelige tilfellene

Tydelig spam og tydelig ham når aldri frem dit. Når poengsummen er nær terskelen eller klassifisereren er usikker, leser en modell meldingen og svarer spam, phishing, svindel, skadevare eller ham. Kjør en på din egen maskin, eller bruk en driftet modell, med hvilken som helst URL, port og autentisering.

Instruksjoner til KI-filtre som er skjult i en melding, får poeng som spam, og modellen får beskjed om at meldingen er data. Ende-til-ende-testene sjekker dette mot en ekte modell 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 omriss: kjører på din egen maskin. Personopplysninger fjernes før en melding sendes til en driftet leverandør.

OllamaHugging FaceLisensStø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

Anbefalte åpne modeller. Alle anbefalinger

Målt, og kan trenes

Den medfølgende modellen er trent på offentlige datasett og testet på meldinger den ikke har sett. En modell trent på din egen e-post gjør det bedre: tren den fra mbox-filer, Maildir-mapper eller datasett, mål den, og lær den opp fra «rapporter spam»-knapper.

Trening

Tilbakeholdte meldingerMeldingerPresisjonGjenkallingFalske 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 %

Klassifisereren alene, på hver tiende melding fra de offentlige treningsdataene, holdt tilbake. Usikre meldinger teller som bommet. Tysk, italiensk og spansk kommer fra syntetiske datasett med upålitelige etiketter. Om den medfølgende modellen

Laget for Forward Email

Forward Email lagrer ingen logger over meldingsinnhold og kunne derfor ikke sende e-post til en ekstern filtreringstjeneste. Spam Scanner kjører på dine egne servere, sender ingenting noe sted med mindre det er konfigurert til det, og forklarer hver avgjørelse uten at et menneske leser e-posten. Forward Email og oppgradering

Et prosjekt fra Forward Email, e-posttjenesten med fokus på personvern.