Спам-фільтр, який читає будь-яку мову і пояснює кожне рішення.

Spam Scanner виявляє спам, фішинг, шахрайство й шкідливе ПЗ для Node.js, командного рядка і поштових серверів, як-от Postfix, Exim і Haraka. Кожен результат перелічує тести, що спрацювали, і причини.

npm install -g spamscanner
  • Node.js 18+
  • Milter, spamd, HTTP
  • Ollama, Claude, ChatGPT
  • Без телеметрії
$ 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

Як оцінюється лист

Кожна перевірка додає або знімає бали, і рішення ухвалює сума. Пороги й бали можна змінювати, і нічого не працює як чорна скринька: результат називає кожен тест.

  1. Читати

    Лист розбирається, а його текст нормалізується: стилізовані літери, невидимі символи та схожі алфавіти повертаються до звичайного вигляду.

  2. Перевірити

    Класифікатор і перевірки посилань, вкладень, автентифікації, чорних списків і правил виконуються одночасно, кожна з власним тайм-аутом.

  3. Бал

    Кожен тест додає або знімає бали. Від 5 лист вважається спамом; від 15 поштовий сервер має його відхилити.

  4. Запитати

    Спірні випадки можна передати мовній моделі, яка додає до 6 балів або знімає до 3.

  • менше 5прийняти
  • від 5 до 15позначити як спам
  • 15 і більшевідхилити

Огляд за 1:58

Як нараховуються бали листу, як читається кожна мова, коли запитують мовну модель і як фільтр підключається до Postfix, Exim, Haraka та Node.js.

Озвучено англійською, з англійськими субтитрами.

Титульний кадр відео: логотип Spam Scanner.

Що перевіряється

Слова — лише один сигнал. Посилання, відправники, вкладення й автентифікація говорять не менше, і жоден із цих сигналів не залежить від мови листа.

  • Класифікатор для будь-якої писемності

    Слова, пари слів, посилання, відправники, HTML і вкладення підраховуються й поєднуються так, як це робить SpamBayes, з чесним «невизначено», коли ознаки суперечать одна одній.

    Як ухвалюється рішення
  • Будь-яка мова, уважно

    Сегментація слів за Unicode для китайської, японської та тайської, зняття маскування і жодного штрафу для мови, у якій модель бачила мало ham.

    Мови
  • Фішинг

    Схожі домени з кириличними або переставленими літерами, посилання, текст яких показує іншу адресу, бренди в іменах відправника та DNS-резолвер Cloudflare, що блокує шкідливе ПЗ.

    Перевірки на фішинг
  • Вкладення

    Виконувані файли, розпізнані за байтами, навіть перейменовані на .pdf; подвійні розширення; програми в ZIP-архівах; макроси Office; активні PDF; ClamAV.

    Перевірки вкладень
  • Автентифікація

    SPF, DKIM, DMARC і ARC, чорні списки DNS, списки дозволу й заборони та правило для пошти, що підробляє ваш власний домен.

    Автентифікація
  • Мовні моделі

    Спірні випадки йдуть до моделі: Ollama на вашому комп’ютері або Claude, ChatGPT, Gemini і будь-який сервер, сумісний з OpenAI.

    Мовні моделі

Усі тести та їхні балиЯк це працює

Будь-яка мова, без здогадок

Слова виділяються за правилами Unicode, тож мови без пробілів між словами теж працюють, а маскування знімається до підрахунку. Нижче наведено слова, які рахує класифікатор, обчислені під час збирання цієї сторінки.

Мова, у якій вбудована модель бачила мало ham, отримує «невизначено» замість «спам», тож звичайний лист арабською чи корейською ніколи не позначається через свою писемність. Мови

Замаскована англійська

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

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

Пробіл нульової ширини, кирилична «і», цифра замість літери та математичні жирні літери

Китайська, без пробілів

恭喜您获得一百万元大奖

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

Сегментовано за словником

Тайська, без пробілів

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

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

Сегментовано за словником

Російська

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

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

Нижній регістр за правилами Unicode

Підключається до вашого поштового сервера

Milter для Postfix і Sendmail, сумісний зі SpamAssassin сервер spamd для spamc, Exim і Haraka, контент-фільтр, HTTP API, TCP-сервер і бібліотека.

Усі вони додають заголовки X-Spam-Flag, X-Spam-Score, X-Spam-Status і видаляють ті, що підробив відправник.

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 перевіряє пошту під час сеансу SMTP, тож спам на порозі відхилення відхиляється ще до прийняття. Посібник з Postfix

Мовна модель для спірних випадків

Явний спам і явний ham до неї не доходять. Коли бал близький до порогу або класифікатор не впевнений, модель читає лист і відповідає: спам, фішинг, шахрайство, шкідливе ПЗ або ham. Запустіть її на своєму комп’ютері або скористайтеся хмарною, з будь-якою URL-адресою, портом і автентифікацією.

Приховані в листі інструкції для ШІ-фільтрів оцінюються як спам, а моделі повідомляють, що лист є лише даними. Наскрізні тести перевіряють це на справжній моделі через 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

Обведені працюють на вашому комп’ютері. Перед надсиланням листа хмарному провайдеру з нього видаляються персональні дані.

OllamaHugging FaceЛіцензіяРозмір
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

Рекомендовані відкриті моделі. Усі рекомендації

Виміряний і навчуваний

Вбудовану модель навчено на відкритих наборах даних і перевірено на листах, яких вона не бачила. Модель, навчена на вашій власній пошті, працює краще: навчіть її на файлах mbox, каталогах Maildir або наборах даних, виміряйте її та донавчайте через кнопки «Повідомити про спам».

Навчання

Відкладені листиЛистиТочністьПовнотаХибні спрацювання
англійська6 564100,0%97,1%0,0%
російська1 682100,0%97,4%0,0%
італійська1 38998,1%85,3%1,8%
німецька1 30997,7%76,1%2,2%
іспанська1 28197,5%82,6%2,6%
Усі13 84099,2%85,1%0,6%

Лише класифікатор, на кожному десятому листі з його відкритих навчальних даних, відкладеному від навчання. Невизначені листи зараховуються як пропущені. Німецька, італійська та іспанська взяті із синтетичних наборів даних із неточною розміткою. Про вбудовану модель

Створено для Forward Email

Forward Email не зберігає журналів із вмістом листів, тому не міг надсилати пошту до стороннього сервісу фільтрації. Spam Scanner працює на ваших власних серверах, нічого нікуди не надсилає без відповідного налаштування і пояснює кожне рішення без того, щоб людина читала пошту. Forward Email та оновлення

Проєкт Forward Email, поштового сервісу, зосередженого на приватності.