コマンドライン

Text
spamscanner <command> [options]
コマンド動作
scan [file|-]ファイルまたは標準入力のメッセージをスキャンする
filter -f <sender> -- <recipients...>Postfixのコンテンツフィルター。標準入力をスキャンし、ヘッダーを追加して渡す
milterPostfixとSendmail向けのmilter、ポート7831
httpHTTP API、ポート7832
serverプレーンなTCPサーバー、ポート7830
spamdSpamAssassin互換のspamdサーバー、ポート783
trainmboxファイル、Maildir、フォルダー、データセットからモデルを学習させる
evalラベル付きのメールでモデルを計測する
learn spam|ham [file|-] --model <file>モデルにメッセージを1通学習させる
llm-test3通のサンプルメッセージで言語モデルの設定を確認する
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で出力する
--headersX-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はハム、1はスパム、2はエラー。

SMTPセッション#

オプション意味
--ip <address>メッセージを送信したクライアントのIPアドレス
--hostname <name>クライアントの検証済みの逆引きDNS名
--helo <name>クライアントがHELOまたはEHLOで名乗った名前
--from <address>エンベロープの送信者(MAIL FROM)
--to <address>エンベロープの受信者。複数の場合は繰り返す

検査#

オプション意味
--authSPF、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(1ステップで各判定の確率を出す。使える場合はデフォルト)またはgenerate(方式)
--llm-account <id>CloudflareのアカウントID。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拒否のしきい値に達したメールを、渡さずに破棄する

終了コードは、Postfixが読み取るsendmailの慣例に従います。0は配送済み(または破棄済み)、64は受信者の指定なし、69はスパムとして拒否(Postfixがバウンスする)、75はなんらかの失敗です。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サーバー:1行のテキストで応答する

上記のスキャンのオプションはサーバーにも適用されます。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>ハム(指定方法は同上)。繰り返し指定可
--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は、英語とイタリア語で、普通のメッセージ1通と詐欺のメッセージ2通をモデルに送り、その判定、それぞれにかかった時間、使った方式、ハードウェアを表示します。3通すべてが正しい場合にだけ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_TOKENHTTP 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*デバッグログ

このページをGitHubで編集 · Markdown ·