HTTP API、TCPサーバー、spamd

HTTP API#

Shell
spamscanner http --port 7832 --token "$SPAMSCANNER_TOKEN"

--hostで指定しない限り、127.0.0.1で待ち受けます。トークンを設定すると、/health以外のすべてのリクエストにAuthorization: Bearer <token>が必要になります。マシンの外に公開する前に、TLSを使うリバースプロキシの背後に置いてください。

メソッドとパス本文応答
GET /health{"ok": true, "version": "7.0.0"}
POST /scan生のメッセージJSON形式のスキャン結果
POST /check生のメッセージX-Spam-*ヘッダーを追加したメッセージ(message/rfc822)
POST /learn/spam生のメッセージ{"ok": true, "learned": "spam"}。トークンが必要
POST /learn/ham生のメッセージ{"ok": true, "learned": "ham"}。トークンが必要

クエリパラメーターでSMTPセッションの情報を渡します。

パラメーター意味
ipクライアントのIPアドレス
hostnameクライアントの検証済みの逆引きDNS名
heloクライアントのHELOまたはEHLOの名前
fromエンベロープの送信者
to受信者。繰り返すか、複数をカンマで区切る
verbose=1/scan:単語の一覧と件名も返す
subjectTag/check:スパムの件名の先頭に付ける。例:%5BSPAM%5D

/checkは、X-Spam-Flag、X-Spam-Score、X-Spam-Actionをレスポンスヘッダーとしても返すため、クライアントはメッセージを解析せずに判断できます。

25 MBを超えるメッセージには413を返します。スキャンに失敗した場合は、{"error": "..."}とともに500を返します。

Shell
curl -s -X POST -H "Authorization: Bearer $SPAMSCANNER_TOKEN" \
  --data-binary @message.eml "http://127.0.0.1:7832/scan?ip=203.0.113.5&to=bob@example.org" | jq '.isSpam, .score, .tests'

--out model.jsonを指定すると、/learnで学習させた内容がリクエストごとにそのファイルに保存されます。指定しない場合、学習内容はサーバーを再起動するまでしか保持されません。

Node.jsからは次のようにします。

JavaScript
const response = await fetch('http://127.0.0.1:7832/scan?ip=203.0.113.5', {
  method: 'POST',
  headers: {authorization: `Bearer ${process.env.SPAMSCANNER_TOKEN}`},
  body: rawMessage,
});
const {isSpam, score, action} = await response.json();

Pythonからは次のようにします。

Python
import os, urllib.request

request = urllib.request.Request(
    'http://127.0.0.1:7832/scan',
    data=open('message.eml', 'rb').read(),
    headers={'Authorization': f"Bearer {os.environ['SPAMSCANNER_TOKEN']}"},
    method='POST',
)
print(urllib.request.urlopen(request).read().decode())

TCPサーバー#

Shell
spamscanner server --port 7830

生のメッセージを送り、接続の送信側を閉じてから、1行のJSONを読み取ります。

Shell
nc -N 127.0.0.1 7830 < message.eml

--verboseを指定すると、代わりに1行のテキストで応答します:SPAM 16.3/5.0 BAYES_999,PHISHING_LOOKALIKE_DOMAIN,DECEPTIVE_LINK,FROM_NAME_BRANDまたはHAM -2.5/5.0 BAYES_00。

spamd#

Shell
spamscanner spamd --port 783

spamc、Exim、Harakaなど、SpamAssassinのクライアント向けのSpamAssassin互換サーバーです。EximとHarakaの設定

コマンド応答
CHECKSpam: True ; 16.3 / 5.0
SYMBOLS判定と、該当したテストの名前
REPORT判定と、テスト、点数、理由の表
REPORT_IFSPAMREPORTと同様。ただしハムの場合はレポートが空
PROCESS判定と、X-Spam-*ヘッダー付きのメッセージ
HEADERS判定と、X-Spam-*ヘッダー付きのメッセージのヘッダー部分
PINGPONG
SKIPなし
TELL--allow-tellを指定するとスパムまたはハムを学習し、--outに保存する

圧縮されたリクエスト(Compress: zlib)は拒否します。

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