السلام عليكم و رحمة الله و بركاته
باعتبار هذا قسم الشبكات الخاص بلينوكس، فينقصه الكثير حتى يصبح متكاملا، و لجعله متكاملا، لابد من المواضيع التي تركز على الشبكات و تقنياتها...
هذا الموضوع هو أول موضوع من عدة مواضيع أعمل عليها في تقنيات شبكات لينوكس، و أحببت مشاركتكم به بعد أن وصلت لنصفه تقريبا، حيث سأضع ما وصلت له، و سأكمل عليه أولا بأول،
بدون إطالة، سأتحدث عن بناء سيرفر بريد إلكتروني باستخدام Postfix و Dovecot معا، على نظام Ubuntu Server ثم بعده على Redhat (سأستخدم فيدورا لهذا الغرض...)...
-------------------------------------------
الجزء الأول/ مقدمة عن Postfix و Dovecot:
- Postfix:
من أهم مميزاته:
- دعم Transport Layer Security و هذا يعني استخدام الـ Certificates
- يدعم تنسيفي صندوق البريد MBox و MailDir (سأتخدث عنها لاحقا في درس إعداد Dovecot)
- متوافق مع كل الأنظمة Unix-Like و هو العميل الإفتراضي في Ubuntu و NetBSD
- يجوي مناعة فريدة ضد الـ Buffer overflow (انظر هنا لمعرفة ما هذا: http://en.wikipedia....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....ansfer_Protocol) و تقوم بعمل استعلامات عن عنوان MX الخاص بالمجال الذي يحوي المستلم، و في حال وجدت استجابة، يتم تحديث ملفات الرسائل في المستودع و تحديد أسماء المستلمين التي سيتم تسليم الرسائل لهم، و إذا لم تحصل استجابة من السيرفر يتم إرسال أمر إلى qmgr بأن التسليم سيتم لاحقا للعنوان الذي تم عمل استعلام عنه، و يتم وضع علامة عليه للمحاولة مرة أخرى…
- في النهاية الخدمة تقوم بتوصيل الرسالة إلى المجال الهدف… و هنا يأتي دور Dovecot كعميل تسليم البريد…
- Dovecot:
من أهم المميزات:
- الدعم لتنسيقات صندوق البريد القياسية: 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)
- موقع تخزين البريد
- قائمة المستخدمين
- قائمة كلمات المرور
-----------------------
سنحتاج في القسم التالي للتعامل مع محرر نصوص vi لمعلومات سريعة عنه انظر هذا الموضوع:
















