Filtr antyspamowy, który czyta każdy język i wyjaśnia każdą decyzję.

Spam Scanner wyłapuje spam, phishing, oszustwa i złośliwe oprogramowanie dla Node.js, wiersza poleceń i serwerów pocztowych, takich jak Postfix, Exim i Haraka. Każdy wynik wymienia testy, które zadziałały, i podaje powód.

npm install -g spamscanner
  • Node.js 18+
  • Milter, spamd, HTTP
  • Ollama, Claude, ChatGPT
  • Bez telemetrii
$ 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

Jak oceniana jest wiadomość

Każda kontrola dodaje lub odejmuje punkty, a decyduje suma. Progi i punkty można zmienić i nic nie jest czarną skrzynką: wynik wymienia każdy test.

  1. Czytaj

    Wiadomość jest parsowana, a jej tekst normalizowany: stylizowane litery, niewidoczne znaki i podobnie wyglądające alfabety są odwracane.

  2. Sprawdź

    Klasyfikator oraz kontrole linków, załączników, uwierzytelnienia, czarnych list i reguł działają równocześnie, każda z limitem czasu.

  3. Wynik

    Każdy test dodaje lub odejmuje punkty. Od 5 wiadomość jest spamem; od 15 serwer pocztowy powinien ją odrzucić.

  4. Zapytaj

    Trudne przypadki mogą trafić do modelu językowego, który dodaje do 6 punktów lub odejmuje do 3.

  • poniżej 5przyjmij
  • od 5 do 15oznacz jako spam
  • 15 i więcejodrzuć

Zobacz w 1:58

Jak punktowana jest wiadomość, jak czytany jest każdy język, kiedy pytany jest model językowy i jak Spam Scanner łączy się z Postfix, Exim, Haraka i Node.js.

Narracja po angielsku, z angielskimi napisami.

Kadr tytułowy filmu: logo Spam Scanner.

Co sprawdza

Słowa to jeden sygnał. Linki, nadawcy, załączniki i uwierzytelnienie mówią tyle samo i żaden z nich nie zależy od języka wiadomości.

  • Klasyfikator dla każdego pisma

    Słowa, pary słów, linki, nadawcy, HTML i załączniki, liczone i łączone tak jak w SpamBayes, z uczciwym „niepewne”, gdy wskazówki są sprzeczne.

    Jak podejmuje decyzję
  • Każdy język, starannie

    Podział na słowa według Unicode dla chińskiego, japońskiego i tajskiego, odwracanie maskowania i brak kary za język, w którym model widział mało hamu.

    Języki
  • Phishing

    Podobne domeny z cyrylicą lub zamienionymi literami, linki, których tekst pokazuje inny adres, marki w nazwach wyświetlanych oraz resolver Cloudflare blokujący złośliwe oprogramowanie.

    Kontrole phishingu
  • Załączniki

    Pliki wykonywalne rozpoznawane po bajtach, także po zmianie nazwy na .pdf; podwójne rozszerzenia; programy w plikach ZIP; makra Office; aktywne pliki PDF; ClamAV.

    Kontrole załączników
  • Uwierzytelnianie

    SPF, DKIM, DMARC i ARC, czarne listy DNS, listy dozwolonych i zablokowanych oraz reguła dla poczty, która podszywa się pod twoją własną domenę.

    Uwierzytelnianie
  • Modele językowe

    Trudne przypadki trafiają do modelu: Ollama na twoim komputerze albo Claude, ChatGPT, Gemini i dowolny serwer zgodny z OpenAI.

    Modele językowe

Wszystkie testy i ich punktyJak to działa

Każdy język, bez zgadywania

Słowa są wyznaczane według reguł Unicode, więc działają też języki pisane bez spacji, a maskowanie jest odwracane przed liczeniem. Oto słowa, które liczy klasyfikator, obliczone podczas budowania tej strony.

Język, w którym dołączony model widział mało hamu, dostaje „niepewne” zamiast „spam”, więc zwykła poczta po arabsku czy koreańsku nigdy nie jest oznaczana z powodu pisma. Języki

Zamaskowany angielski

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

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

Spacja o zerowej szerokości, cyrylickie і, cyfra zamiast litery i matematyczne litery pogrubione

Chiński, bez spacji

恭喜您获得一百万元大奖

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

Dzielony na słowa za pomocą słownika

Tajski, bez spacji

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

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

Dzielony na słowa za pomocą słownika

Rosyjski

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

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

Małe litery według reguł Unicode

Łączy się z twoim serwerem pocztowym

Milter dla Postfix i Sendmail, serwer spamd zgodny ze SpamAssassin dla spamc, Exim i Haraka, filtr treści, HTTP API, serwer TCP oraz biblioteka.

Wszystkie dodają nagłówki X-Spam-Flag, X-Spam-Score, X-Spam-Status i usuwają te, które podrobił nadawca.

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

Milter sprawdza pocztę w trakcie sesji SMTP, więc spam na progu odrzucenia zostaje odrzucony, zanim zostanie przyjęty. Poradnik Postfix

Model językowy do trudnych przypadków

Oczywisty spam i oczywisty ham nigdy do niego nie trafiają. Gdy wynik jest bliski progu albo klasyfikator nie jest pewny, model czyta wiadomość i odpowiada: spam, phishing, oszustwo, złośliwe oprogramowanie lub ham. Uruchom model na własnym komputerze albo użyj hostowanego, z dowolnym adresem URL, portem i uwierzytelnianiem.

Instrukcje ukryte w wiadomości dla filtrów AI są punktowane jako spam, a model dostaje informację, że wiadomość to dane. Testy end-to-end sprawdzają to na prawdziwym modelu przez 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

Z obramowaniem: działa na twoim komputerze. Dane osobowe są usuwane, zanim wiadomość trafi do dostawcy hostowanego.

OllamaHugging FaceLicencjaRozmiar
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

Zalecane otwarte modele. Wszystkie rekomendacje

Zmierzony i dający się trenować

Dołączony model jest trenowany na publicznych zbiorach danych i testowany na wiadomościach, których nie widział. Model wytrenowany na twojej własnej poczcie radzi sobie lepiej: wytrenuj go z plików mbox, katalogów Maildir lub zbiorów danych, zmierz go i ucz go z przycisków „zgłoś spam”.

Trenowanie

Wiadomości odłożoneWiadomościPrecyzjaCzułośćFałszywe alarmy
angielski6564100,0%97,1%0,0%
rosyjski1682100,0%97,4%0,0%
włoski138998,1%85,3%1,8%
niemiecki130997,7%76,1%2,2%
hiszpański128197,5%82,6%2,6%
Wszystkie13 84099,2%85,1%0,6%

Sam klasyfikator, na co dziesiątej wiadomości z jego publicznych danych treningowych, odłożonej z treningu. Wiadomości niepewne liczą się jako pominięte. Niemiecki, włoski i hiszpański pochodzą z syntetycznych zbiorów danych z niedokładnymi etykietami. O dołączonym modelu

Zbudowany dla Forward Email

Forward Email nie przechowuje logów z treścią wiadomości, więc nie mógł wysyłać poczty do zewnętrznej usługi filtrującej. Spam Scanner działa na twoich własnych serwerach, niczego nigdzie nie wysyła, jeśli nie zostanie tak skonfigurowany, i wyjaśnia każdą decyzję bez czytania poczty przez człowieka. Forward Email i aktualizacja

Projekt Forward Email, usługi poczty e-mail nastawionej na prywatność.