セルフホスト型スパムフィルター
Spam Scanner は自分のサーバーで動き、メールをそこから出しません。分類器のモデルはパッケージに含まれ、テレメトリーも更新確認もなく、既定で外部に送るのは各リンクのホスト名についての DNS クエリだけです。
サーバーの外に出るもの#
既定では、メッセージ内のリンクのホスト名だけです。Cloudflare のフィルタリング用リゾルバー(1.1.1.2 と 1.1.1.3)で通常の DNS クエリとして調べ、メッセージやアドレスの一部が送られることはありません。--no-cloudflare でこれも止められます。
ネットワークを使うほかのチェックは、有効にするまですべて無効です。
| チェック | 有効にする方法 | 送るもの |
|---|---|---|
| SPF, DKIM, DMARC, ARC | --auth | 送信者のレコードを調べる DNS クエリ |
| DNS ブロックリスト | --dnsbl, --uribl | クライアントの IP アドレスとリンクのドメイン(DNS クエリとして) |
| ClamAV | --clamav | 添付ファイル(自分の clamd へ) |
| 言語モデル | --llm | メッセージの要約(指定したサーバーへ) |
検査結果は記録も保存もされません。セキュリティとプライバシー
サーバーへのインストール#
npm install --global spamscannerまたは、Node.js とモデルを内蔵した単体のバイナリ:
curl -fsSL https://github.com/spamscanner/spamscanner/releases/latest/download/install.sh | bashインストールスクリプトは、インストール前にリリースの SHA256SUMS ファイルでバイナリを照合します。各バイナリには署名付きのビルド来歴証明があり、gh attestation verify で確認できます。バイナリは Linux(x64 と arm64)、macOS、Windows 向けです。Linux 用バイナリは glibc が必要なため、Alpine では npm でインストールしてください。はじめに
更新の確認はありません。更新するには同じインストールコマンドをもう一度実行します。どちらのコマンドも最新のリリースを入れます。
サービスとして動かす#
milterメールフィルター。Sendmail由来でPostfixも使うプロトコルで、別のプログラムがSMTPセッション中に各メッセージを検査できるようにします。、HTTP、TCP、spamdSpamAssassinのデーモン。そのプロトコルはspamc、Exim、Harakaなどのクライアントが使います。 の各サーバーは、--host で指定しない限り 127.0.0.1 で待ち受けます。特権のないユーザーで、たとえば systemd の下で動かしてください。
[Service]
ExecStart=/usr/local/bin/spamscanner milter --port 7831 --auth --subject-tag [SPAM]
User=spamscanner
Group=spamscanner
Restart=on-failure
NoNewPrivileges=yes
ProtectSystem=strict
ProtectHome=yes
PrivateTmp=yesユニット全体と設定手順は Postfix ガイドにあります。どのサーバーも TLS を話さないため、別のマシンから接続するにはプライベートネットワーク、SSH トンネル、TLS 付きのリバースプロキシを使ってください。
メールサーバーとの接続#
| メールサーバー | コマンド | ポート |
|---|---|---|
| Postfix または Sendmail | spamscanner milter | 7831 |
| Postfix(メールを拒否しない) | spamscanner filter(コンテンツフィルター) | なし |
| Exim、Haraka、spamc | spamscanner spamd | 783 |
| HTTP を話すもの全般 | spamscanner http | 7832 |
| シンプルな TCP クライアント | spamscanner server | 7830 |
| Node.js で書かれたメールサーバー | import SpamScanner from 'spamscanner' | なし |
サーバーはメッセージに X-Spam-Flag、X-Spam-Score、X-Spam-Status ヘッダーを追加でき、ライブラリはスコアと作動したすべてのテストを返します。ガイド:Postfix スパムフィルター、ほかのメールサーバー、HTTP API。
言語モデルをローカルで動かす#
言語モデルは任意で、判断の難しいメッセージだけを読みます。明らかなスパムや明らかな ham受信者が望むメール。スパムの反対です。 は届きません。Ollamaオープンな言語モデルを自分のマシンにダウンロードして実行するプログラム。HTTP APIを備えます。 なら同じサーバーで動くため、メッセージがサーバーの外に出ることはありません。
ollama pull qwen3.5:4b
spamscanner milter --llm ollama --llm-model qwen3.5:4bqwen3.5:4b は CPU で動きます。ホスト型のプロバイダーを使う場合は、送信前にメッセージから個人情報を取り除きます。言語モデル
自分のメールで学習させる#
同梱のモデルは公開データセットで学習しています。サーバーが受け取るメールで学習したモデルのほうが精度が高く、そのサーバーに留まります。
spamscanner train --spam ~/Maildir/.Junk --ham ~/Maildir/cur --out /var/lib/spamscanner/model.json
SPAMSCANNER_MODEL=/var/lib/spamscanner/model.json spamscanner milterモデルファイルが保持するのはハッシュ化した特徴の件数で、単語やメッセージ本文ではありません。学習
動作要件#
Linux、macOS、Windows 上の Node.js 18 以降。単体のバイナリなら何も要りません。ClamAVオープンソースのウイルス対策エンジン。デーモンのclamdが、ソケット経由で送られたファイルをスキャンします。 と Ollama は任意で、それぞれ別のサービスとして動きます。