Wiersz poleceń

Text
spamscanner <command> [options]
PolecenieCo robi
scan [file|-]Skanuje wiadomość z pliku lub standardowego wejścia
filter -f <sender> -- <recipients...>Filtr treści Postfix: skanuje standardowe wejście, dodaje nagłówki, przekazuje dalej
milterMilter dla Postfix i Sendmail, port 7831
httpHTTP API, port 7832
serverZwykły serwer TCP, port 7830
spamdSerwer spamd zgodny ze SpamAssassin, port 783
trainTrenuje model z plików mbox, katalogów Maildir, folderów lub zbiorów danych
evalMierzy model na oznaczonej poczcie
learn spam|ham [file|-] --model <file>Uczy model jednej wiadomości
llm-testSprawdza ustawienia modelu językowego na trzech przykładowych wiadomościach
modelsWyświetla zalecane otwarte modele
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
OpcjaZnaczenie
--jsonWypisuje pełny wynik jako JSON
--headersWypisuje wiadomość z dodanymi nagłówkami X-Spam-*
--subject-tag <tag>Dodatkowo dopisuje prefiks do tematu spamu
--verbosePokazuje każdy test i najsilniejsze wskazówki klasyfikatora
--threshold <n>Wynik, od którego poczta jest spamem (domyślnie 5)
--reject-threshold <n>Wynik, od którego poczta jest odrzucana (domyślnie 15)
--model <file>Plik modelu zamiast dołączonego
--no-classifierNie używa klasyfikatora
--config <file>Plik JSON z opcjami biblioteki
--allow-language <codes>Akceptowane języki, na przykład en,de,fr

Kody wyjścia: 0 hamPożądana poczta: przeciwieństwo spamu., 1 spam, 2 błąd.

Sesja SMTP#

OpcjaZnaczenie
--ip <address>Adres IP klienta, który wysłał wiadomość
--hostname <name>Zweryfikowana odwrotna nazwa DNS klienta
--helo <name>Nazwa podana przez klienta w HELO lub EHLO
--from <address>Nadawca z koperty (MAIL FROM)
--to <address>Odbiorca z koperty; powtórz dla kilku

Kontrole#

OpcjaZnaczenie
--authSprawdza SPF, DKIM, DMARC i ARC (wymaga --ip)
--dnsbl <zone>Czarna lista IP, na przykład zen.spamhaus.org; można powtarzać
--uribl <zone>Czarna lista domen dla linków, na przykład dbl.spamhaus.org; można powtarzać
--dns-server <ip>Serwer nazw dla kontroli DNS; można powtarzać
--no-cloudflareNie pyta filtrujących resolverów Cloudflare o linki
--clamav [socket]Skanuje załączniki przez clamd, na domyślnym gnieździe lub podanym
--allowlist <value>Zawsze przyjmuje ten adres IP, domenę lub adres e-mail; można powtarzać
--denylist <value>Zawsze odrzuca ten adres IP, domenę lub adres e-mail; można powtarzać

Model językowy#

OpcjaZnaczenie
--llm <provider>ollama, clef-flash, jev, openai, anthropic i inne (lista)
--llm-model <name>Model, na przykład qwen3.5:4b lub claude-haiku-4-5
--llm-method <method>decision (prawdopodobieństwo każdego werdyktu w jednym kroku; domyślnie tam, gdzie jest dostępne) lub generate (metody)
--llm-account <id>Identyfikator konta Cloudflare, dla clef i clef-flash
--llm-url <url>Bazowy URL, na przykład http://10.0.0.5:11434
--llm-host, --llm-port, --llm-path, --llm-protocolZmienia jedną część URL dostawcy
--llm-api-key <key>Klucz API; zobacz też zmienne środowiskowe poniżej
--llm-auth <type>bearer, x-api-key, api-key, basic, header lub none
--llm-auth-header <name>Nagłówek z kluczem, przy --llm-auth header
--llm-username, --llm-passwordDla --llm-auth basic
--llm-header "Name: value"Dodatkowy nagłówek żądania; można powtarzać
--llm-mode <mode>auto (tylko trudne przypadki, domyślnie) lub always
--llm-timeout <ms>Domyślnie 30000
--llm-policy <text>Dodatkowe reguły dla modelu, na przykład „Nigdy nie wysyłamy faktur”
--llm-redact, --no-llm-redactNajpierw usuwa dane osobowe; domyślnie włączone dla zdalnych dostawców

filter#

Filtr treści Postfix. Czyta wiadomość ze standardowego wejścia, dodaje nagłówki X-Spam-* i przekazuje ją do sendmail z tą samą kopertą.

Shell
spamscanner filter -f "$sender" -- "$recipient"
OpcjaZnaczenie
--sendmail <path>Domyślnie /usr/sbin/sendmail
--subject-tag <tag>Dopisuje prefiks do tematu spamu
--rejectOdbija pocztę na progu odrzucenia zamiast przekazywać ją dalej
--discardPorzuca pocztę na progu odrzucenia zamiast przekazywać ją dalej

Kody wyjścia są zgodne z konwencjami sendmail, które odczytuje Postfix: 0 dostarczono (lub porzucono), 64 nie podano odbiorców, 69 odrzucono jako spam (Postfix ją odbija), 75 dowolny błąd, więc Postfix zatrzymuje wiadomość i ponawia próbę później.

milter, http, server i 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

Port 783 to port, którego klienci SpamAssassin używają domyślnie. Porty poniżej 1024 wymagają uprawnień roota lub uprawnienia CAP_NET_BIND_SERVICE; użyj innego portu, na przykład --port 7833, i podaj go klientowi.

OpcjaZnaczenie
--port <n>Port TCP
--host <ip>Adres nasłuchiwania (domyślnie 127.0.0.1)
--socket <path>Nasłuchuje zamiast tego na gnieździe Unix
--rejectMilter: odrzuca pocztę na progu odrzucenia
--reject-code <n>Milter: 451, spróbuj ponownie później (domyślnie), lub 550
--quarantineMilter: zatrzymuje spam w kwarantannie serwera pocztowego
--name <hostname>Milter: nazwa tego serwera w Authentication-Results
--token <secret>HTTP: wymaga Authorization: Bearer <secret>; potrzebne dla /learn
--allow-tellspamd: przyjmuje żądania TELL (spamc -L spam) do nauki
--out <file>HTTP i spamd: zapisuje to, czego się nauczył, do tego pliku modelu
--subject-tag <tag>Milter i spamd: dopisuje prefiks do tematu spamu
--verboseMilter: loguje każde skanowanie. Serwer TCP: odpowiada jedną linią tekstu

Powyższe opcje skanowania dotyczą też serwerów. Milter, HTTP API, serwer TCP i spamd.

train, eval i 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
OpcjaZnaczenie
--spam <path>Spam: plik mbox, katalog Maildir lub folder plików .eml; można powtarzać
--ham <path>Ham, tak samo; można powtarzać
--dataset <file>Plik CSV lub JSON Lines z kolumnami tekstu i etykiety; można powtarzać
--text-column <name>, --label-column <name>Nazwy kolumn, gdy nie zostaną wykryte
--out <file>Gdzie zapisać model (domyślnie spamscanner-model.json)
--mergeZaczyna od dołączonego modelu (lub --model) zamiast od pustego

learn aktualizuje plik modelu w miejscu, a za pierwszym razem tworzy go z dołączonego modelu. Trenowanie

llm-test i models#

Shell
spamscanner models
spamscanner llm-test --llm ollama --llm-model qwen3.5:4b

llm-test wysyła do modelu jedną zwykłą wiadomość i dwa oszustwa, po angielsku i po włosku, wypisuje jego werdykty, czas każdego z nich, użytą metodę i sprzęt, i kończy z kodem 0 tylko wtedy, gdy wszystkie trzy są poprawne.

Plik konfiguracyjny#

--config file.json (lub zmienna środowiskowa SPAMSCANNER_CONFIG) wczytuje opcje biblioteki. Opcje wiersza poleceń mają pierwszeństwo przed plikiem.

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}
}

Zmienne środowiskowe#

ZmiennaZnaczenie
SPAMSCANNER_CONFIGPlik konfiguracyjny
SPAMSCANNER_MODELPlik modelu używany zamiast dołączonego
SPAMSCANNER_TOKENToken dla HTTP API
SPAMSCANNER_LLM_API_KEYKlucz API dla dowolnego dostawcy modelu językowego
CLOUDFLARE_API_TOKEN i 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_KEYWłasny klucz każdego dostawcy
NODE_DEBUG=spamscanner*Logowanie debugowania

Edytuj tę stronę na GitHub · Markdown ·