spamdのプロトコルを話すSpamAssassinの代替
Spam ScannerはSpamAssassinのspamdプロトコルに応答するため、SpamAssassin向けに書かれたソフトウェアはそのまま使えます。spamc、Eximのspam条件、Harakaのspamassassinプラグインなどです。
置き換える#
sudo systemctl disable --now spamd # or spamassassin
npm install --global spamscanner
spamscanner spamd --port 783 --authspamc -c < message.eml # prints the score, exits 1 for spam
spamc -R < message.eml # the report, one line per test
spamc < message.eml # the message with X-Spam-* headersCHECK、SYMBOLS、REPORT、REPORT_IFSPAM、PROCESS、HEADERS、PINGに応答し、--allow-tellを指定すれば学習用のTELLにも応答します。プロジェクトのエンドツーエンドテストでは、SpamAssassin自身のspamcを使ってテストしています。
変わらないもの#
- ヘッダー:
X-Spam-Flag、X-Spam-Score、X-Spam-Level、X-Spam-StatusをSpamAssassinの形式で書き込むため、既存のSieve、procmail、メールクライアントのルールはそのまま動きます。 - しきい値5のスコア。名前付きのテストとその点数から成ります:
BAYES_99、RBL_ZEN、SPF_FAIL、DKIM_PASSなど。 - テストごとのスコアは、テスト名で変更できます。
違うところ#
- 言語:単語はUnicodeの規則で分割するため、中国語、日本語、タイ語は1本の長い文字列ではなく単語として読まれます。不可視文字やラテン文字の単語に混ざったキリル文字などの偽装は、先に元に戻します。
- フィッシング:類似ドメイン、欺瞞的なリンク、表示名に含まれるブランド名を、追加のルールなしで検査します。
- 添付ファイルはバイト列で識別します。
.pdfに名前を変えた実行ファイルも、実行ファイルのままです。 - 言語モデル:際どい判定は、Ollama経由のローカルモデルやホスト型のモデルに回せます。
- Node.js:
npm installを1回実行するか、スタンドアロンバイナリを使うだけです。管理すべきPerlモジュールやルールの更新はありません。
Spam ScannerはSpamAssassinのルールファイルを実行せず、ベイズデータベースの形式も独自のものです。同じメールからspamscanner trainで学習させてください。
Exim#
spamd_address = 127.0.0.1 783
# in the DATA ACL
warn spam = nobody:true
add_header = X-Spam-Score: $spam_score
defer spam = nobody:true
condition = ${if >={$spam_score_int}{150}}
message = Message rejected as spam