Kommandolinje
Text Kopiér
spamscanner <command> [options]
Kommando Hvad den gør scan [file|-]Scan en besked fra en fil eller standardinput
filter -f <sender> -- <recipients...>Postfix-indholdsfilter: scan standardinput, tilføj headere, send den videre
milterMilter til Postfix og Sendmail, port 7831
httpHTTP API, port 7832
serverAlmindelig TCP-server, port 7830
spamdSpamAssassin-kompatibel spamd-server, port 783
trainTræn en model fra mbox-filer, Maildirs, mapper eller datasæt
evalMål en model på mærket post
learn spam|ham [file|-] --model <file>Lær en model én besked
llm-testTjek indstillingerne for sprogmodellen med tre eksempelbeskeder
modelsVis anbefalede åbne modeller
version, help
scan#
Shell Kopiér
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
Indstilling Betydning --jsonUdskriv hele resultatet som JSON
--headersUdskriv beskeden med X-Spam-*-headere tilføjet
--subject-tag <tag>Sæt også et præfiks foran emnet på spam
--verboseVis alle test og klassifikatorens stærkeste spor
--threshold <n>Score, hvor post er spam (standard 5)
--reject-threshold <n>Score, hvor post afvises (standard 15)
--model <file>En modelfil i stedet for den medfølgende
--no-classifierBrug ikke klassifikatoren
--config <file>En JSON-fil med biblioteksindstillinger
--allow-language <codes>Accepterede sprog, for eksempel en,de,fr
Afslutningskoder: 0 hamØnsket post: det modsatte af spam. , 1 spam, 2 fejl.
SMTP-session#
Indstilling Betydning --ip <address>IP-adressen på den klient, der sendte beskeden
--hostname <name>Klientens verificerede reverse DNS-navn
--helo <name>Det navn, den angav i HELO eller EHLO
--from <address>Afsender i konvolutten (MAIL FROM)
--to <address>Modtager i konvolutten; gentag for flere
Tjek#
Indstilling Betydning --authTjek SPF, DKIM, DMARC og ARC (kræver --ip)
--dnsbl <zone>IP-blokeringsliste, for eksempel zen.spamhaus.org; kan gentages
--uribl <zone>Domæneblokeringsliste for links, for eksempel dbl.spamhaus.org; kan gentages
--dns-server <ip>Navneserver til DNS-tjek; kan gentages
--no-cloudflareSpørg ikke Cloudflares filtrerende resolvere om links
--clamav [socket]Scan vedhæftede filer med clamd, på dens standardsocket eller den angivne
--allowlist <value>Acceptér altid denne IP-adresse, dette domæne eller denne adresse; kan gentages
--denylist <value>Afvis altid denne IP-adresse, dette domæne eller denne adresse; kan gentages
Sprogmodel#
Indstilling Betydning --llm <provider>ollama, clef-flash, jev, openai, anthropic og andre (liste )
--llm-model <name>Model, for eksempel qwen3.5:4b eller claude-haiku-4-5
--llm-method <method>decision (en sandsynlighed for hver dom i ét trin; standard, hvor det er muligt) eller generate (metoder )
--llm-account <id>Cloudflare-konto-ID til clef og clef-flash
--llm-url <url>Basis-URL, for eksempel http://10.0.0.5:11434
--llm-host, --llm-port, --llm-path, --llm-protocolÆndr én del af udbyderens URL
--llm-api-key <key>API-nøgle; se også miljøvariablerne nedenfor
--llm-auth <type>bearer, x-api-key, api-key, basic, header eller none
--llm-auth-header <name>Header til nøglen, med --llm-auth header
--llm-username, --llm-passwordTil --llm-auth basic
--llm-header "Name: value"Ekstra header i forespørgslen; kan gentages
--llm-mode <mode>auto (kun tvivlstilfælde, standard) eller always
--llm-timeout <ms>Standard 30000
--llm-policy <text>Ekstra regler for modellen, for eksempel »Vi sender aldrig fakturaer«
--llm-redact, --no-llm-redactFjern personoplysninger først; slået til som standard for eksterne udbydere
filter#
Et Postfix-indholdsfilter . Det læser en besked fra standardinput, tilføjer X-Spam-*-headere og sender den videre til sendmail med samme konvolut.
Shell Kopiér
spamscanner filter -f "$sender" -- "$recipient"
Indstilling Betydning --sendmail <path>Standard /usr/sbin/sendmail
--subject-tag <tag>Sæt et præfiks foran emnet på spam
--rejectSend post ved afvisningsgrænsen retur i stedet for at sende den videre
--discardKassér post ved afvisningsgrænsen i stedet for at sende den videre
Afslutningskoderne følger sendmails konventioner, som Postfix læser: 0 leveret (eller kasseret), 64 ingen modtagere angivet, 69 afvist som spam (Postfix sender den retur), 75 enhver fejl, så Postfix beholder beskeden og prøver igen senere.
milter, http, server og spamd#
Shell Kopiér
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 er den port, SpamAssassin-klienter bruger som standard. Porte under 1024 kræver root eller kapabiliteten CAP_NET_BIND_SERVICE; brug en anden port, for eksempel --port 7833, og fortæl klienten det.
Indstilling Betydning --port <n>TCP-port
--host <ip>Adresse, der lyttes på (standard 127.0.0.1)
--socket <path>Lyt i stedet på en Unix-socket
--rejectMilter: afvis post ved afvisningsgrænsen
--reject-code <n>Milter: 451, prøv igen senere (standard), eller 550
--quarantineMilter: hold spam tilbage i mailserverens karantæne
--name <hostname>Milter: denne servers navn i Authentication-Results
--token <secret>HTTP: kræv Authorization: Bearer <secret>; nødvendigt for /learn
--allow-tellspamd: acceptér TELL-forespørgsler (spamc -L spam) til indlæring
--out <file>HTTP og spamd: gem det indlærte i denne modelfil
--subject-tag <tag>Milter og spamd: sæt et præfiks foran emnet på spam
--verboseMilter: log hver scanning. TCP-server: svar med én tekstlinje
Scanningsindstillingerne ovenfor gælder også for serverne. Milteren , HTTP API'et, TCP-serveren og spamd .
train, eval og learn#
Shell Kopiér
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
Indstilling Betydning --spam <path>Spam: en mbox-fil, en Maildir eller en mappe med .eml-filer; kan gentages
--ham <path>Ham, på samme måde; kan gentages
--dataset <file>En CSV- eller JSON Lines-fil med kolonner til tekst og etiket; kan gentages
--text-column <name>, --label-column <name>Kolonnenavne, når de ikke genkendes automatisk
--out <file>Hvor modellen skrives (standard spamscanner-model.json)
--mergeStart fra den medfølgende model (eller --model) i stedet for en tom model
learn opdaterer modelfilen på stedet og opretter den ud fra den medfølgende model første gang. Træning
llm-test og models#
Shell Kopiér
spamscanner models
spamscanner llm-test --llm ollama --llm-model qwen3.5 :4b
llm-test sender én almindelig besked og to svindelbeskeder, på engelsk og italiensk, til modellen, udskriver dens domme, den tid hver tog, den anvendte metode og hardwaren og afslutter kun med 0, hvis alle tre er rigtige.
Konfigurationsfil#
--config file.json (eller miljøvariablen SPAMSCANNER_CONFIG) indlæser biblioteksindstillinger . Indstillinger på kommandolinjen tilsidesætter filen.
JSON Kopiér
{
"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 }
}
Miljøvariabler#
Variabel Betydning SPAMSCANNER_CONFIGKonfigurationsfil
SPAMSCANNER_MODELModelfil, der bruges i stedet for den medfølgende
SPAMSCANNER_TOKENToken til HTTP API'et
SPAMSCANNER_LLM_API_KEYAPI-nøgle til enhver udbyder af sprogmodeller
CLOUDFLARE_API_TOKEN og 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_KEYHver udbyders egen nøgle
NODE_DEBUG=spamscanner*Fejlsøgningslogning