يوضح لك هذا الدليل كيفية تثبيت شهادة SSL/TLS على Qmail، وهو عامل نقل البريد الذي كتبه في الأصل D. J. Bernstein. العملية هي نفسها التي يستخدمها Qmail منذ سنوات: بناء ملف PEM واحد يحتوي على المفتاح الخاص، وشهادة الخادم، والسلسلة الوسيطة، ووضعه في /var/qmail/control/servercert.pem، ثم إعادة تشغيل Qmail.
قبل أن تبدأ: Qmail هو عامل نقل بريد قديم (legacy MTA)
لم يتم تحديث Qmail نفسه منذ إصدار qmail-1.03 الأصلي في عام 1998. وضع D. J. Bernstein الكود في الملكية العامة في عام 2007 ولكنه لم يستأنف التطوير. النسخة المجتمعية المعروفة netqmail بلغت إصدارها النهائي 1.06 في عام 2007 وبقيت دون صيانة لأكثر من عقد. النسخة الحديثة النشطة الخلف هي notqmail (الإصدار الحالي 1.09، مايو 2024)، والتي تحمل إصلاحات الأخطاء والتوافق مع الأنظمة الحديثة مع بقائها متوافقة بشكل مباشر مع النسخة الأصلية.
ومما يهم بنفس القدر لهذا الدليل: نسخة qmail الأساسية لا تحتوي على دعم أصلي لـ SSL/TLS. يُضاف TLS عبر أحد مسارين خارجيين:
- تصحيح qmail-tls من Frederik Vermeulen، الذي يضيف STARTTLS إلى qmail-smtpd ويقرأ الشهادة من مسار ثابت مبرمج مسبقًا: /var/qmail/control/servercert.pem. تشحن معظم حزم qmail الحديثة (بما في ذلك إصدارات netqmail وnotqmail، وتوزيعة s/qmail، والعديد من حزم البائعين) بهذا التصحيح أو ما يعادله.
- stunnel أمام qmail-smtpd لتغليف الاتصال بـ TLS على المنفذ 465 (SMTPS). يعمل هذا مع أي إصدار من qmail لأن إنهاء TLS يحدث خارج Qmail.
إذا كنت تدير نشرًا حاليًا من qmail، فإن الخطوات أدناه لا تزال قابلة للتطبيق. إذا كنت تبني خادم بريد جديدًا من الصفر، فضِّل استخدام Postfix أو OpenSMTPD بدلًا من ذلك: كلاهما يتمتع بدعم TLS أصلي جيد الصيانة وفرق أمان نشطة. لدينا دليل منفصل حول كيفية تثبيت شهادة SSL على Postfix.
إنشاء رمز CSR لـ Qmail
إذا كنت قد أنشأت CSR بالفعل واستلمت ملفات SSL من هيئة الشهادات (CA)، تخطَّ إلى تثبيت شهادة SSL على Qmail.
CSR هو اختصار لـ Certificate Signing Request (طلب توقيع الشهادة): وهو مقطع نصي مشفّر يحتوي على تفاصيل نطاقك ومؤسستك. تقدمه إلى هيئة الشهادات (CA) لتتحقق من طلبك وتصدر الشهادة. يُنشئ إنشاء CSR أيضًا المفتاح الخاص المطابق، والذي يبقى على خادمك ويكون مطلوبًا للتثبيت. لديك خياران:
- استخدم مولّد CSR الخاص بنا لإنشاء CSR تلقائيًا.
- اتبع دليلنا التفصيلي حول كيفية إنشاء CSR لـ Qmail.
افتح ملف CSR في أي محرر نصوص عادي وانسخ المقطع كاملًا، بما في ذلك سطري BEGIN CERTIFICATE REQUEST و END CERTIFICATE REQUEST، إلى حقل CSR في نموذج طلبك. احتفظ بملف المفتاح الخاص في مكان آمن: ستدمجه في ملف PEM في القسم التالي.
تثبيت شهادة SSL على Qmail
بعد التحقق، ترسل لك هيئة الشهادات أرشيف ZIP يحتوي على ملفات SSL: الشهادة الأساسية (شهادة الخادم) وواحدة أو أكثر من الشهادات الوسيطة (CA). استخرج الأرشيف على خادمك، ثم اتبع الخطوات أدناه.
الخطوة 1: دمج المفتاح والشهادة والسلسلة في ملف PEM واحد
يقرأ تصحيح qmail-tls (وما يعادله في netqmail وnotqmail وs/qmail) كل ما يحتاجه لإنهاء TLS من ملف PEM واحد. اجمع الملفات بهذا الترتيب: المفتاح الخاص أولًا، ثم شهادة الخادم، ثم سلسلة الشهادات الوسيطة (CA). الشهادة الجذرية ليست مطلوبة (فالعملاء يثقون بها بالفعل). من الدليل الذي يحتوي على ملفاتك المستخرجة، شغِّل:
cat yourdomain.key yourdomain.crt yourdomain.ca-bundle > servercert.pem
إذا سلمتك هيئة الشهادات الشهادات الوسيطة كملفات منفصلة بدلًا من ملف .ca-bundle واحد، فأدرج كل واحدة منها بعد شهادة الخادم، بحيث تكون الشهادة الورقية (leaf) أولًا والشهادة الوسيطة المصدرة من الجذر أخيرًا:
cat yourdomain.key yourdomain.crt intermediate1.crt intermediate2.crt > servercert.pem
افتح الملف الناتج في محرر نصوص للتأكد من البنية. يجب أن يبدو هكذا، مع علامات حقيقية من خمس شرطات حول كل مقطع:
-----BEGIN RSA PRIVATE KEY-----
(the text of your private key)
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
(the text of your primary SSL certificate)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(the text of the intermediate CA certificate)
-----END CERTIFICATE-----
قد تُعنوَن المفاتيح الأحدث بـ BEGIN PRIVATE KEY بدلًا من BEGIN RSA PRIVATE KEY؛ كلا الشكلين مقبول. يجب ألّا يكون المفتاح مشفرًا بعبارة مرور، لأن qmail-smtpd يحمّله عند بدء التشغيل دون أي طلب تأكيد. إذا أصدرت هيئة الشهادات شهادة ECDSA، فسيكون مقطع المفتاح BEGIN EC PRIVATE KEY؛ ولا يتغير أي شيء آخر.
الخطوة 2: نقل الملف إلى دليل التحكم في Qmail
اسم الملف ومساره ثابتان بواسطة تصحيح qmail-tls. انقل ملف PEM المدمج إلى دليل التحكم في Qmail وشدّد أذوناته، لأنه يحتوي على مفتاحك الخاص:
sudo mv servercert.pem /var/qmail/control/servercert.pem
sudo chmod 600 /var/qmail/control/servercert.pem
sudo chown root:qmail /var/qmail/control/servercert.pem
يعتمد المالك والمجموعة على المستخدم الذي يشغّل qmail-smtpd على نظامك. في تثبيت netqmail أو notqmail الأساسي، يكون ذلك عادةً qmaild أو مجموعة qmail، لذا يعمل root:qmail مع الوضع 600. في إعداد مبني على vpopmail، يعمل qmail-smtpd كـ vpopmail، فاستخدم:
sudo chown vpopmail:vchkpw /var/qmail/control/servercert.pem
sudo chmod 640 /var/qmail/control/servercert.pem
على أي حال، الهدف واحد: يجب أن تكون عملية qmail-smtpd قادرة على قراءة الملف، ولا يُسمح لأي شيء آخر بذلك.
الخطوة 3: التعديل للإصدارات المخصصة
تبحث معظم نسخ qmail في الموقع الافتراضي، لكن بعضها يستخدم متغيرات بيئة بدلًا من ذلك. طابق إصدارك:
- نسخة qmail الأساسية مع تصحيح qmail-tls (netqmail / notqmail / حزم البائعين): لا حاجة لأي تكوين إضافي. يقرأ qmail-smtpd /var/qmail/control/servercert.pem تلقائيًا. لجعل qmail-smtpd يعرض STARTTLS في استجابة EHLO، يجب ضبط متغير البيئة UCSPITLS في نص تشغيل qmail-smtpd (يكون عادةً في /var/qmail/supervise/qmail-smtpd/run): صدِّر UCSPITLS=”” قبل سطر qmail-smtpd. ولإلزام التشفير قبل المصادقة، اضبط أيضًا FORCE_TLS=1.
- s/qmail مع ucspi-ssl: مسار الشهادة غير مبرمج مسبقًا بشكل ثابت. اضبط متغيرات البيئة هذه في نص تشغيل qmail-smtpd (أو في غلاف tcpserver / sslserver المطابق): CERTFILE لشهادة الخادم، و KEYFILE للمفتاح الخاص (يمكن أن يشيرا إلى ملف PEM المدمج نفسه)، و CERTCHAINFILE للشهادات الوسيطة. راجع وثائق s/qmail لمعرفة أسماء التوجيهات الدقيقة في إصدارك.
- واجهة stunnel (SMTPS على المنفذ 465): وجّه توجيه cert في stunnel إلى /var/qmail/control/servercert.pem واجعل exec فيه يشغّل qmail-smtpd. لا يحتاج هذا المسار إلى تصحيح qmail-tls على الإطلاق؛ إذ ينتهي TLS عند stunnel.
إذا لم تكن تعرف أي تصحيح استُخدم لبناء qmail-smtpd الخاص بك، تحقق من الملف الثنائي:
strings /var/qmail/bin/qmail-smtpd | grep -iE 'tls|starttls|servercert'
إذا شاهدت إشارات إلى STARTTLS أو servercert.pem أو UCSPITLS، فإن الملف الثنائي يحتوي على تصحيح qmail-tls مضمّنًا فيه.
الخطوة 4: إعادة تشغيل Qmail
يقرأ Qmail الشهادة عند بدء العملية، لذا يلزم إعادة تشغيل qmail-smtpd. في معظم التثبيتات التي تستخدم نصوص التحكم المرفقة:
sudo qmailctl restart
إذا كانت توزيعتك تغلّف Qmail في خدمة systemd بدلًا من ذلك، استخدم:
sudo systemctl restart qmail
في إعداد daemontools / runit، أرسل إشارة TERM إلى qmail-smtpd عبر svc بدلًا من ذلك:
sudo svc -t /service/qmail-smtpd
راقب السجل (يكون عادةً في /var/log/qmail/smtpd/current) بحثًا عن أخطاء أثناء بدء التشغيل. يُعد ملف PEM بصيغة خاطئة أو الملكية غير الصحيحة السبب الأكثر شيوعًا في رفض qmail-smtpd تفعيل TLS.
اختبار تثبيت SSL
تأكد من أن Qmail يعرض STARTTLS ويقدّم الشهادة الصحيحة باستخدام OpenSSL. استبدل mail.yourdomain.com باسم مضيف خادم بريدك:
openssl s_client -starttls smtp -connect mail.yourdomain.com:25 -servername mail.yourdomain.com </dev/null
| openssl x509 -noout -issuer -subject -dates
يجب أن تطبع المخرجات موضوع شهادتك (الاسم الشائع)، وجهة الإصدار (هيئة الشهادات)، وتواريخ الصلاحية. إذا كنت قد أعددت SMTPS عبر stunnel على المنفذ 465 بدلًا من ذلك، فحذف -starttls smtp واتصل بالمنفذ 465 مباشرة:
openssl s_client -connect mail.yourdomain.com:465 -servername mail.yourdomain.com
ابحث عن Verify return code: 0 (ok) في أسفل عملية التفاوض. إذا رأيت خطأ في السلسلة، فهذا يعني أن الشهادات الوسيطة مفقودة من servercert.pem: أضفها وأعد تشغيل qmail-smtpd. للحصول على تقرير كامل حول الشهادة والسلسلة ودعم البروتوكول، شغّل SSL Checker الخاص بنا على اسم مضيف بريدك.
الأسئلة الشائعة
من الملف /var/qmail/control/servercert.pem. هذا المسار مبرمج مسبقًا بشكل ثابت في تصحيح qmail-tls الذي يضيف STARTTLS إلى qmail-smtpd، ويُستخدم نفس المسار في كل إصدار شائع من qmail (netqmail وnotqmail وحزم البائعين). يجب أن يحتوي الملف على المفتاح الخاص، وشهادة الخادم، والسلسلة الوسيطة، بهذا الترتيب. تُعد s/qmail مع ucspi-ssl الاستثناء: فهي تقرأ متغيرات البيئة CERTFILE و KEYFILE و CERTCHAINFILE بدلًا من ذلك.
المفتاح الخاص أولًا، ثم شهادة الخادم (الورقية)، ثم شهادة (أو شهادات) هيئة الشهادات الوسيطة. الشهادة الجذرية ليست مطلوبة، لأن عملاء البريد يثقون بها بالفعل. بناء بسطر واحد يكفي:cat yourdomain.key yourdomain.crt yourdomain.ca-bundle > servercert.pem
إذا كان الترتيب خاطئًا، سيفشل qmail-smtpd في تحميل الشهادة عند بدء التشغيل ولن يُعرض TLS. تحقق من السجل الموجود في /var/log/qmail/smtpd/ إذا اشتبهت في ذلك.
ليس بمفرده. إصدار qmail-1.03 الأصلي من عام 1998 لا يحتوي على أي دعم لـ SSL أو TLS. يُضاف TLS إمّا عبر تصحيح qmail-tls (المُجمَّع في ملف qmail-smtpd الثنائي، ويضيف STARTTLS على المنفذين 25 و587) أو عبر تشغيل stunnel أمام qmail-smtpd لـ SMTPS على المنفذ 465. تأتي معظم حزم qmail الحديثة مع تصحيح qmail-tls مطبقًا بالفعل، لذا لا تحتاج غالبًا إلى تصحيح المصدر بنفسك.
لم يُحدَّث Qmail الأصلي (qmail-1.03) منذ عام 1998. أطلقت أول نسخة مجتمعية، netqmail، إصدارها الأخير (1.06) في عام 2007. الخلف الحديث النشط هو notqmail، الذي أصدر الإصدار 1.09 في مايو 2024 ويستمر في تقديم إصلاحات الأخطاء وتصحيحات التوافق مع الأنظمة الحديثة. بالنسبة لخوادم البريد الجديدة، يفضّل معظم المشغّلين استخدام Postfix أو OpenSMTPD بدلًا من ذلك، وكلاهما يتمتع بدعم TLS أصلي ونشط الصيانة.
ثلاثة أسباب شائعة. أولًا، متغير البيئة UCSPITLS غير مُصدَّر في نص تشغيل qmail-smtpd: اضبط UCSPITLS=”” (يمكن أن تكون القيمة فارغة) قبل سطر qmail-smtpd وأعد تشغيل الخدمة. ثانيًا، تم بناء ملف qmail-smtpd الثنائي دون تصحيح qmail-tls: تأكد من ذلك بتشغيل strings /var/qmail/bin/qmail-smtpd | grep -i tls. ثالثًا، /var/qmail/control/servercert.pem مفقود، أو غير قابل للقراءة من قِبل مستخدم qmail-smtpd، أو ذو صيغة خاطئة؛ تحقق من الأذونات وترتيب مقاطع PEM.
اتصل بمنفذ SMTP باستخدام OpenSSL واقرأ الشهادة التي يقدّمها Qmail عبر STARTTLS:openssl s_client -starttls smtp -connect mail.yourdomain.com:25 -servername mail.yourdomain.com </dev/null | openssl x509 -noout -issuer -subject -dates
يطبع هذا الأمر الموضوع وجهة الإصدار وتواريخ الصلاحية. بالنسبة لـ SMTPS عبر stunnel على المنفذ 465، حذف علامة -starttls smtp. تأكد من أن جهة الإصدار تطابق هيئة الشهادات الخاصة بك وأن عملية التفاوض تنتهي بـ Verify return code: 0 (ok).
وفِّر 10% على شهادات SSL عند الطلب اليوم!
إصدار سريع، وتشفير قوي، وثقة في المتصفح بنسبة 99.99%، ودعم مخصص، وضمان استرداد المال خلال 25 يومًا. رمز القسيمة: SAVE10


