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.
Læs
Beskeden fortolkes, og dens tekst normaliseres: stiliserede bogstaver, usynlige tegn og forvekslelige alfabeter omgøres.
Tjek
Klassifikatoren og tjekkene af links, vedhæftede filer, godkendelse, blokeringslister og regler kører samtidig, hver med en tidsgrænse.
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.
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
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 denAlle 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å.
SprogPhishing
Forvekslelige domæner med kyrilliske eller ombyttede bogstaver, links, hvis tekst viser en anden adresse, varemærker i visningsnavne og Cloudflares malware-resolver.
PhishingtjekVedhæ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 filerGodkendelse
SPF, DKIM, DMARC og ARC, DNS-blokeringslister, tilladelses- og blokeringslister og en regel for post, der forfalsker dit eget domæne.
GodkendelseSprogmodeller
Tvivlsomme tilfælde sendes til en model: Ollama på din egen maskine eller Claude, ChatGPT, Gemini og enhver OpenAI-kompatibel server.
Sprogmodeller
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
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
恭喜您获得一百万元大奖
- 恭喜
- 您
- 获得
- 一
- 百万
- 元
- 大奖
Opdelt med en ordbog
ยินดีด้วยคุณได้รับรางวัลหนึ่งล้านบาท
- ยินดี
- ด้วย
- คุณ
- ได้
- รับ
- รางวัล
- หนึ่ง
- ล้าน
- บาท
Opdelt med en ordbog
Поздравляем! Вы выиграли миллион
- поздравляем
- вы
- выиграли
- миллион
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.
spamscanner milter --port 7831 --auth --subject-tag "[SPAM]"
# /etc/postfix/main.cf
smtpd_milters = inet:127.0.0.1:7831
milter_default_action = acceptEn milter tjekker post under SMTP-sessionen, så spam over afvisningsgrænsen bliver afvist, før den modtages. Vejledning til Postfix
spamscanner spamd --port 783 --auth
spamc -c < message.eml # prints 16.3/5.0 and exits 1En SpamAssassin-kompatibel spamd-server: stop spamd, start Spam Scanner på samme port, og SpamAssassin-klienter fortsætter med at virke. Vejledning til spamd
import SpamScanner from 'spamscanner';
const scanner = new SpamScanner({authentication: true});
const result = await scanner.scan(stream, {session});
if (result.action === 'reject') {
// refuse with a 4xx or 5xx reply
}Biblioteket, til smtp-server, Haraka-plugins eller enhver tjeneste, der håndterer post. API-reference
spamscanner http --port 7832 --token "$TOKEN"
curl -s -X POST -H "Authorization: Bearer $TOKEN" \
--data-binary @message.eml "http://127.0.0.1:7832/scan?ip=203.0.113.5"Til ethvert sprog og enhver server, der kan sende en HTTP-forespørgsel. Vejledning til HTTP API
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
ollama pull qwen3.5:4b
spamscanner llm-test --llm ollama --llm-model qwen3.5:4b
spamscanner milter --llm ollama --llm-model qwen3.5:4bMed omrids: kører på din egen maskine. Personoplysninger fjernes, før en besked sendes til en hostet udbyder.
| Ollama | Licens | Størrelse |
|---|---|---|
qwen3.5:0.8b | Apache-2.0 | 1.3 GB |
gemma4:e2b | Apache-2.0 | 4.6 GB |
qwen3.5:4b | Apache-2.0 | 3.3 GB |
qwen3.5:9b | Apache-2.0 | 6.6 GB |
gpt-oss-safeguard:20b | Apache-2.0 | 14 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.
| Beskeder holdt ude af træningen | Beskeder | Præcision | Genkaldelse | Falske positiver |
|---|---|---|---|---|
| engelsk | 6.564 | 100,0 % | 97,1 % | 0,0 % |
| russisk | 1.682 | 100,0 % | 97,4 % | 0,0 % |
| italiensk | 1.389 | 98,1 % | 85,3 % | 1,8 % |
| tysk | 1.309 | 97,7 % | 76,1 % | 2,2 % |
| spansk | 1.281 | 97,5 % | 82,6 % | 2,6 % |
| Alle | 13.840 | 99,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.
