Forward Email
Spam Scannerin on tehnyt Forward Email, avoimen lähdekoodin yksityisyyteen keskittyvä sähköpostipalvelu, omille postipalvelimilleen. Forward Email ei tallenna lokeja viestien sisällöstä, joten mikään ulkopuolinen suodatuspalvelu ei kelvannut: suodattimen piti toimia omilla palvelimilla ja perustella jokainen päätös ilman, että kukaan lukee postia.
Tämä sivu näyttää, miten Forward Emailin kaltainen postipalvelin sitä käyttää ja mikä muuttui Spam Scannerin versioille 5 tai 6 kirjoitetun koodin kannalta.
Saapuvan postin palvelimella#
Forward Email vastaanottaa postia smtp-serverillä. Malli mille tahansa sen päälle rakennetulle palvelimelle:
const SpamScanner = require('spamscanner');
const scanner = new SpamScanner({
clamav: true, // clamd on its default socket
authentication: true, // SPF, DKIM, DMARC, ARC
dnsbl: {ip: ['zen.spamhaus.org'], domain: ['dbl.spamhaus.org']},
dns: {servers: ['127.0.0.1']}, // a local caching resolver
});
async function onData(stream, session, callback) {
const scan = await scanner.scan(stream, {
session: {
remoteAddress: session.remoteAddress,
resolvedClientHostname: session.clientHostname,
helo: session.hostNameAppearsAs,
envelope: session.envelope,
},
});
if (scan.results.viruses.length > 0) {
return callback(Object.assign(new Error(`Message contains a virus: ${scan.results.viruses[0]}`), {responseCode: 554}));
}
if (scan.action === 'reject') {
// A temporary error: the sender retries, and a wrong decision can be undone.
return callback(Object.assign(new Error(`Message rejected as spam: ${scan.message}`), {responseCode: 421}));
}
// scan.isSpam: deliver to the Junk folder, or add scan's headers (spamHeaders) and forward.
callback();
}scanner.scan() hyväksyy SMTP-virran suoraan. Jos mailauthin tulokset ovat jo käytettävissä, jätä authentication pois ja välitä pelkkä IP-osoite.
Vastaus 421 tai 451 saa lähettävän palvelimen asettamaan viestin jonoon ja yrittämään myöhemmin uudelleen. Uudet hylkäyssäännöt voivat aloittaa väliaikaisella koodilla ja siirtyä koodiin 550, kun niiden tulokset on tarkistettu, menettämättä postia siinä välissä.
Päivittäminen versiosta 5 tai 6#
Versio 7 on kirjoitettu uudelleen. Konstruktori, scan() ja tulosten kentät, joita versioiden 5 ja 6 koodi lukee, toimivat edelleen; luokitin, malli ja valinnaiset TensorFlow-tarkistukset muuttuivat.
Ennallaan#
new SpamScanner(options)jaawait scanner.scan(source).require('spamscanner')palauttaa luokan, jaimport SpamScanner from 'spamscanner'toimii.result.isSpam,result.messagesekäresult.results.classification,.phishing,.executables,.arbitrary,.viruses,.macrosja.idnHomographAttack.- Jokainen kohteiden
results.phishing,.executables,.arbitraryja.virusesalkio muuntuu samanlaiseksi viestimerkkijonoksi kuin ennenkin (String(item), mallimerkkijonot,message.includes('adult-related content')). Ne ovat nyt olioita, joilla ontype,messageja yksityiskohdat. getTokensAndMailFromSource(),getClassification()jagetTokens().- Nämä valinnat vastaavat uusia nimiään:
clamscanon nytclamav,enableMacroDetection: falseonmacros: false,enableArbitraryDetection: falseonarbitrary: false,enableAuthenticationyhdessäauthOptions:n kanssa onauthenticationjasession,enableReputationyhdessäreputationOptions.apiUrl:n kanssa onreputation,strictIDNDetectiononphishing.homograph.strictMode, sekäallowlistjadenylist.loggerjamemoizehyväksytään ja ohitetaan.
Muuttunut#
| Ennen | Nyt |
|---|---|
scan('path/to/file.eml') luki tiedoston | Merkkijono on viestin tekstiä. Käytä scanFile(path) tai välitä Buffer |
Sanoihin perustuva naiivi Bayes-malli (classifier.json), jota ei voi enää ladata | Uusi luokitin ja mallimuoto; kouluta uudelleen komennolla spamscanner train (koulutus) |
| Toksisuus- ja NSFW-tarkistukset latasivat TensorFlow-mallit verkosta ensimmäisellä käyttökerralla | Tuo oma mallisi: toxicity: {model} ja nsfw: {model} ottavat minkä tahansa olion, jolla on classify()-metodi, esimerkiksi kirjastoista @tensorflow-models/toxicity ja nsfwjs |
results.arbitrary luetteli jokaisen täsmänneen mallin | Se luettelee säännöt, jotka ovat yksinään tarpeeksi vahvoja merkitsemään roskapostin; kaikki säännöt ovat kohteessa result.tests |
| Kyllä tai ei -vastaus | result.score, result.action (accept, tag tai reject) ja result.tests, kukin pisteineen ja syineen |
isSpam määräytyi luokittimen tai minkä tahansa yksittäisen tarkistuksen perusteella | isSpam tarkoittaa vähintään 5 pistettä; rajoja ja pisteitä voi muuttaa |
| Mainetarkistukset Forward Emailin rajapintaa vasten | Yleinen mainepalvelu, pois käytöstä, ellei reputation.apiUrl ole asetettu |
Uutta#
- Kielimallit epäselviin tapauksiin, paikallisesti tai palveluna.
- SPFSender Policy Framework: DNS-tietue, joka luettelee palvelimet, joilla on lupa lähettää postia verkkotunnuksen nimissä., DKIMDomainKeys Identified Mail: viestin allekirjoitus, joka tarkistetaan lähettäjän DNS:ään julkaistulla julkisella avaimella., DMARCDNS-käytäntö, joka kertoo vastaanottajille, mitä tehdä, kun verkkotunnuksen nimissä lähetetty viesti ei läpäise SPF- ja DKIM-kohdistusta. ja ARCAuthenticated Received Chain: allekirjoitukset, jotka kuljettavat todennustulokset edelleenlähettävien palvelinten läpi.; DNS-estolistat; Cloudflaren suodattavat DNS-palvelut.
- Liitteiden tarkistus sisällön perusteella: naamioidut suoritettavat tiedostot, arkistot, makrot, aktiiviset PDF:t.
- Milter, HTTP API, TCP-palvelin ja spamd-palvelin sekä komentorivi.
- Koulutus, arviointi ja oppiminen raporteista komentoriviltä tai API:n kautta.