HTTP API, שרת TCP ו-spamd

HTTP API#

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

הוא מאזין על 127.0.0.1, אלא אם --host קובע אחרת. כשמוגדר אסימון, כל בקשה חוץ מ-/health צריכה Authorization: Bearer <token>. לפני שחושפים אותו מחוץ למחשב, יש להציב אותו מאחורי reverse proxy עם 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. סריקה שנכשלת מקבלת 500 עם {"error": "..."}.

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

שולחים את ההודעה הגולמית, סוגרים את צד השליחה של החיבור, וקוראים שורה אחת של JSON:

Shell
nc -N 127.0.0.1 7830 < message.eml

עם --verbose, התשובה היא שורת טקסט: 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

שרת תואם SpamAssassin עבור spamc,‏ Exim,‏ Haraka ולקוחות SpamAssassin אחרים. הגדרת Exim ו-Haraka

פקודהתשובה
CHECKSpam: True ; 16.3 / 5.0
SYMBOLSפסק הדין ושמות הבדיקות שהופעלו
REPORTפסק הדין וטבלה של בדיקות, נקודות וסיבות
REPORT_IFSPAMכמו REPORT, עם דוח ריק ל-ham
PROCESSפסק הדין וההודעה עם כותרות X-Spam-*
HEADERSפסק הדין וגוש הכותרות של ההודעה עם כותרות X-Spam-*
PINGPONG
SKIPכלום
TELLלומד ספאם או ham, עם --allow-tell; שומר ל---out

בקשות דחוסות (Compress: zlib) נדחות.

עריכת הדף ב-GitHub · Markdown ·