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:

JavaScript
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) ve await scanner.scan(source).
  • require('spamscanner') sınıfı döndürür ve import SpamScanner from 'spamscanner' çalışır.
  • result.isSpam, result.message ve result.results.classification, .phishing, .executables, .arbitrary, .viruses, .macros ile .idnHomographAttack.
  • results.phishing, .executables, .arbitrary ve .viruses iç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ık type, message ve ayrıntılar içeren nesnelerdir.
  • getTokensAndMailFromSource(), getClassification() ve getTokens().
  • Şu seçenekler yeni adlarına eşlenir: clamscan → clamav, enableMacroDetection: false → macros: false, enableArbitraryDetection: false → arbitrary: false, authOptions ile birlikte enableAuthentication → authentication ve session, reputationOptions.apiUrl ile birlikte enableReputation → reputation, strictIDNDetection → phishing.homograph.strictMode ve allowlist ile denylist. logger ve memoize kabul edilir ve yok sayılır.

Değişenler#

ÖnceŞimdi
scan('path/to/file.eml') dosyayı okuyorduDize 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üyorduKendi 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ı listeliyorduYalnı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 veriyorduisSpam 5 veya daha yüksek puan demektir; eşikler ve puanlar değiştirilebilir
Bir Forward Email uç noktasına karşı itibar denetimlerireputation.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.

Bu sayfayı GitHub'da düzenle · Markdown ·