بديل لـ SpamAssassin يتحدث بروتوكول spamd
يجيب Spam Scanner ببروتوكول spamdالخدمة الخلفية لـ SpamAssassin. يتحدث بروتوكولها spamc وExim وHaraka وغيرها من عملاء SpamAssassin. الخاص بـ SpamAssassin، فتستخدمه البرامج المكتوبة لـ SpamAssassin دون تغيير: spamc، وشرط spam في Exim، وإضافة spamassassin في Haraka، وغيرها.
استبدله#
sudo systemctl disable --now spamd # or spamassassin
npm install --global spamscanner
spamscanner spamd --port 783 --authspamc -c < message.eml # prints the score, exits 1 for spam
spamc -R < message.eml # the report, one line per test
spamc < message.eml # the message with X-Spam-* headersيجيب عن CHECK وSYMBOLS وREPORT وREPORT_IFSPAM وPROCESS وHEADERS وPING، وعن TELL للتعلّم مع --allow-tell. تشغّل الاختبارات الشاملة للمشروع أداة spamc الأصلية من SpamAssassin عليه.
ما يبقى كما هو#
- الترويسات:
X-Spam-FlagوX-Spam-ScoreوX-Spam-LevelوX-Spam-Statusبصيغة SpamAssassin، فتستمر قواعد Sieve وprocmail وبرامج البريد الحالية في العمل. - درجة بعتبة 5، مكوّنة من اختبارات مسمّاة لها نقاط:
BAYES_99وRBL_ZENوSPF_FAILوDKIM_PASSوغيرها. - يمكن تغيير درجات كل اختبار باسمه.
ما يختلف#
- اللغات. تُقسَّم الكلمات وفق قواعد Unicode، فتُقرأ الصينية واليابانية والتايلاندية كلمات لا سلسلة طويلة واحدة، ويُلغى أولًا التنكّر مثل المحارف غير المرئية أو الحروف السيريلية في الكلمات اللاتينية.
- التصيّد الاحتيالي. تُفحص النطاقات المشابهة والروابط المخادعة وأسماء العلامات التجارية في أسماء العرض دون قواعد إضافية.
- المرفقات تُعرَّف من بايتاتها: الملف التنفيذي المعاد تسميته إلى
.pdfيبقى ملفًا تنفيذيًا. - النماذج اللغوية. يمكن إرسال الحالات المتقاربة إلى نموذج محلي عبر Ollamaبرنامج ينزّل النماذج اللغوية المفتوحة ويشغّلها على جهازك، مع واجهة HTTP API. أو إلى نموذج مستضاف.
- Node.js. أمر
npm installواحد، أو ملف تنفيذي مستقل؛ لا وحدات Perl ولا تحديثات قواعد لإدارتها.
لا يشغّل Spam Scanner ملفات قواعد SpamAssassin، وصيغة قاعدة بيانات Bayes الخاصة به مختلفة: درّبه من البريد نفسه باستخدام spamscanner train.
Exim#
spamd_address = 127.0.0.1 783
# in the DATA ACL
warn spam = nobody:true
add_header = X-Spam-Score: $spam_score
defer spam = nobody:true
condition = ${if >={$spam_score_int}{150}}
message = Message rejected as spam