ubuntu server guide كيف تستخدم Spamassassin وClamAV على خادوم أوبنتو لترشيح البريد الإلكتروني واكتشاف الرسائل المزعجة


عبد اللطيف ايمش

واحدة من أكبر المشاكل مع البريد الإلكتروني اليوم هي مشكلة البريد غير المرغوب فيه (Unsolicited Bulk Email أو اختصارًا UBE) المعروف أيضًا بالبريد العشوائي (SPAM)؛ قد تحتوي هذه الرسائل أيضًا على فيروسات أو أشكالٍ أخرى من البرمجيات الخبيثة؛ ووفقًا لبعض التقارير، تشغل هذه الرسائل حيزًا كبيرًا من البريد الإلكتروني المُرسَل عبر الإنترنت.

ubuntu-server-email-spam-spamassassin-cl

سيشرح هذا القسم طريقة دمج Amavisd-new، و Spamassassin، و ClamAV مع عميل نقل البريد Postfix؛ يمكن أيضًا التحقق من البريد عبر تمريره خلال مرشحات خارجية؛ هذه المرشحات يمكنها في بعض الأحيان تحديد إذا ما كانت الرسالةُ عشوائيةً دون الحاجة إلى معالجتها ببرمجيات تستهلك الموارد؛ أشهر هذه المرشحات هي opendkim و python-policyd-spf.

  1. Amavisd-new هو برنامج مُغلِّف (wrapper) يستطيع استدعاء أي عدد من برامج ترشيح المحتوى لاستكشاف الرسائل العشوائية، وللتصدي للفيروسات ...إلخ.
  2. يستخدم Spamassassin آلياتٍ عدِّة لترشيح البريد اعتمادًا على محتوى الرسالة.
  3. ClamAV هو مضاد فيروسات مفتوح المصدر.
  4. يوفر opendkim ما يسمىMilter (أي Sendmail Mail Filter) إلى المعيار القياسي DKIM (أي DomainKeys Identified Mail).
  5. يُفعِّل python-policyd-spf تحقق SPF (اختصار للعبارة Sender Policy Framework) مع Postfix.

هذه هي آلية جمع القطع السابقة:

  1. تُقبَل رسالة البريد الإلكتروني من Postfix.
  2. تُمرَّر الرسالة إلى أي مرشحات خارجية مثل opendkim و python-policyd-spf في هذه الحالة.
  3. ثم يُعالِج Amavisd-new الرسالة.
  4. ثم يُستخدَم ClamAV لفحص الرسالة؛ إذا حوت الرسالة على فيروس، فسيرفضها Postfix.
  5. ستُحلَّل الرسائل «النظيفة» من Spamassassin للتحقق إذا كانت الرسالة هي رسالة عشوائية؛ ثم يضيف Spamassassin أسطر X-Header ليسمح للبرمجية Amavisd-new بإكمال معالجة الرسالة.

على سبيل المثال، إذا كان «رصيد العشوائية» لرسالة ما أكبر من خمسين بالمئة، فيمكن أن تُزال الرسالة تلقائيًا من الطابور (queue) حتى دون إعلام المتلقي؛ طريقة أخرى للتعامل مع هذه الرسائل هي إيصالهم لعميل مستخدم البريد (MUA) والسماح للمستخدم بأن يتعامل مع الرسالة بما يراه مناسبًا.

التثبيت

راجع درس Postfix لمعلوماتٍ تفصيلية عن تثبيت Postfix.

أدخل الأمرين الآتيين في سطر الأوامر لتثبيت بقية البرمجيات:

sudo apt-get install amavisd-new spamassassin clamav-daemon
sudo apt-get install opendkim postfix-policyd-spf-python

هنالك بعض الحزم الأخرى التي يمكن أن تُدمَج مع Spamassassin لاكتشاف أفضل للرسائل العشوائية:

sudo apt-get install pyzor razor

بالإضافة إلى برمجيات الترشيح الرئيسية، سنحتاج إلى أدوات الضغط لنعالج بعض مرفقات البريد:

sudo apt-get install arj cabextract cpio lha nomarch pax rar unrar unzip zip

ملاحظة: إذا لم يُعثَر على بعض الحزم السابقة، فتأكد من تفعيل مستودع multiverse في ملف ‎/etc/apt/sources.list.

إذا أجريتَ تعديلاتٍ على ذاك الملف، فتأكد من تحديث فهرس الحزم بتنفيذ الأمر sudo apt-get update قبل محاولة التثبيت مرةً أخرى.

الضبط

علينا الآن ضبط كل شيء مع بعضه بعضًا لترشيح البريد.

ClamAV

السلوك الافتراضي لبرمجية ClamAV تناسب احتياجاتنا؛ للمزيد من خيارات الضبط الخاصة ببرمجية ClamAV، راجع ملفات الضبط في ‎/etc/clamav.

أضف المستخدم clamav إلى المجموعة amavis لكي يملك Amavisd-new الوصول الملائم لتفحص الملفات:

sudo adduser clamav amavis
sudo adduser amavis clamav

Spamassassin

يعثر Spamassassin تلقائيًا على المكونات الإضافية ويستخدمها إن توفرت؛ هذا يعني أنه لا حاجة لضبط pyzor و razor.

عدِّل ملف الضبط ‎/etc/default/spamassassin لتفعيل عفريت Spamassassin، عدِّل قيمة ENABLED=0 إلى:

ENABLED=1

ثم ابدأ تشغيل العفريت:

sudo service spamassassin start

Amavisd-new

أولًا، فعِّل استكشاف الرسائل العشوائية ومضاد الفيروسات في Amavisd-new بتعديل الملف ‎/etc/amavis‎/conf.d/15-content_filter_mode:

use strict;

# You can modify this file to re-enable SPAM checking through spamassassin
# and to re-enable antivirus checking.

#
# Default antivirus checking mode
# Uncomment the two lines below to enable it
#

@bypass_virus_checks_maps = (
\%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);

#
# Default SPAM checking mode
# Uncomment the two lines below to enable it
#

@bypass_spam_checks_maps = (
\%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);

1; # insure a defined return

قد تكون إعادة معالجة الرسائل العشوائية فكرةً سيئةً لأن العنوان المُعاد مزيفٌ غالبًا؛ ربما ترغب بتعديل الملف ‎/etc/amavis/conf.d/20-debian_defaults لتضبط ‎$final_spam_destiny إلى D_DISCARD بدلًا من D_BOUNCE، كما يلي:

$final_spam_destiny = D_DISCARD;

وربما ترغب بتعديل قيمة الخيارات الآتية لتعليم (flag) المزيد من الرسائل كرسائل عشوائية:

$sa_tag_level_deflt = -999; # add spam info headers if at, or above that level
$sa_tag2_level_deflt = 6.0; # add 'spam detected' headers at that level
$sa_kill_level_deflt = 21.0; # triggers spam evasive actions
$sa_dsn_cutoff_level = 4; # spam level beyond which a DSN is not sent

إذا كان اسم المضيف للخادوم (hostname) مختلفًا عن سجل MX للنطاق، فربما تحتاج إلى أن تضبط الخيار ‎$myhostname يدويًا؛ وإذا كان الخادوم يستلم البريد لأكثر من نطاق، فيجب تخصيص الخيار ‎@local_domains_acl أيضًا، وذلك بتعديل الملف ‎/etc/amavis/conf.d/50-user:

$myhostname = 'mail.example.com';
@local_domains_acl = ( "example.com", "example.org" );

إذا أردت تغطية أكثر من نطاق، فعليك استخدام ما يلي في ‎/etc/amavis/conf.d/50-user:

@local_domains_acl = qw(.);

يجب إعادة تشغيل Amavisd-new بعد الضبط:

sudo service amavis restart

DKIM Whitelist

يمكن ضبط Amavisd-new ليضيف عناوين من نطاقات معينة مع مفاتيح نطاق (Domain Keys) صالحة إلى القائمة البيضاء (Whitelist)؛ هنالك بعض النطاقات المضبوطة مسبقًا في ‎/etc/amavis/conf.d/40-policy_banks:

هذه بعض الأمثلة لضبط القائمة البيضاء لنطاق:

  • التعليمة ‎'example.com' => 'WHITELIST',‎: ستضيف أي عنوان من النطاق "example.com" إلى القائمة البيضاء.
  • التعليمة ‎'‎.example.com' => 'WHITELIST‎'‎,‎: ستضيف أي عنوان من أي نطاق فرعي للنطاق "example.com" ويملك توقيع صالح (valid signature) إلى القائمة البيضاء.
  • التعليمة ‎'‎.example.com/@example.com' => 'WHITELIST',‎: إضافة أي عنوان من النطاقات الفرعية للنطاق "example.com" الذي يستخدم توقيع النطاق الأب "example.com".
  • التعليمة ‎'‎./@example.com' => 'WHITELIST',‎: يضيف العناوين من توقيع صالح من "example.com" هذا يستخدم عادةً لمجوعات النقاش التي توقَّع رسائلها.

يمكن أن يملك نطاقٌ واحد أكثر من ضبط للقائمة البيضاء؛ عليك إعادة تشغيل amavisd-new بعد تعديل الملف:

sudo service amavis restart

ملاحظة: في هذا السياق؛ عندما يُضاف النطاق إلى القائمة البيضاء، فإن الرسالة لن تحصل على أي فحص من الفيروسات أو الرسائل العشوائية؛ ربما يكون أو لا يكون هذا هو السلوك الذي ترغبه لهذا النطاق.

Postfix

أدخل ما يلي في مِحَث الطرفية لدمج Postfix:

sudo postconf -e 'content_filter = smtp-amavis:[127.0.0.1]:10024'

ثم عدِّل الملف ‎/etc/postfix/master.cf وأضف الأسطر الآتية إلى نهاية الملف:

smtp-amavis     unix    -       -       -       -       2       smtp
        -o smtp_data_done_timeout=1200
        -o smtp_send_xforward_command=yes
        -o disable_dns_lookups=yes
        -o max_use=20

127.0.0.1:10025 inet    n       -       -       -       -       smtpd
        -o content_filter=
        -o local_recipient_maps=
        -o relay_recipient_maps=
        -o smtpd_restriction_classes=
        -o smtpd_delay_reject=no
        -o smtpd_client_restrictions=permit_mynetworks,reject
        -o smtpd_helo_restrictions=
        -o smtpd_sender_restrictions=
        -o smtpd_recipient_restrictions=permit_mynetworks,reject
        -o smtpd_data_restrictions=reject_unauth_pipelining
        -o smtpd_end_of_data_restrictions=
        -o mynetworks=127.0.0.0/8
        -o smtpd_error_sleep_time=0
        -o smtpd_soft_error_limit=1001
        -o smtpd_hard_error_limit=1000
        -o smtpd_client_connection_count_limit=0
        -o smtpd_client_connection_rate_limit=0
        -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_milters

أيضًا أضف السطرين الآتيين مباشرةً بعد خدمة النقل «pickup»:

         -o content_filter=
         -o receive_override_options=no_header_body_checks

هذا سيمنع الرسائل المُولَّدة للتبليغ عن الرسائل العشوائية من تصنيفها كرسائل عشوائية؛ أعد الآن تشغيل Postfix:

sudo service postfix restart

يجب الآن أن يكون ترشيح المحتوى والعثور على الفيروسات مُفعَّلًا.

الاختبار

أولًا، اختبر أن Amavisd-new SMTP يستمع:

telnet localhost 10024
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 [127.0.0.1] ESMTP amavisd-new service ready
^]

وفي ترويسة (header) الرسائل التي تُمرَّر عبر مُرشِّح المحتوى، يجب أن تُشاهِد:

X-Spam-Level: 
X-Virus-Scanned: Debian amavisd-new at example.com
X-Spam-Status: No, hits=-2.3 tagged_above=-1000.0 required=5.0 tests=AWL, BAYES_00
X-Spam-Level: 

ملاحظة: قد تختلف النتائج المعروضة عمَّا سيظهر عندك، لكن من المهم وجود القيدين X-Virus-Scanned و X-Spam-Status.

استكشاف الأخطاء

أفضل طريقة لمعرفة سبب حدوث مشكلة ما هي مراجعة ملفات السجل.

  • لتعليماتٍ عن التسجيل في Postfix راجع الدرس الخاص به.
  • يستخدم Amavisd-new البرمجية Syslog لإرسال الرسائل إلى ‎/var/log/mail.log؛ يمكن زيادة مقدار التفاصيل بإضافة الخيار ‎$log_level إلى ملف ‎/etc/amavis/conf.d/50-user، وضبط القيمة من 1 إلى 5:
$log_level = 2;

ملاحظة: عند زيادة درجة الإسهاب لسجل Amavisd-new، فسيزداد ناتج سجل Spamassassin أيضًا.

  • يمكن زيادة مستوى التسجيل لبرمجية ClamAV بتعديل الملف ‎/etc/clamav/clamd.conf وضبط الخيار الآتي:

LogVerbose true

افتراضيًا، سيُرسِل ClamAV رسائل السجل إلى ‎/var/log/clamav/clamav.log.

ملاحظة: بعد تغيير إعدادات التسجيل للبرمجيات، تذكر أن تعيد تشغيل الخدمة لكي تأخذ الإعدادات الجديدة مفعولها؛ أيضًا تذكر أن تعيد القيمة الافتراضية بعد أن تحل المشكلة.

مصادر

للمزيد من المصادر حول ترشيح البريد، راجع الوصلات الآتية:

ترجمة -وبتصرف- للمقال Ubuntu Server Guide: Mail Filtering.





تفاعل الأعضاء


لا توجد أيّة تعليقات بعد



يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن