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

خصّص بطاقة موارد كاملة لكل عميل

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

أبقِ البطاقة بجانب الإعداد وحدّثها كلما تغيّرت قيمة. التوثيق الذي ينحرف عن الواقع أسوأ من عدمه.

أبقِ مواد الثقة داخل كل عميل

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

المفتاح الخاص بالخادم نفسه ينتمي إلى ملف محمي لكل عميل، لا إلى دليل قوالب يُنسخ مع الإعداد.

افصل الشبكات كما تفصل العمليات

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

ss -lunp | grep -E '1194|1195'
openssl verify -CAfile customer-a/ca.crt customer-a/client.pem

يفصح فحص المستمع عن العملية التي تملك كل منفذ عام، ويُظهر التحقق ما إذا كانت شهادة العميل تتسلسل إلى نقطة الارتكاز المقصودة. لا يُثبت أي من المخرجين أن عميل A لا يستطيع الوصول إلى شبكة B الفرعية، لذا حدّد سياسة المصدر والوجهة ومسارات العودة وأي خدمة مشتركة عن قصد. تعزل فضاءات أسماء الشبكة أو الحاويات سياقات التوجيه وتقلل الخلط العرضي، لكنها ليست حداً كاملاً للمستأجر بحد ذاتها. اختر آلية عزل أقوى عندما يتطلب نموذج التهديد ذلك.

سلّم الإبطال قبل التسليم

نشر الشهادة غير مكتمل حتى يصبح للإبطال مسار تسليم. تحقق من جهة إصدار قائمة إبطال الشهادات (CRL) ونافذة صلاحيتها كجزء من الإدخال.

openssl crl -in customer-a/crl.pem -noout -lastupdate -nextupdate
systemctl status openvpn@customer-a

يُبلّغ فحص CRL عن وقت إصدار القائمة ووقت انتهائها، ويؤكد وضع الخدمة أن النسخة التي تقرأها تعمل. جدّد القائمة وفق جدول سياسة الإصدار حتى عندما لا يُبطَل شيء جديد، لأن قائمة CRL منتهية الصلاحية قد ترفض كل عميل. رقِّ ملفاً كاملاً بدلاً من ترك القراء يصادفون كتابة جزئية، وتحقق من التوقيع قبل النشر. سجّل من يملك الإصدار وتشغيل نقطة النهاية والإيقاف، حتى لا يؤثر إيقاف العميل A في B.

ثم نفّذ زوج القبول: يصل عميل مسموح إلى خدمته الخاصة، ويُرفض اعتماد A لدى مستمع B. هذا هو الحد معبّراً عنه كاختبار.

مقالات ذات صلة