يبدو تشفير VPS كأنه أمر واحد فقط — cryptsetup luksFormat، وانتهى الأمر — ثم يفشل بهدوء في تقديم ما ظنّ الناس أنهم حصلوا عليه. فعلى جهاز تستأجره، يوجد مُراقب افتراضي (hypervisor) تحت نواتك مباشرة، لذا فإن نموذج التهديد ليس هو ذاته الذي صُمم من أجله تشفير القرص الكامل. هذا الدليل هو النسخة الصريحة: ما الذي يهزمه LUKS فعليًا على VPS، وما الذي لا يهزمه، ومساران للنشر يعملان فعلًا، وكيفية فك قفل جذر مشفّر عبر SSH حتى لا تُقفَل خارج خادمك أبدًا.
ما الذي يمنحك إياه التشفير فعليًا على خادم مستأجر
يحمي تشفير القرص الكامل البيانات أثناء السكون (data at rest). هذه العبارة تحمل معنى كبيرًا، وعلى VPS يستحق الأمر التوضيح: ما هي اللحظات التي تُحسب سكونًا وما لا يُحسب كذلك — فالفجوة بين الاثنين هي حيث تنهار معظم التوقعات.
العتاد المسحوب من الخدمة
تتعطل الأقراص، وتُستبدل، وتغادر الرف. حجم LUKS على قرص ميت هو مجرد كتلة من الضجيج بالنسبة لمن يتعامل معه لاحقًا. يحل التشفير هذه الحالة بالكامل.
حجم مفصول أو منسوخ
إذا سُحب حجم من نسختك (instance)، أو استُنسخ، أو أُخذت منه صورة أثناء إيقاف تشغيل الجهاز، فالناتج نص مشفّر (ciphertext) ورأس (header) — لا ملفاتك.
جهاز قيد التشغيل
بمجرد فتح الحجم، يعيش المفتاح الرئيسي في ذاكرة النواة. الوصول على مستوى المُراقب الافتراضي (hypervisor) قادر من حيث المبدأ على بلوغه. يرفع التشفير التكلفة هنا؛ لكنه لا يُغلق الباب.
أخطاؤك الخاصة
الذاكرة التبادلية (swap) غير المشفرة، والنسخ الاحتياطية النصية الصريحة، والسجلات المكتوبة قبل الوصل (mount)، كلها تقع خارج الحاوية. معظم التسريبات الحقيقية من الخوادم المشفرة تحدث هنا، لا عبر خوارزمية التشفير.
قل الحد بصوت مسموع حتى تخطط حوله: أثناء كون الحجم مفكوك القفل، يكون المفتاح في ذاكرة RAM على عتاد لا تملكه. LUKS على VPS إجابة قوية عن الوصول دون اتصال (offline)، وإجابة جزئية عن الوصول أثناء التشغيل. اقرنه بولاية قضائية تثق بها فعلًا — راجع /offshore-hosting — بدلًا من معاملته كبديل عنها.
اختر الشكل قبل أن تكتب أي أمر
أربعة ترتيبات تغطي كل احتياج حقيقي تقريبًا. اختيار الترتيب الخاطئ يكلّفك إعادة تثبيت كاملة، لذا احسم الأمر هنا بدلًا من منتصف الطريق.
المسار A — تشفير حجم بيانات على خادم يعمل بالفعل
هذه هي النسخة التي يريدها معظم الناس فعلًا: عشر دقائق من العمل، بلا إعادة تثبيت، وكل ما يهم ينتهي به المطاف داخل الحاوية. أضف حجمًا ثانيًا أولًا — على خطة /storage يكون ذلك هو القرص الكبير؛ وعلى /vps عادي يمكنك إضافة واحد وقت النشر.
- 1
حدّد الجهاز المستهدف
نفّذ lsblk وتأكد أن الجهاز الذي توشك على تهيئته هو الفارغ فعلًا. يدمّر luksFormat كل ما هو موجود عليه ولا يوجد تراجع.
- 2
أنشئ حاوية LUKS2
يطلب منك cryptsetup luksFormat --type luks2 /dev/vdb كتابة YES بأحرف كبيرة، ثم تعيين عبارة مرور. اختر عبارة تستطيع إعادة كتابتها بشكل صحيح على وحدة تحكم بلا سجل تاريخي وبلا عرض للأحرف (echo).
- 3
افتحه وأنشئ نظام ملفات
ينشئ cryptsetup open /dev/vdb cryptdata المسار /dev/mapper/cryptdata. ثم نفّذ mkfs.ext4 /dev/mapper/cryptdata واوصله (mount) حيث ستعيش البيانات، مثلًا /srv/data.
- 4
قرّر كيف سيُفكّ قفله عند الإقلاع
إما أن تكتب عبارة المرور بعد كل إعادة إقلاع، أو تضيف ملف مفتاح (keyfile) عبر cryptsetup luksAddKey وتخزّنه على الجذر. ملف المفتاح مريح وأضعف بشكل قاطع — كن واضحًا بشأن المقايضة التي تقوم بها.
- 5
اربط crypttab وfstab
أضف التعيين إلى /etc/crypttab باستخدام UUID= بدلًا من اسم الجهاز، ثم اربط الوصل من /etc/fstab مع nofail حتى لا يعلّق فشل فك القفل عملية الإقلاع أبدًا.
إذا كان ملف المفتاح موجودًا على الجذر غير المشفّر، فكن دقيقًا بشأن ما تملكه فعليًا: الحجم محمي ضد قرص يغادر الرف أو يُفصل عن نسختك (instance)، وليس ضد نسخة من الجهاز الافتراضي بأكمله — لأن تلك النسخة تحتوي على المفتاح نفسه. أي حماية أقوى تتطلب أن تأتي عبارة المرور من خارج الخادم.
المسار B — جذر مشفّر من ISO مخصص
حين يكون المطلوب ألا يوجد أي شيء قابل للقراءة على الجهاز أثناء إيقاف تشغيله، يجب أن يكون الجذر نفسه داخل LUKS. وهذا يعني تثبيتًا جديدًا يُدار من وحدة التحكم، لدى مزوّد يتيح لك إقلاع ISO خاص بك.
- 1
أقلع المثبِّت من وحدة التحكم
اوصل ISO خاصًا بـ Debian أو Ubuntu من نوع netinst بصفته ISO مخصصًا، وأدر عملية التثبيت عبر VNC أو المنفذ التسلسلي (serial). لا شيء من هذا يعمل عبر SSH — إذ لا يوجد بعد نظام تتصل به.
- 2
استخدم التقسيم الموجَّه مع LVM مشفّر
يترك المثبِّت مساحة /boot صغيرة صريحة، لأن شيئًا ما يجب أن يعمل قبل فتح الحجم، ويضع الجذر والذاكرة التبادلية داخل حاوية LUKS واحدة.
- 3
اختر عبارة مرور يمكنك كتابتها دون رؤية
ستعيد كتابتها عبر SSH عند كل إعادة إقلاع بلا عرض للأحرف وبلا إكمال تلقائي. عبارة مرور من خمس كلمات تتفوق هنا على خليط عشوائي من الرموز.
- 4
أعدّ فك القفل عن بُعد قبل أن تسجّل الخروج
سيبقى الجذر المشفّر حديثًا واقفًا عند موجّه عبارة المرور إلى الأبد بعد إعادة الإقلاع التالية. اضبط فك القفل عن بُعد ضمن الجلسة نفسها، بينما لا تزال وحدة التحكم أمامك.
على الخطط بذاكرة 1–2 GB من RAM، قد يطلب اشتقاق المفتاح الافتراضي عبر Argon2id ذاكرة أكبر مما يملكه initramfs، فيفشل فك القفل عند الإقلاع حتى لو كانت عبارة المرور صحيحة. حدّد سقفًا لذلك وقت التهيئة عبر cryptsetup luksFormat --pbkdf-memory 262144، أو افحص رأسًا موجودًا عبر cryptsetup luksDump قبل أن تثق بنسخة صغيرة لإعادة الإقلاع دون إشراف.
فك القفل عن بُعد عبر SSH باستخدام dropbear-initramfs
يحتاج الجذر المشفّر إلى عبارة مرور قبل أن يوجد نظام التشغيل أصلًا. يضع dropbear-initramfs خادم SSH صغيرًا جدًا داخل initramfs حتى تتمكن من تزويدها من أي مكان — وهذا هو الفارق بين خادم مشفّر وجهاز مشفّر لا فائدة منه إطلاقًا (brick).
- 1
ثبّت الحزمة
apt install dropbear-initramfs. تندمج هذه الحزمة في عملية توليد initramfs، وتُعاد بناؤها تلقائيًا مع كل صورة نواة (kernel) مستقبلية.
- 2
فوّض مفتاحًا واحدًا، وأمرًا واحدًا فقط
ضع مفتاحك العام في /etc/dropbear/initramfs/authorized_keys — وعلى Debian 11 وما قبله في /etc/dropbear-initramfs/authorized_keys. أضف بادئة للسطر: no-port-forwarding,no-agent-forwarding,no-x11-forwarding,command="cryptroot-unlock" حتى لا يمنح مفتاح مسروق أكثر من موجّه فارغ.
- 3
امنح initramfs اتصال شبكة
يعمل DHCP حيث يوفّره المزوّد؛ وإلا فأضف معطى ثابتًا ip=ADDRESS::GATEWAY:NETMASK::eth0:off إلى GRUB_CMDLINE_LINUX ونفّذ update-grub. أنهِ بتنفيذ update-initramfs -u -k all حتى يصل التغيير إلى الصورة.
- 4
اختبر إعادة إقلاع كاملة قبل أن تعتمد عليها
أعد الإقلاع مع إبقاء وحدة تحكم المزوّد مفتوحة في نافذة أخرى، اتصل، أدخل عبارة المرور، وراقب استمرار الإقلاع. مسار فك قفل لم يُختبر ليس ميزة، بل انقطاع مستقبلي مؤجَّل.
يحمل initramfs مفتاح مضيف SSH خاصًا به، مختلفًا عن ذلك الذي يقدّمه النظام بعد إقلاعه، لذا سيحذّرك عميلك من تغيّر مفتاح المضيف عند كل إعادة إقلاع. شغّل dropbear على منفذ منفصل عبر DROPBEAR_OPTIONS في /etc/dropbear/initramfs/dropbear.conf، أو اتصل باستخدام ssh -o HostKeyAlias=box-initramfs، ودوّن كلا البصمتين.
إدارة المفاتيح هي حيث يفشل تشفير القرص عادة
خوارزمية التشفير ليست الحلقة الضعيفة، ولم تكن كذلك يومًا. كل كارثة قابلة للتعافي مرتبطة بـ LUKS ترجع في النهاية إلى مفتاح أو رأس، لذا عاملهما كبنية تحتية.
- خذ نسخة احتياطية من الرأس فورًا — cryptsetup luksHeaderBackup /dev/vdb --header-backup-file luks-header.img — واحفظها بعيدًا عن الخادم. رأس تالف بسبب أمر dd واحد غير حذر يعني فقدانًا دائمًا للبيانات حتى مع عبارة مرور مثالية.
- استخدم فتحتين (slots). يمنحك LUKS2 32 فتحة: عبارة مرورك في واحدة، ومفتاح استرداد عشوائي طويل في أخرى محفوظ في مدير كلمات مرور. الاكتفاء بفتحة واحدة هو نقطة فشل وحيدة تفرضها على نفسك.
- بدّل المفاتيح بالترتيب الصحيح على جهاز عن بُعد — أضف المفتاح الجديد عبر luksAddKey، تحقق من أنه يفتح الحجم، ثم احذف القديم عبر luksKillSlot. لا تعكس الترتيب أبدًا.
- احتفظ بعبارة المرور وبتفاصيل اتصال الخادم في مكانين منفصلين. لا ينبغي لملاحظة واحدة مخترَقة أن تسلّم العنوان والمفتاح معًا.
ما الذي يكلّفه التشفير من الأداء
العبء الإضافي حقيقي لكنه غير محسوس عادة. قِسه على الجهاز الذي تملكه فعليًا بدلًا من الوثوق باختبار أداء من عقد آخر.
الأجزاء التي ينساها الناس
حجم مشفّر يتسرب حوله نص صريح من أطرافه هو شعور زائف بالأمان، وهو أسوأ من انعدامه. أغلق هذه النقاط الخمس قبل أن تعتبر المهمة منتهية.
- الذاكرة التبادلية (Swap). يمكن لقسم swap غير مشفّر أن يحتفظ بشظايا من أي شيء مرّ عبر الذاكرة. شفّره بمفتاح عشوائي جديد عند كل إقلاع عبر إدخال /dev/urandom في /etc/crypttab.
- السجلات المكتوبة قبل الوصل. أي شيء يُسجَّل بينما لا يزال الحجم المشفّر مغلقًا ينتهي به المطاف على الجذر الصريح. وجّه سجلات التطبيقات وقواعد البيانات إلى مسار داخل الحاوية.
- النسخ الاحتياطية. نسخ محتويات حجم مشفّر إلى تخزين كائنات نصي صريح يُبطل التمرين برمّته. شفّر النسخة الاحتياطية بشكل مستقل عبر restic أو borg أو age، واحتفظ بتلك المفاتيح في مكان آخر.
- اللقطات (Snapshots). تلتقط لقطة المزوّد القرص، لا ذاكرة RAM لديك، لذا يبقى حجم LUKS نصًا مشفرًا بداخلها — لكن كل ما تُرك على الجذر غير المشفّر يُلتقط تمامًا كما كان.
- Discard. تمرير علم discard عبر LUKS يُبقي trim الخاص بـ NVMe يعمل، لكنه يكشف أي الكتل غير مستخدمة، مما يسرّب مدى امتلاء نظام الملفات وشكله التقريبي. اختره عن قصد، لا بنسخ إعداد جاهز.
أين لا يزال المضيف مهمًا
التشفير هو الطبقة التي تتحكم بها: فهو يحدد مدى تكلفة قراءة بياناتك بمجرد إيقاف تشغيل الجهاز أو خروج قرص من المبنى. أما الطبقة المحيطة به — من يستطيع إجبار الوصول إلى العتاد، وما هي السجلات التي تربط الخادم بك — فتخص المزوّد وولايته القضائية. لدينا 15 موقعًا، ستة منها ولايات قضائية من فئة الخصوصية؛ يسردها /locations، ويتناول /offshore-hosting ما الذي يتغيّر فعليًا مع ذلك.
ثلاث قدرات لدى المزوّد تحدد ما إذا كانت المسارات أعلاه متاحة أصلًا: إقلاع ISO مخصص، الذي بدونه يستحيل المسار B؛ ووصول إلى وحدة تحكم خارج النطاق لإعادة الإقلاع حين لا يعود فك القفل عن بُعد إلى العمل؛ وتسجيل لم يربط الجهاز بهويتك القانونية من الأساس. كل خطة /offshore-vps وخطة /storage هنا تُقلع ISO مخصصًا، وتوفّر وصولًا إلى وحدة التحكم، وتُدفع تكلفتها من رصيد عملات رقمية مدفوع مسبقًا بلا KYC — بحيث لا يجلس قرص مشفّر فوق سجل ورقي يحمل اسمك أصلًا. يقدّم /guides شرحًا صريحًا لما يستطيع المضيف رؤيته وما لا يستطيع.
قائمة تحقق النشر
- حدّد التهديد أولًا: الأقراص المسحوبة من الخدمة، والأحجام المفصولة، والصور دون اتصال، هي ما يجيب عنه التشفير — أما المُراقب الافتراضي العامل فلا.
- شفّر حجم بيانات (المسار A) إذا كان الخادم يعمل بالفعل؛ وأعد التثبيت من ISO مخصص (المسار B) فقط حين يجب تشفير الجذر نفسه.
- استخدم LUKS2 مع aes-xts-plain64، وحدّد سقفًا لذاكرة Argon2id على أي خطة أقل من 2 GB من RAM.
- عبارة مرور في فتحة مفتاح واحدة، ومفتاح استرداد عشوائي طويل في أخرى، كلاهما محفوظ بعيدًا عن الخادم.
- خذ نسخة احتياطية من رأس LUKS قبل كتابة أول بايت من بيانات حقيقية.
- dropbear-initramfs على منفذ غير افتراضي، بالمفتاح فقط، ومقيَّد بأمر cryptroot-unlock.
- اختبر دورة كاملة من إعادة الإقلاع وفك القفل مع إبقاء وحدة تحكم المزوّد مفتوحة بجانبك.
- نسخ احتياطية مشفّرة خارج الموقع، بالإضافة إلى تمرين استعادة واحد — النسخة الاحتياطية غير المختبرة أمنية، لا نسخة احتياطية.
هل يمنع تشفير القرص مزوّد الاستضافة من قراءة بياناتي؟
أثناء السكون، نعم: بمجرد إيقاف تشغيل الجهاز، يصبح الحجم نصًا مشفرًا ولم تغادر عبارة المرور رأسك قط. أما أثناء عمل الخادم مع فتح الحجم، فيكون المفتاح الرئيسي في ذاكرة RAM على عتاد يديره المزوّد. يغلق التشفير كل مسار دون اتصال — الأقراص المسحوبة من الخدمة، والأحجام المفصولة، والصور الباردة — ويرفع تكلفة الباقي. إنه يكمّل ولاية قضائية جديرة بالثقة بدلًا من أن يحل محلها.
هل يمكنني تشفير VPS موجود دون إعادة تثبيته؟
حجم بيانات منفصل، نعم، خلال نحو عشر دقائق — وهذا هو المسار A أعلاه. أما نظام الملفات الجذري، فواقعيًا لا. يستطيع cryptsetup reencrypt تحويل نظام ملفات في مكانه، لكن انقطاع اتصال أو حادث طاقة في منتصف العملية على جهاز عن بُعد يترك خادمًا غير قابل للإقلاع وليلة طويلة. إعادة التثبيت من ISO مخصص أسرع وأكثر أمانًا بكثير.
كم يكلّف LUKS من الأداء؟
أقل مما يتوقع معظم الناس. مع AES-NI، يكلّف AES-XTS بضع نقاط مئوية على أحمال العمل المختلطة النموذجية، ويُبلّغ cryptsetup benchmark على نواة EPYC حديثة عن عدة GB/s. الحالة الظاهرة هي الإدخال/الإخراج المتسلسل أحادي الخيط مقابل NVMe سريع، حيث يمكن لنواة واحدة أن تتشبّع قبل أن يصل القرص إلى ذلك. اختبر أداء نسختك الخاصة بدلًا من التخمين.
ماذا يحدث إذا نسيت عبارة المرور؟
تضيع البيانات. لا توجد آلية استرداد، ولا مفتاح رئيسي لدى المزوّد، ولا تذكرة دعم فني تُبطل ذلك — وهذه الخاصية هي بيت القصيد في التصميم. احمِ نفسك بفتحة مفتاح ثانية تحمل مفتاح استرداد عشوائيًا، وبنسخة احتياطية من رأس LUKS محفوظة في مكان آخر غير الخادم.
هل تشغيل SSH داخل initramfs أمر محفوف بالمخاطر؟
إنه تعرّض صغير ومفهوم جيدًا. يعمل dropbear فقط خلال الثواني التي تسبق وجود نظام ملفاتك الجذري، ويقبل المفاتيح العامة فقط، ويمكن تقييده بأمر إجباري واحد لا يفعل شيئًا سوى طلب عبارة مرور. على منفذ غير افتراضي، مع تدوين مفتاح مضيف initramfs بشكل منفصل، تكون المخاطرة العملية ضئيلة مقارنة بيقين أن تُقفَل خارج خادمك بدونه.


