Forward Email
Spam Scanner, açık kaynaklı ve gizlilik odaklı e-posta hizmeti Forward Email tarafından kendi posta sunucuları için geliştirildi. Forward Email ileti içeriğinin günlüğünü tutmaz; bu yüzden dışarıdaki hiçbir filtreleme hizmeti işe yaramazdı: filtrenin kendi sunucularında çalışması ve postayı bir insan okumadan her kararını açıklaması gerekiyordu.
Bu sayfa, Forward Email'inki gibi bir posta sunucusunun onu nasıl kullandığını ve Spam Scanner 5 veya 6 için yazılmış kodda nelerin değiştiğini gösterir.
Gelen posta sunucusunda#
Forward Email postayı smtp-server ile alır. Bunun üzerine kurulmuş her sunucu için kalıp şöyledir:
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() SMTP akışını doğrudan kabul eder. mailauth sonuçları zaten elinizdeyse authentication seçeneğini atlayın ve yalnızca IP adresini verin.
421 veya 451 yanıtı, gönderen sunucunun iletiyi kuyruğa almasını ve daha sonra yeniden denemesini sağlar. Yeni reddetme kuralları geçici bir kodla başlayabilir ve sonuçları denetlendikten sonra arada posta kaybetmeden 550'ye geçebilir.
5 veya 6 sürümünden yükseltme#
Sürüm 7 baştan yeniden yazılmıştır. Oluşturucu, scan() ve sürüm 5 ve 6 kodunun okuduğu sonuç alanları hâlâ çalışır; sınıflandırıcı, model ve isteğe bağlı TensorFlow denetimleri değişti.
Aynı kalanlar#
new SpamScanner(options)veawait scanner.scan(source).require('spamscanner')sınıfı döndürür veimport SpamScanner from 'spamscanner'çalışır.result.isSpam,result.messageveresult.results.classification,.phishing,.executables,.arbitrary,.viruses,.macrosile.idnHomographAttack.results.phishing,.executables,.arbitraryve.virusesiçindeki her öğe önceki ile aynı türde bir ileti dizesine dönüşür (String(item), şablon dizgileri,message.includes('adult-related content')). Bunlar artıktype,messageve ayrıntılar içeren nesnelerdir.getTokensAndMailFromSource(),getClassification()vegetTokens().- Şu seçenekler yeni adlarına eşlenir:
clamscan→clamav,enableMacroDetection: false→macros: false,enableArbitraryDetection: false→arbitrary: false,authOptionsile birlikteenableAuthentication→authenticationvesession,reputationOptions.apiUrlile birlikteenableReputation→reputation,strictIDNDetection→phishing.homograph.strictModeveallowlistiledenylist.loggervememoizekabul edilir ve yok sayılır.
Değişenler#
| Önce | Şimdi |
|---|---|
scan('path/to/file.eml') dosyayı okuyordu | Dize ileti metnidir. scanFile(path) kullanın veya bir Buffer verin |
Artık yüklenemeyen, sözcüklere dayalı saf Bayes modeli (classifier.json) | Yeni bir sınıflandırıcı ve model biçimi; spamscanner train ile yeniden eğitin (eğitim) |
| Zehirlilik ve NSFW denetimleri ilk kullanımda TensorFlow modellerini ağdan yüklüyordu | Kendi modelinizi getirin: toxicity: {model} ve nsfw: {model}, classify() yöntemi olan herhangi bir nesneyi alır; örneğin @tensorflow-models/toxicity ve nsfwjs |
results.arbitrary eşleşen her kalıbı listeliyordu | Yalnızca tek başına spam işaretleyecek kadar güçlü kuralları listeler; tüm kurallar result.tests içindedir |
| Evet veya hayır yanıtı | Her birinin puanı ve nedeni olan result.score, result.action (accept, tag veya reject) ve result.tests |
isSpam kararını sınıflandırıcı veya herhangi tek bir denetim veriyordu | isSpam 5 veya daha yüksek puan demektir; eşikler ve puanlar değiştirilebilir |
| Bir Forward Email uç noktasına karşı itibar denetimleri | reputation.apiUrl ayarlanmadıkça kapalı olan genel bir itibar hizmeti |
Yeni olanlar#
- Kararsız kalınan durumlar için yerel veya barındırılan dil modelleri.
- SPFSender Policy Framework: bir alan adı adına posta göndermesine izin verilen sunucuları listeleyen DNS kaydı., DKIMDomainKeys Identified Mail: bir iletinin üzerindeki, göndericinin DNS kaydında yayımlanan ortak anahtarla doğrulanan imza., DMARCBir alan adından geldiğini iddia eden posta SPF ve DKIM hizalamasından geçemediğinde alıcıların ne yapacağını belirten DNS politikası. ve ARCAuthenticated Received Chain: kimlik doğrulama sonuçlarını yönlendiren sunucular boyunca taşıyan imzalar.; DNS engelleme listeleri; Cloudflare'in filtreleme yapan çözümleyicileri.
- İçeriğe göre ek denetimleri: kamufle edilmiş yürütülebilir dosyalar, arşivler, makrolar, etkin içerikli PDF'ler.
- Bir milter, HTTP API, TCP sunucusu ve spamd sunucusu ve bir komut satırı.
- Komut satırından veya API'den eğitim, değerlendirme ve bildirimlerden öğrenme.