السلام عليكم و رحمة الله و بركاته
هذا الموضوع يفترض أن يأتي منذ فترة و لكن بسبب بعض الظروف اضطررت للابتعاد عن الكتابة و المواضيع التقنية في اللينوكس لفترة…
سأتحدث هنا عن عمل سيرفر بريد إلكتروني في اللينوكس، و لن تكون التوزيعة التي سأعتمد عليها هذه المرة فيدورا، بل سأستخدم أبنتو 10.4، و سأعتمد على Postfix كوسيط نقل البريد و Dovecot كوسيط تسليم البريد، و لكن قبل أن أبدأ طبعا لابد من نظرة سريعة على كل من الاسمين السابقين…
في النهاية سأقوم بعمل ملحق أتحدث فيه بالتفصيل عن Postfix و Dovecot لأن الكلام الذي سيكون هنا لن يكفي لتوضيح النظامين…
-
Postfix:
هو وسيط نقل البريد أو Mail Transfer Agent و هو أحد البرامج المشهورة، تم تطويره ليكون أسهل من الـ SendMail في التثبيت و الإعداد… (لمعلومات عن Sendmail اذهب هنا: http://en.wikipedia.org/wiki/Sendmail) تم إصدار أول نسخة منه في عام 1998 تحت رخصة IBM العمومية (راجع هذه الصفحة لمعلومات عن الرخصة: http://en.wikipedia.org/wiki/IBM_Public_License) و لازال مستمرا حتى اليوم بالتطور من قبل صاحب المشروع الأصلي “Wietse Venema” و بعض المساهمين الآخرين معه…
من أهم مميزاته:
- دعم Transport Layer Security و هذا يعني استخدام الـ Certificates
- يدعم تنسيفي صندوق البريد MBox و MailDir (سأتخدث عنها لاحقا في درس إعداد Dovecot)
- متوافق مع كل الأنظمة Unix-Like و هو العميل الإفتراضي في Ubuntu و NetBSD
- يجوي مناعة فريدة ضد الـ Buffer overflow (انظر هنا لمعرفة ما هذا: http://en.wikipedia.org/wiki/Buffer_overflow)
- البنية الخاصة بالنظام عبارة عن عدة خدمات متصلة تعمل مع بعضها بأقل قدر ممكن من الصلاحيات (chrooted سأتحدث عن هذا المصطلح في ملحق في النهاية بإذن الله) و بالتالي لو تعرضت أي خدمة من هذه الخدمات لأي مشكلة فلن يؤثر ذلك على بقية النظام، أو نظام التشغيل، و تكون النتائج فقط تصيب الخدمة المصابة
كيف يعمل Postfix:
الشكل السابق يعطي فكرة مبسطة عن كيفية عمل Postfix أثناء استقبال البريد، و يمكن تلخيص العملية كالتالي:
- عند وصول بريد من الشبكة، يتم استقباله عبر الخدمة الخاصة بسيرفر smtp و هي هنا smtpd أو qmqpd لكي يتم إزالة تشكيل بروتوكولات smtp أو qmqp ليتم استخراج معلومات الـ Header و المرسل و المستقبلين و باقي معلومات الرسالة…
- بعذ استخراج المعلومات المرسلة يتم إرسال الرسالة إلى خدمة cleanup و هي الخدمة المسؤولة عن معالجة الرسائل الواردة و إرسالها إلى مستودع الرسائل الواردة incoming، و إبلاغ الخدمة المسؤولة عنه بوجود رسائل جديدة…
- في حال تم استقبال رسالة من مصدر محلي على الشبكة (عميل متصل عبر LAN مثلا) فإن الرسالة يتم استقبالها عبر خدمة sendmail (ليست سيرفر البريد الآخر sendmail إنما هذه خدمة مستقلة عنه…) و يتم استخراج المعلومات من الرسالة و تسليمها إلى خدمة postdrop التي وظيفتها إرسال الرسالة إلى مستودع maildrop الذي تنتظر الرسالة فيه حتى تقوم خدمة pickup بحملها و تسليمها إلى cleanup التي سترسلها إلى مستودع الرسائل الواردة incoming…
- في حال تم استلام رسالة من مصدر داخلي (أي من نفس مكونات السيرفر) مثل أن تقوم خدمة bounce بإرسال رسالة للمستخدم تخبره بأن رسالته لم تصل مثلا، فإن التسليم يكون إلى خدمة cleanup مباشرة…
- عند وصول الرسالة إلى خدمة cleanup تقوم هذه الخدمة بإعادة تنسيق العناوين و الـ Headers و تقوم بنقل الرسالة إلى مستودع الرسائل الواردة incoming و تقوم بإعلام خدمة إدارة المستودع qmgr بوجود رسالة جديدة ليتم بعدها الانتقال إلى المرحلة الثانية من العمل و هو توصيل الرسالة إلى المستقبل النهائي، و هذا ما سأتحدث عنه في القسم التالي…
- كما تلاحظون من الشكل في الأعلى، فإن خدمة qmgr المسؤولة عن إدارة المستودع تقع في المنتصف و بالتالي فهي تمثل الأساس في عملية تسليم البريد في Postfix فهي تقوم بالاتصال بالخدمات الأخرى المسؤولة عن تسليم البريد للمستخدم، مثل smtp و local و الخدمات الأخرى الموجودة في الشكل…
- يوجد خدمتين مهمتين أيضا، و هما discard و error، و وظيفة كل منهما يدل عليها الاسم، فوظيفة error هي رفض تسليم البريد و عرض الخطأ المسبب لذلك، و discard تتجاهل البريد بسبب معين (كرسائل سبام مثلا)…
- خدمة qmgr متصلة بمستودعين: active و deferred، وظيفة active هي تخزين الرسائل التي تم نقلها له و فتحها من أجل تحديد وجهتها النهائية، و بالتالي نقلها للمستلم، و هذا المستودع محدود في السعة مقابل incoming و deferred و ذلك لمنع حدوث حمل زائد على الذاكرة الخاصة بالنظام في حال كان هناك حمل زائد على السيرفر… بالنسبة لمستودع deferred فهو يحوي الرسائل التي لن يتم تسليمها أو الرسائل الكبيرة التي لو تم إدخالها في مستودع active فإنها ستسبب بطء في عمل الخدمة…
- تقوم خدمة qmgr بإرسال طلب تسليم إلى الخدمتين smtp و lmtp (انظر هنا لمعلومات عن LMTP: http://en.wikipedia.org/wiki/Local_Mail_Transfer_Protocol) و تقوم بعمل استعلامات عن عنوان MX الخاص بالمجال الذي يحوي المستلم، و في حال وجدت استجابة، يتم تحديث ملفات الرسائل في المستودع و تحديد أسماء المستلمين التي سيتم تسليم الرسائل لهم، و إذا لم تحصل استجابة من السيرفر يتم إرسال أمر إلى qmgr بأن التسليم سيتم لاحقا للعنوان الذي تم عمل استعلام عنه، و يتم وضع علامة عليه للمحاولة مرة أخرى…
- في النهاية الخدمة تقوم بتوصيل الرسالة إلى المجال الهدف… و هنا يأتي دور Dovecot كعميل تسليم البريد…

-
Dovecot:
تم إنشاء هذا النظام ليكون أداؤه خفيف و لا يستهلك قدر كبير من موارد النظام، بالإضافة إلى الاهتمام بالجانب الأمني منه أيضا، تم إصدار أو نسخة من هذا النظام في عام 2002 و قام بكتابته Timo Sirainen و تم إضافة عدة مساهمات من أشخاص عدة أيضا في المشروع…
من أهم المميزات:
- الدعم لتنسيقات صندوق البريد القياسية: mbox و maildir (سأتحدث عنها لاحقا)
- يحوي آلية ذاتية لاكتشاف الأخطاء التي تحدث في الفهرسة و تصخيخها ذاتيا
- يحاول المطورون جعله بسيطا و مفهوما في التعامل معه، فرسائل الخطأ تم جعل عباراتها بسيطة ليسهل فهمها على المدراء و معرفة الحل لها…
- يعتبر المطور أي مشكلة تحدث في النظام Bug و يجب عمل تصحيح لها، و لهذا لا يتم ترك أي مشكلة بدون حل…
- يمكن للنظام العمل في بيئات الـ Cluster و NFS
- يحوي على عدة طرق و آليات للتصريح و السماح للمستخدمين
- إذا وجدت فيه اي ثغرة أمنية… مبروك لقد حصلت على 1000 يورو
كيف يعمل النظام:
عند إرسال رسالة إلى عميل نقل البريد (MTA أو Mail Transfer Agent) مثل Postfix هنا، عبر استخدام بروتوكول الـ SMTP، سيقوم الـ MTA بمعالجة الرسالة و تحديد مستقبلها، و عمل بعض الاستعلامات على المجال المرتبط بالمستقبل لتحديد عنوان السيرفر الخاص به، ثم سيقوم بإرسال تلك الرسالة إلى الـ MTA الموجود على ذلك السيرفر، نكون بذلك قد انتهينا من العمل مع MTA و هو هنا Postfix لدينا…
و جاء الآن دور عميل تسليم البريد (MDA أو Mail Delivery Agent) و هو هنا كما ذكرنا Dovecot…
فما الذي يحصل عندما يبدأ Dovecot بالعمل؟
عمل Dovecot في الواقع هو تمكين عميل البريد الخاص بك مثل Thunderbird من الوصول لبريدك المخزن على السيرفر، و عرضه و قراءته… في الواقع هو غير مسؤول عن استقبال البريد لك… الذي يستقبل البريد كما تم الحديث عنه هو Postfix…
و بالتالي فإن وجود بنية MTA تعمل كـ Postfix مثلا ضروري لوجود MDA كـ Dovecot…
البنية الأساسية في إعداد Dovecot تكمن في النقاط التالية:
- نوع تخزين البريد (MBox أو MailDir)
- موقع تخزين البريد
- قائمة المستخدمين
- قائمة كلمات المرور
—
تابع أجزاء الدرس:
إنشاء سيرفر بريد إلكتروني في لينوكس – الجزء الأول (مقدمة + مقدمة عن Postfix و Dovecot)
إنشاء سيرفر بريد إلكتروني في لينوكس – الجزء الأول – ملحق (نظرة سريعة على المحرر vi)
إنشاء سيرفر بريد إلكتروني في لينوكس – الجزء الثاني (تثبيت نظام Ubuntu Server و إعداد الشبكة)
إنشاء سيرفر بريد إلكتروني في لينوكس – الجزء الثالث (إعداد Postfix و Dovecot للعمل داخليا)






تم الحصول على الشكلين السابقين عن بنية Postfix من الموقع الأصلي:
http://www.postfix.org/OVERVIEW.html
The both figures about Postfix architecture have been brought form the main website:
http://www.postfix.org/OVERVIEW.html
أنا جاهز في حال وجود أي استفسار أو تعليق، فقط ضع ملاحظة…
[...] سيرفر بريد إلكتروني جاري العمل عليه (الجزء الأول | [...]
[...] [...]
[...] سيرفر بريد إلكتروني جاري العمل عليه (الجزء الأول – ملحق | الجزء الثاني [...]
[...] [...]
[...] [...]
[...] [...]
[...] [...]
[...] [...]
[...] [...]