Спам-фільтр, який читає будь-яку мову і пояснює кожне рішення.
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
Як оцінюється лист
Кожна перевірка додає або знімає бали, і рішення ухвалює сума. Пороги й бали можна змінювати, і нічого не працює як чорна скринька: результат називає кожен тест.
Читати
Лист розбирається, а його текст нормалізується: стилізовані літери, невидимі символи та схожі алфавіти повертаються до звичайного вигляду.
Перевірити
Класифікатор і перевірки посилань, вкладень, автентифікації, чорних списків і правил виконуються одночасно, кожна з власним тайм-аутом.
Бал
Кожен тест додає або знімає бали. Від 5 лист вважається спамом; від 15 поштовий сервер має його відхилити.
Запитати
Спірні випадки можна передати мовній моделі, яка додає до 6 балів або знімає до 3.
- менше 5прийняти
- від 5 до 15позначити як спам
- 15 і більшевідхилити
Що перевіряється
Слова — лише один сигнал. Посилання, відправники, вкладення й автентифікація говорять не менше, і жоден із цих сигналів не залежить від мови листа.
Класифікатор для будь-якої писемності
Слова, пари слів, посилання, відправники, 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 і видаляють ті, що підробив відправник.
spamscanner milter --port 7831 --auth --subject-tag "[SPAM]"
# /etc/postfix/main.cf
smtpd_milters = inet:127.0.0.1:7831
milter_default_action = acceptMilter перевіряє пошту під час сеансу SMTP, тож спам на порозі відхилення відхиляється ще до прийняття. Посібник з Postfix
spamscanner spamd --port 783 --auth
spamc -c < message.eml # prints 16.3/5.0 and exits 1Сервер spamd, сумісний зі SpamAssassin: зупиніть spamd, запустіть Spam Scanner на тому самому порту, і клієнти SpamAssassin працюватимуть далі. посібник зі 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
}Бібліотека для smtp-server, плагінів Haraka або будь-якого сервісу, що обробляє пошту. Довідник API
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"Для будь-якої мови програмування та будь-якого сервера, що вміє надсилати HTTP-запити. Посібник з HTTP API
Мовна модель для спірних випадків
Явний спам і явний 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
ollama pull qwen3.5:4b
spamscanner llm-test --llm ollama --llm-model qwen3.5:4b
spamscanner milter --llm ollama --llm-model qwen3.5:4bОбведені працюють на вашому комп’ютері. Перед надсиланням листа хмарному провайдеру з нього видаляються персональні дані.
| Ollama | Ліцензія | Розмір |
|---|---|---|
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 |
Рекомендовані відкриті моделі. Усі рекомендації
Виміряний і навчуваний
Вбудовану модель навчено на відкритих наборах даних і перевірено на листах, яких вона не бачила. Модель, навчена на вашій власній пошті, працює краще: навчіть її на файлах mbox, каталогах Maildir або наборах даних, виміряйте її та донавчайте через кнопки «Повідомити про спам».
| Відкладені листи | Листи | Точність | Повнота | Хибні спрацювання |
|---|---|---|---|---|
| англійська | 6 564 | 100,0% | 97,1% | 0,0% |
| російська | 1 682 | 100,0% | 97,4% | 0,0% |
| італійська | 1 389 | 98,1% | 85,3% | 1,8% |
| німецька | 1 309 | 97,7% | 76,1% | 2,2% |
| іспанська | 1 281 | 97,5% | 82,6% | 2,6% |
| Усі | 13 840 | 99,2% | 85,1% | 0,6% |
Лише класифікатор, на кожному десятому листі з його відкритих навчальних даних, відкладеному від навчання. Невизначені листи зараховуються як пропущені. Німецька, італійська та іспанська взяті із синтетичних наборів даних із неточною розміткою. Про вбудовану модель
Створено для Forward Email
Forward Email не зберігає журналів із вмістом листів, тому не міг надсилати пошту до стороннього сервісу фільтрації. Spam Scanner працює на ваших власних серверах, нічого нікуди не надсилає без відповідного налаштування і пояснює кожне рішення без того, щоб людина читала пошту. Forward Email та оновлення
Проєкт Forward Email, поштового сервісу, зосередженого на приватності.
