المحتويات

المقدمة

معلومات أساسية

الحل

كيف يمكنكم منع حلقات البريد من الحدوث؟

المقدمة

يوضح هذا المستند كيفية تعريف حلقة بريد في جهاز أمان البريد الإلكتروني (ESA).

معلومات أساسية

يمكن الإشارة إلى حلقات البريد بواسطة رسائل لها نفس معرف الرسالة التي تم حقنها أكثر من 3 مرات. قد تتسبب حلقات البريد في ظهور أعراض على وحدة المعالجة المركزية (CPU) عالية وبطء التسليم ومشاكل في الأداء ككل. عادة ما تشير معرفات الرسائل التي يتم حقنها أكثر من مرة إلى تكرار، لكن في بعض الأحيان يتم حقنها أكثر من مرة بسبب مشاكل، أو قد يكون مرسال بريد عشوائي يستمر في حقن نفس رسالة البريد العشوائي بنفس معرف الرسالة.

بشكل أكثر نموذجية، تحدث حلقة بريد بسبب مشكلة في البنية الأساسية للبريد الإلكتروني التي ترسل نفس الرسالة أو مجموعة الرسائل التي تتسابق حول الشبكة من خادم البريد إلى خادم البريد بلا نهاية.  في حين أن هذه الرسائل يمكن أن تبقى ترفيهية بهذه الطريقة لفترة طويلة جدا، إلا أنها ليست شيئا جيدا لعرض نطاق الشبكة أو تكلفة معالجة ESA التي تتكبدها.

الحل

التعرف على حلقة البريد، إذا كنت تشك أن هذا قد يكون المشكلة، هو عادة سهل جدا على الرغم من أنك ستحتاج إلى كرات العين.

قم بتسجيل الدخول إلى واجهة سطر الأوامر (CLI) من النظام وأصدر أحد هذه الأوامر، أو كليهما عندما تجد أفضل الفوائد:

grep "Subject" mail_logs

grep "Message-ID" mail_logs

خاصة للبحث على معرف الرسالة، إذا رأيت تواجدات متكررة لنفس المعرف تماما فعندها ستعرف أن لديك حلقة بريد.  ومع ذلك، فإن هذا لا يكفي في بعض الأحيان، لأن أحد خوادم البريد التي تعيد تجميع نفس الرسالة قد تقوم بتغيير رأس معرف الرسالة أو إزالته بشكل مفيد.  لذا إذا لم تحصل على أي شيء يمكن التعرف عليه مع التحقق من معرف الرسالة، فحاول التحقق من الموضوع.

بافتراض أنك تمكنت من العثور على رسالة التكرار بواسطة معرف الرسالة، فستحتاج أيضا إلى العثور على معلومات أخرى حول الرسالة واتصالها الأصلي (ICID). بافتراض معرف الرسالة ومنتصف في نفس سطر السجل يمكنك تنفيذه:

grep -e "MessageID_I_found" -e "MID 123456" mail_logs

بافتراض الإخراج الناتج هناك، يمكنك العثور على ICID و DCID ذي الصلة وإجراء ما يلي:

grep -e "MessageID_I_found" -e "MID 123456" -e "ICID 1234567" -e "DCID 2345767" mail_logs

يجب أن يكون لديك الآن الاتصال الكامل - معاملة الرسائل ويمكنك معرفة مصدرها وأين تم تسليمها (إذا كان قد حدث ذلك بالفعل). بمجرد أن تقوم بتعريف رسالة التكرار، فإن خطوتك التالية هي إلقاء نظرة على الرسالة بحيث يمكنك إصلاح المشكلة.  بدون إصلاح سبب التكرار الحلقي، من المحتمل أن تستمر هذه الرسالة وغيرها في التكرار أو أن المشكلة سوف تحدث مرة أخرى قريبا.

إنشاء عامل تصفية رسالة مماثل لهذا:

loganddrop_looper:

if(header("Message-ID") == "MessageID_I_found") {

archive("looper");

drop();

}

قم الآن بإلزام هذا التغيير وأصدر هذا الأمر للتحقق من الرسالة:

tail looper

مع المعلومات التي يمكنك الحصول عليها حول النظام البعيد من خلال النظر إلى سجلات البريد والمعلومات الأخرى التي يمكنك الحصول عليها من خلال النظر إلى الرسالة نفسها، يجب أن تكون قادرا على تحديد موقع مشكلتك.

كيف يمكنكم منع حلقات البريد من الحدوث؟

وفي البيئات المعقدة قد يكون هذا صعبا - فهم كيفية تدفق البريد في بيئتك وكيف سيؤثر تغيير الشبكة الجديد، إما على ESA أو إلى جهاز آخر، على حركة مرور البيانات هذه كمفتاح. أحد الأسباب الشائعة لحلقات تكرار البريد هو إزالة رأس "تم الاستلام".  سيقوم ESA تلقائيا باكتشاف حلقة بريد وإيقافها عند رؤية 100 رأس مستلم في رسالة، ولكن يسمح ESA بإزالة هذا الرأس، الذي غالبا ما يؤدي إلى حلقة بريد غير صحيحة.  ما لم يكن هناك سبب *حقيقي* جيد، يرجى عدم إيقاف تشغيل الرأس المتلقى أو التسبب في إزالته.

أدناه مثال عامل تصفية يمكن أن يساعد في منع أو إصلاح حلقة بريد:

External_Loop_Count:

if (header("X-ExtLoop1")) {

if (header("X-ExtLoopCount2")) {

if (header("X-ExtLoopCount3")) {

if (header("X-ExtLoopCount4")) {

if (header("X-ExtLoopCount5")) {

if (header("X-ExtLoopCount6")) {

if (header("X-ExtLoopCount7")) {

if (header("X-ExtLoopCount8")) {

if (header("X-ExtLoopCount9")) {

notify ('joe@example.com');

drop();

}

else {insert-header("X-ExtLoopCount9", "from

$RemoteIP");}}

else {insert-header("X-ExtLoopCount8", "from $RemoteIP");}}

else {insert-header("X-ExtLoopCount7", "from $RemoteIP");}}

else {insert-header("X-ExtLoopCount6", "from $RemoteIP");}}

else {insert-header("X-ExtLoopCount5", "from $RemoteIP");}}

else {insert-header("X-ExtLoopCount4", "from $RemoteIP");}}

else {insert-header("X-ExtLoopCount3", "from $RemoteIP");}}

else {insert-header("X-ExtLoopCount2", "from $RemoteIP");}}

else {insert-header("X-ExtLoop1", "1"); }