HTTP API, TCP-palvelin ja spamd

HTTP API#

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

Se kuuntelee osoitetta 127.0.0.1, ellei --host määrää muuta. Kun tunniste on asetettu, jokainen pyyntö polkua /health lukuun ottamatta tarvitsee otsakkeen Authorization: Bearer <token>. Aseta se TLS:ää käyttävän käänteisen välityspalvelimen taakse ennen kuin avaat sen koneen ulkopuolelle.

Metodi ja polkuRunkoVastaus
GET /health{"ok": true, "version": "7.0.0"}
POST /scanRaakaviestiTarkistuksen tulos JSON-muodossa
POST /checkRaakaviestiViesti, johon on lisätty X-Spam-*-otsakkeet, muodossa message/rfc822
POST /learn/spamRaakaviesti{"ok": true, "learned": "spam"}; vaatii tunnisteen
POST /learn/hamRaakaviesti{"ok": true, "learned": "ham"}; vaatii tunnisteen

Kyselyparametrit kuvaavat SMTP-istunnon:

ParametriMerkitys
ipAsiakkaan IP-osoite
hostnameSen varmennettu käänteisen DNS:n nimi
heloSen HELO- tai EHLO-nimi
fromKirjekuoren lähettäjä
toVastaanottaja; toista se tai erota useita pilkuilla
verbose=1/scan: palauttaa myös sanaluettelon ja aiherivin
subjectTag/check: lisää etuliitteen roskapostin aiheriville, esimerkiksi %5BSPAM%5D

/check palauttaa myös X-Spam-Flag-, X-Spam-Score- ja X-Spam-Action-otsakkeet vastauksen otsakkeina, joten asiakas voi päättää jäsentämättä viestiä.

Yli 25 Mt:n viestit saavat vastauksen 413. Epäonnistunut tarkistus saa vastauksen 500 ja rungon {"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'

Valitsimella --out model.json se, mitä /learn opettaa, tallennetaan kyseiseen tiedostoon jokaisen pyynnön jälkeen. Ilman sitä opittu säilyy vain palvelimen uudelleenkäynnistykseen asti.

Node.js:stä:

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();

Pythonista:

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-palvelin#

Shell
spamscanner server --port 7830

Lähetä raakaviesti, sulje yhteyden lähettävä puoli ja lue yksi JSON-rivi:

Shell
nc -N 127.0.0.1 7830 < message.eml

Valitsimella --verbose vastaus on sen sijaan tekstirivi: SPAM 16.3/5.0 BAYES_999,PHISHING_LOOKALIKE_DOMAIN,DECEPTIVE_LINK,FROM_NAME_BRAND tai HAM -2.5/5.0 BAYES_00.

spamd#

Shell
spamscanner spamd --port 783

SpamAssassin-yhteensopiva palvelin spamc:lle, Eximille, Harakalle ja muille SpamAssassin-asiakkaille. Eximin ja Harakan määrittäminen

KomentoVastaus
CHECKSpam: True ; 16.3 / 5.0
SYMBOLSTuomio ja lauenneiden testien nimet
REPORTTuomio ja taulukko testeistä, pisteistä ja syistä
REPORT_IFSPAMKuten REPORT, mutta hamille tyhjä raportti
PROCESSTuomio ja viesti X-Spam-*-otsakkeineen
HEADERSTuomio ja viestin otsakelohko X-Spam-*-otsakkeineen
PINGPONG
SKIPEi mitään
TELLOppii roskapostin tai hamin valitsimella --allow-tell; tallentaa kohteeseen --out

Pakatut pyynnöt (Compress: zlib) hylätään.

Muokkaa tätä sivua GitHubissa · Markdown ·