her dili okuyan ve her kararını açıklayan bir spam filtresi.
Spam Scanner; Node.js, komut satırı ve Postfix, Exim, Haraka gibi posta sunucuları için spam, kimlik avı, dolandırıcılık ve kötü amaçlı yazılımı yakalar. Her sonuç tetiklenen testleri ve nedenlerini listeler.
npm install -g spamscanner
- Node.js 18+
- Milter, spamd, HTTP
- Ollama, Claude, ChatGPT
- Telemetri yok
$ spamscanner scan message.eml SPAM score 16.3 (spam at 5.0, reject at 15.0) action: reject language: en +6.3 BAYES_999 Classifier spam probability 99.9% +5.0 PHISHING_LOOKALIKE_DOMAIN "paypa1-secure.top" imitates paypal by swapping characters +3.0 DECEPTIVE_LINK A link shows "https://www.paypal.com/signin" but goes to paypa1-secure.top +2.0 FROM_NAME_BRAND Display name says "paypal" but the message is from paypa1-secure.top $ echo $? 1
Bir ileti nasıl değerlendirilir
Her denetim puan ekler veya düşer ve kararı toplam verir. Eşikler ve puanlar değiştirilebilir; hiçbir şey kara kutu değildir: sonuç her testi adıyla belirtir.
Oku
İleti ayrıştırılır ve metni normalleştirilir: süslü harfler, görünmez karakterler ve benzer görünümlü alfabeler geri çözülür.
Denetle
Sınıflandırıcı, bağlantı, ek, kimlik doğrulama, engelleme listesi ve kural denetimleri her biri bir zaman aşımıyla aynı anda çalışır.
Puan
Her test puan ekler veya düşer. 5 puanda ileti spamdır; 15 puanda posta sunucusunun onu reddetmesi gerekir.
Sor
Kararsız kalınan durumlar bir dil modeline gönderilebilir; model en fazla 6 puan ekler veya en fazla 3 puan düşer.
- 5'in altıkabul et
- 5 ile 15 arasıspam olarak etiketle
- 15 ve üzerireddet
Neleri denetler
Sözcükler sinyallerden yalnızca biridir. Bağlantılar, göndericiler, ekler ve kimlik doğrulama da en az o kadar bilgi verir ve hiçbiri iletinin diline bağlı değildir.
Her yazı sistemi için bir sınıflandırıcı
Sözcükler, sözcük çiftleri, bağlantılar, göndericiler, HTML ve ekler SpamBayes'in yaptığı gibi sayılıp birleştirilir; ipuçları çeliştiğinde dürüst bir "emin değil" sonucu verilir.
Nasıl karar verirHer dil, özenle
Çince, Japonca ve Tayca için Unicode sözcük bölütleme, geri çözülen kamuflajlar ve modelin az ham gördüğü bir dil için ceza yok.
DillerKimlik avı
Kiril ya da yer değiştirmiş harflerle yazılmış benzer alan adları, metni başka bir adres gösteren bağlantılar, görünen adlardaki markalar ve Cloudflare'in kötü amaçlı yazılım çözümleyicisi.
Kimlik avı denetimleriEkler
Baytlarından tanınan yürütülebilir dosyalar (adı .pdf olarak değiştirilmiş olsa bile); çift uzantılar; ZIP dosyalarındaki programlar; Office makroları; etkin içerikli PDF'ler; ClamAV.
Ek denetimleriKimlik doğrulama
SPF, DKIM, DMARC ve ARC, DNS engelleme listeleri, izin ve engelleme listeleri ve kendi alan adınızı taklit eden posta için bir kural.
Kimlik doğrulamaDil modelleri
Kararsız kalınan durumlar bir modele gider: kendi makinenizde Ollama ya da Claude, ChatGPT, Gemini ve OpenAI uyumlu herhangi bir sunucu.
Dil modelleri
Her dil, tahmin yürütmeden
Sözcükler Unicode kurallarıyla bulunur; böylece boşluksuz yazılan diller de çalışır ve kamuflajlar sayımdan önce geri çözülür. Bunlar sınıflandırıcının saydığı sözcüklerdir ve bu sayfa oluşturulurken hesaplanmıştır.
Paketle gelen modelin az ham gördüğü bir dil "spam" yerine "emin değil" sonucunu alır; böylece Arapça veya Korece sıradan posta, yazı sistemi yüzünden asla işaretlenmez. Diller
Claim your fr␣ee prіze: V1agra 𝐅𝐑𝐄𝐄
- claim
- your
- free
- prize
- viagra
- free
Sıfır genişlikli boşluk, Kiril і harfi, harf yerine rakam ve matematiksel kalın harfler
恭喜您获得一百万元大奖
- 恭喜
- 您
- 获得
- 一
- 百万
- 元
- 大奖
Sözlükle bölütlenmiş
ยินดีด้วยคุณได้รับรางวัลหนึ่งล้านบาท
- ยินดี
- ด้วย
- คุณ
- ได้
- รับ
- รางวัล
- หนึ่ง
- ล้าน
- บาท
Sözlükle bölütlenmiş
Поздравляем! Вы выиграли миллион
- поздравляем
- вы
- выиграли
- миллион
Unicode kurallarına göre küçük harfe çevrilmiş
Posta sunucunuza bağlanır
Postfix ve Sendmail için bir milter; spamc, Exim ve Haraka için SpamAssassin uyumlu bir spamd sunucusu; bir içerik filtresi, bir HTTP API, bir TCP sunucusu ve kitaplık.
Hepsi X-Spam-Flag, X-Spam-Score, X-Spam-Status üst bilgilerini ekler ve göndericinin sahtesini yaptıklarını kaldırır.
spamscanner milter --port 7831 --auth --subject-tag "[SPAM]"
# /etc/postfix/main.cf
smtpd_milters = inet:127.0.0.1:7831
milter_default_action = acceptMilter postayı SMTP oturumu sırasında denetler; bu nedenle reddetme eşiğine ulaşan spam kabul edilmeden önce geri çevrilir. Postfix kılavuzu
spamscanner spamd --port 783 --auth
spamc -c < message.eml # prints 16.3/5.0 and exits 1SpamAssassin uyumlu bir spamd sunucusu: spamd'yi durdurun, Spam Scanner'ı aynı bağlantı noktasında başlatın; SpamAssassin istemcileri çalışmaya devam eder. spamd kılavuzu
import SpamScanner from 'spamscanner';
const scanner = new SpamScanner({authentication: true});
const result = await scanner.scan(stream, {session});
if (result.action === 'reject') {
// refuse with a 4xx or 5xx reply
}smtp-server, Haraka eklentileri veya postayı işleyen herhangi bir hizmet için kitaplık. API başvurusu
spamscanner http --port 7832 --token "$TOKEN"
curl -s -X POST -H "Authorization: Bearer $TOKEN" \
--data-binary @message.eml "http://127.0.0.1:7832/scan?ip=203.0.113.5"HTTP isteği gönderebilen her dil ve her sunucu için. HTTP API kılavuzu
Kararsız kalınan durumlar için bir dil modeli
Açıkça spam ve açıkça ham olan iletiler ona hiç ulaşmaz. Puan sınırdaysa veya sınıflandırıcı emin değilse bir model iletiyi okur ve spam, kimlik avı, dolandırıcılık, kötü amaçlı yazılım ya da ham yanıtını verir. Modeli kendi makinenizde çalıştırın ya da herhangi bir URL, bağlantı noktası ve kimlik doğrulamayla barındırılan bir model kullanın.
Bir iletide yapay zekâ filtreleri için gizlenmiş talimatlar spam olarak puanlanır ve modele iletinin yalnızca veri olduğu söylenir. Uçtan uca testler bunu Ollama üzerinden gerçek bir modelle doğrular.
- Ollama
- LM Studio
- llama.cpp server
- vLLM
- LocalAI
- Jan
- OpenAI
- Anthropic (Claude)
- Google Gemini
- Mistral AI
- Groq
- OpenRouter
- DeepSeek
- xAI
- Together AI
- Fireworks AI
- Cerebras
- Hugging Face Inference Providers
- Azure OpenAI
- Cloudflare Clef
- Cloudflare Clef Flash
- TypeSafe Jev
- TypeSafe Jev on OpenRouter
- Any decision model server
ollama pull qwen3.5:4b
spamscanner llm-test --llm ollama --llm-model qwen3.5:4b
spamscanner milter --llm ollama --llm-model qwen3.5:4bÇerçeveli: kendi makinenizde çalışır. Bir ileti barındırılan bir sağlayıcıya gitmeden önce kişisel veriler çıkarılır.
| Ollama | Lisans | Boyut |
|---|---|---|
qwen3.5:0.8b | Apache-2.0 | 1.3 GB |
gemma4:e2b | Apache-2.0 | 4.6 GB |
qwen3.5:4b | Apache-2.0 | 3.3 GB |
qwen3.5:9b | Apache-2.0 | 6.6 GB |
gpt-oss-safeguard:20b | Apache-2.0 | 14 GB |
Önerilen açık modeller. Tüm öneriler
Ölçülmüş ve eğitilebilir
Paketle gelen model herkese açık veri kümeleriyle eğitilir ve görmediği iletilerle test edilir. Kendi postanızla eğitilen bir model daha iyi sonuç verir: onu mbox dosyalarından, Maildir'lerden veya veri kümelerinden eğitin, ölçün ve "spam bildir" düğmelerinden öğrenmesini sağlayın.
| Ayrılmış iletiler | İletiler | Kesinlik | Duyarlılık | Yanlış pozitifler |
|---|---|---|---|---|
| İngilizce | 6.564 | %100,0 | %97,1 | %0,0 |
| Rusça | 1.682 | %100,0 | %97,4 | %0,0 |
| İtalyanca | 1.389 | %98,1 | %85,3 | %1,8 |
| Almanca | 1.309 | %97,7 | %76,1 | %2,2 |
| İspanyolca | 1.281 | %97,5 | %82,6 | %2,6 |
| Tümü | 13.840 | %99,2 | %85,1 | %0,6 |
Yalnızca sınıflandırıcı, herkese açık eğitim verisinden ayrılan her onuncu ileti üzerinde. Emin olunamayan iletiler kaçırılmış sayılır. Almanca, İtalyanca ve İspanyolca, etiketleri gürültülü yapay veri kümelerinden gelir. Paketle gelen model hakkında
Forward Email için geliştirildi
Forward Email ileti içeriğinin günlüğünü tutmaz, bu yüzden postayı dışarıdaki bir filtreleme hizmetine gönderemezdi. Spam Scanner kendi sunucularınızda çalışır, aksi yapılandırılmadıkça hiçbir yere bir şey göndermez ve postayı bir insan okumadan her kararını açıklar. Forward Email ve yükseltme
Gizlilik odaklı e-posta hizmeti Forward Email tarafından geliştirilen bir proje.
