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

ثلاثة شروط تحدد الجواب، وهي الدلاء الثلاث التي يمكن أن تحملها الصورة من المواد. رتّبها قبل بناء الصورة، لا بعد نشرها مرتين.

حدّد أولًا أي العمليتين تنفّذ

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

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

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

مدخلات قابلة لإعادة الاستخدام، والهوية والصلاحية، وحالة النشر

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

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

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

ما يجب منحه للعقدة الجديدة، ومن يمنحه

العقدة المُدارة باستقلال ينبغي أن تتلقى اعتمادها الخاص عبر عملية التسجيل المعتمدة، وأن تتم عملية التوقيع حيث يوجد مفتاح التوقيع لا على المضيف الجديد. سجّل أي هوية يمكن سحبها دون إزعاج العقد الأخرى؛ فإن كان الجواب «كلها»، فالتصميم فيه هوية واحدة تتنكّر في هيئة هويتين.

قيم الشبكة تستحق المعاملة ذاتها. اختر مجموعة وعنوان استماع ومجموعة مسارات مدفوعة لا تتصادم مع البوابة القائمة، واكتبها في مدخلات التزويد لا في الصورة. المدخل قابل للمراجعة؛ والصورة ليست كذلك.

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

openssl x509 -in /etc/openvpn/server/server.crt -noout -subject -issuer -dates
find /etc/openvpn -name '*.key' -o -name '*.pem' | head -20

الأمر الأول يخبرك أي هوية تقدّمها العقدة فعلًا ومن وقّعها. والثاني جرد بدئي لا دليل: فقد تعيش المواد الخاصة خارج ذلك الدليل، أو داخل قاعدة بيانات تطبيق، أو في طبقة لقطة لم يعد نظام الملفات العامل يظهرها.

ما تحمله نسخة الصورة بهدوء

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

افحص محتوى الصورة ومدخلات التزويد كسؤالين منفصلين. الصورة تجيب عن «ما داخل هذا الأثر»، بينما تجيب المدخلات عن «ما ستصبح عليه هذه النسخة عند أول إقلاع». الصورة النظيفة مع سكربت تمهيدي يجلب مفتاحًا مشتركًا تجيب عن السؤال الأول جيدًا وعن الثاني بشكل سيئ.

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

فحوص القبول قبل الإنتاج

قبل أن تستقبل العقدة حركة المرور، أكّد أربعة أشياء: الهوية التي تقدّمها، والعملاء الذين ستقبلهم، والموارد المسموح لها بالوصول إليها، ومسار العودة للعناوين التي تسلّمها.

systemctl status openvpn-server@lab --no-pager
ss -lunp 'sport = :1194'
ip -4 route show table all | grep -F '10.90.'

ثم افحص الحالة السلبية، وهي التي تلتقط الحوادث: هل لدى العقدة الجديدة وصول إداري أو وصول عميل كان مقصودًا للأصل؟ قد يحمل إعداد منسوخ مدخل عميل إضافيًا، أو مسار إدارة موروثًا، أو توجيه دفع كان منطقيًا على المضيف الأول.

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

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