Командний рядок
Text Копіювати
spamscanner <command> [options]
Команда Що робить scan [file|-]Перевіряє лист із файлу або стандартного вводу
filter -f <sender> -- <recipients...>Контент-фільтр Postfix: перевіряє стандартний ввід, додає заголовки, передає далі
milterMilter для Postfix і Sendmail, порт 7831
httpHTTP API, порт 7832
serverПростий TCP-сервер, порт 7830
spamdСумісний зі SpamAssassin сервер spamd, порт 783
trainНавчає модель на файлах mbox, каталогах Maildir, теках або наборах даних
evalВимірює якість моделі на розміченій пошті
learn spam|ham [file|-] --model <file>Навчає модель на одному листі
llm-testПеревіряє налаштування мовної моделі на трьох зразкових листах
modelsВиводить рекомендовані відкриті моделі
version, help
scan#
Shell Копіювати
spamscanner scan message.eml
spamscanner scan - < message.eml
spamscanner scan message.eml --json
spamscanner scan message.eml --headers > tagged.eml
spamscanner scan message.eml --subject-tag "[SPAM]" > tagged.eml
Параметр Значення --jsonВивести повний результат у JSON
--headersВивести лист із доданими заголовками X-Spam-*
--subject-tag <tag>Також додати префікс до теми спаму
--verboseПоказати кожен тест і найсильніші ознаки класифікатора
--threshold <n>Бал, з якого пошта вважається спамом (за замовчуванням 5)
--reject-threshold <n>Бал, з якого пошта відхиляється (за замовчуванням 15)
--model <file>Файл моделі замість вбудованої
--no-classifierНе використовувати класифікатор
--config <file>Файл JSON із параметрами бібліотеки
--allow-language <codes>Дозволені мови, наприклад en,de,fr
Коди виходу: 0 — hamБажана пошта: протилежність спаму. (бажаний лист), 1 — спам, 2 — помилка.
Сеанс SMTP#
Параметр Значення --ip <address>IP-адреса клієнта, який надіслав лист
--hostname <name>Перевірене зворотне DNS-ім’я клієнта
--helo <name>Ім’я, яке він назвав у HELO або EHLO
--from <address>Відправник у конверті (MAIL FROM)
--to <address>Отримувач у конверті; повторіть для кількох
Перевірки#
Параметр Значення --authПеревіряти SPF, DKIM, DMARC і ARC (потрібен --ip)
--dnsbl <zone>Чорний список IP, наприклад zen.spamhaus.org; можна повторювати
--uribl <zone>Чорний список доменів для посилань, наприклад dbl.spamhaus.org; можна повторювати
--dns-server <ip>Сервер імен для перевірок DNS; можна повторювати
--no-cloudflareНе запитувати фільтрувальні резолвери Cloudflare про посилання
--clamav [socket]Перевіряти вкладення через clamd на його стандартному або вказаному сокеті
--allowlist <value>Завжди приймати цю IP-адресу, домен або адресу; можна повторювати
--denylist <value>Завжди відхиляти цю IP-адресу, домен або адресу; можна повторювати
Мовна модель#
Параметр Значення --llm <provider>ollama, clef-flash, jev, openai, anthropic та інші (перелік )
--llm-model <name>Модель, наприклад qwen3.5:4b або claude-haiku-4-5
--llm-method <method>decision (ймовірність для кожного вердикту за один крок; за замовчуванням, де доступно) або generate (методи )
--llm-account <id>ID облікового запису Cloudflare, для clef і clef-flash
--llm-url <url>Базова URL-адреса, наприклад http://10.0.0.5:11434
--llm-host, --llm-port, --llm-path, --llm-protocolЗмінити одну частину URL-адреси провайдера
--llm-api-key <key>Ключ API; див. також змінні середовища нижче
--llm-auth <type>bearer, x-api-key, api-key, basic, header або none
--llm-auth-header <name>Заголовок для ключа, з --llm-auth header
--llm-username, --llm-passwordДля --llm-auth basic
--llm-header "Name: value"Додатковий заголовок запиту; можна повторювати
--llm-mode <mode>auto (лише спірні випадки, за замовчуванням) або always
--llm-timeout <ms>За замовчуванням 30000
--llm-policy <text>Додаткові правила для моделі, наприклад «Ми ніколи не надсилаємо рахунків»
--llm-redact, --no-llm-redactСпершу видаляти персональні дані; за замовчуванням увімкнено для віддалених провайдерів
filter#
Контент-фільтр Postfix . Він читає лист зі стандартного вводу, додає заголовки X-Spam-* і передає його до sendmail з тим самим конвертом.
Shell Копіювати
spamscanner filter -f "$sender" -- "$recipient"
Параметр Значення --sendmail <path>За замовчуванням /usr/sbin/sendmail
--subject-tag <tag>Додати префікс до теми спаму
--rejectПовертати відправнику пошту на порозі відхилення замість передавання далі
--discardВідкидати пошту на порозі відхилення замість передавання далі
Коди виходу відповідають домовленостям sendmail, які читає Postfix: 0 — доставлено (або відкинуто), 64 — не вказано отримувачів, 69 — відхилено як спам (Postfix повертає лист відправнику), 75 — будь-який збій, тож Postfix зберігає лист і пробує пізніше.
milter, http, server і spamd#
Shell Копіювати
spamscanner milter --port 7831 --reject --subject-tag "[SPAM]"
spamscanner http --port 7832 --token "$SPAMSCANNER_TOKEN"
spamscanner server --port 7830
spamscanner spamd --port 783
Порт 783 клієнти SpamAssassin використовують за замовчуванням. Порти нижче 1024 потребують root або можливості CAP_NET_BIND_SERVICE; використайте інший порт, наприклад --port 7833, і вкажіть його клієнту.
Параметр Значення --port <n>TCP-порт
--host <ip>Адреса для прослуховування (за замовчуванням 127.0.0.1)
--socket <path>Натомість слухати на Unix-сокеті
--rejectMilter: відхиляти пошту на порозі відхилення
--reject-code <n>Milter: 451, спробуйте пізніше (за замовчуванням), або 550
--quarantineMilter: тримати спам у карантині поштового сервера
--name <hostname>Milter: ім’я цього сервера в Authentication-Results
--token <secret>HTTP: вимагати Authorization: Bearer <secret>; потрібно для /learn
--allow-tellspamd: приймати запити TELL (spamc -L spam) для навчання
--out <file>HTTP і spamd: зберігати вивчене в цей файл моделі
--subject-tag <tag>Milter і spamd: додавати префікс до теми спаму
--verboseMilter: журналювати кожну перевірку. TCP-сервер: відповідати одним рядком тексту
Наведені вище параметри перевірки діють і для серверів. Milter , HTTP API, TCP-сервер і spamd .
train, eval і learn#
Shell Копіювати
spamscanner train --spam ~/Mail/Junk --ham ~/Mail/Archive --out my-model.json
spamscanner eval --model my-model.json --spam test/spam.mbox --ham test/ham.mbox
spamscanner learn spam message.eml --model my-model.json
Параметр Значення --spam <path>Спам: файл mbox, каталог Maildir або тека з файлами .eml; можна повторювати
--ham <path>Ham, так само; можна повторювати
--dataset <file>Файл CSV або JSON Lines зі стовпцями тексту й мітки; можна повторювати
--text-column <name>, --label-column <name>Назви стовпців, коли їх не вдається визначити автоматично
--out <file>Куди записати модель (за замовчуванням spamscanner-model.json)
--mergeПочати з вбудованої моделі (або --model), а не з порожньої
learn оновлює файл моделі на місці, а першого разу створює його з вбудованої моделі. Навчання
llm-test і models#
Shell Копіювати
spamscanner models
spamscanner llm-test --llm ollama --llm-model qwen3.5 :4b
llm-test надсилає моделі один звичайний лист і два шахрайські, англійською та італійською, виводить її вердикти, час на кожен, використаний метод і обладнання та завершується з кодом 0, лише якщо всі три правильні.
Файл конфігурації#
--config file.json (або змінна середовища SPAMSCANNER_CONFIG) завантажує параметри бібліотеки . Параметри командного рядка мають пріоритет над файлом.
JSON Копіювати
{
"threshold" : 6 ,
"authentication" : true ,
"dnsbl" : {"ip" : ["zen.spamhaus.org" ], "domain" : ["dbl.spamhaus.org" ]},
"dns" : {"servers" : ["127.0.0.1" ]},
"clamav" : {"socket" : "/var/run/clamav/clamd.ctl" },
"llm" : {"provider" : "ollama" , "model" : "qwen3.5:4b" },
"scores" : {"deceptiveLink" : 4 , "FROM_NAME_BRAND" : 3 }
}
Змінні середовища#
Змінна Значення SPAMSCANNER_CONFIGФайл конфігурації
SPAMSCANNER_MODELФайл моделі, що використовується замість вбудованої
SPAMSCANNER_TOKENТокен для HTTP API
SPAMSCANNER_LLM_API_KEYКлюч API для будь-якого провайдера мовних моделей
CLOUDFLARE_API_TOKEN і CLOUDFLARE_ACCOUNT_ID, TYPESAFE_API_KEY, OPENAI_API_KEY, ANTHROPIC_API_KEY, GEMINI_API_KEY, MISTRAL_API_KEY, GROQ_API_KEY, OPENROUTER_API_KEY, DEEPSEEK_API_KEY, XAI_API_KEY, TOGETHER_API_KEY, FIREWORKS_API_KEY, CEREBRAS_API_KEY, HF_TOKEN, AZURE_OPENAI_API_KEYВласний ключ кожного провайдера
NODE_DEBUG=spamscanner*Налагоджувальне журналювання