المدونة

تعزيز حاويات Docker للاستضافة متعددة المستأجرين: دليل عزل خطوة بخطوة

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

ملخص

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

المشكلة الواقعية مع الحاويات متعددة المستأجرين

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

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

الخطوة 1: تشغيل الحاويات كمستخدم غير جذر

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

FROM ubuntu:22.04
RUN useradd -m appuser
USER appuser

تحذير: تتطلب بعض العمليات (مثل ربط المنافذ أقل من 1024) امتيازات الجذر. في هذه الحالات، استخدم العلامة --cap-add لمنح الصلاحية المطلوبة فقط، مثل --cap-add=NET_BIND_SERVICE، ولا تزال تقوم بتشغيل العملية تحت مستخدم غير جذر.

لمزيد من المعلومات حول العزل الأساسي، راجع دليلنا حول تحقيق العزل الحقيقي متعدد المستأجرين في Docker.

الخطوة 2: إسقاط جميع صلاحيات Linux وإضافة ما تحتاجه فقط

تقسم صلاحيات Linux امتيازات الجذر إلى وحدات صغيرة. تأتي حاويات Docker مع مجموعة افتراضية من الصلاحيات التي تكون متساهلة جدًا للاستضافة متعددة المستأجرين. قم بإسقاط الكل وإضافة فقط ما يتطلبه تطبيقك:

docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE my-app

الصلاحيات الشائعة التي يجب تجنبها: SYS_ADMIN (الهروب من الحاوية)، NET_RAW (التنصت على الحزم)، SYS_PTRACE (تصحيح العمليات). استخدم docker run مع --security-opt no-new-privileges لمنع تصعيد الامتيازات عبر ثنائيات setuid.

الخطوة 3: تثبيت نظام الملفات الجذر للقراءة فقط

غالبًا ما يكتب المهاجمون نصوصًا ضارة إلى نظام ملفات الحاوية. من خلال جعل نظام الملفات الجذر للقراءة فقط، يمكنك منع ذلك:

docker run --read-only --tmpfs /tmp:rw,noexec,nosuid,size=64m my-app

يقوم --tmpfs بإنشاء نقطة تثبيت مؤقتة قابلة للكتابة للأدلة مثل /tmp و /var/run. يمنع العلم noexec التنفيذ من تلك النقطة. يجبر هذا الأسلوب المهاجمين على المرور عبر أدلة قابلة للكتابة، والتي يمكنك مراقبتها.

الخطوة 4: فرض حدود الموارد باستخدام cgroups

يمكن للحاويات غير المحددة تنفيذ هجمات حجب الخدمة عن طريق استنفاد ذاكرة المضيف أو وحدة المعالجة المركزية. استخدم قيود وقت تشغيل Docker:

docker run --memory=512m --memory-swap=512m --cpus=0.5 --pids-limit=100 my-app
  • --memory و --memory-swap يضعان حدودًا صارمة (بدون مبادلة).
  • --cpus يحدد وحدة المعالجة المركزية.
  • --pids-limit يمنع هجمات fork عن طريق تحديد عدد العمليات.

تحذير: يتم فرض حدود الموارد بواسطة cgroups، لكنها لا تمنع تسرب البيانات عبر الشبكة. اجمعها مع عزل الشبكة (الخطوة التالية).

الخطوة 5: تقسيم الشبكات باستخدام شبكات Docker المخصصة

افتراضيًا، تشارك حاويات Docker شبكة جسر. في إعداد متعدد المستأجرين، يجب عزل مكدس الشبكة لكل مستأجر. أنشئ شبكة مخصصة لكل مستأجر:

docker network create tenant-alpha --internal
docker run --network tenant-alpha my-app

استخدم العلم --internal لمنع الوصول إلى الإنترنت الصادر، ثم كشف المنافذ الضرورية فقط عبر -p. لمزيد من التقسيم المتقدم للشبكة، فكر في تأمين تطبيقات الويب بعزل Docker.

تحذير: تمنع الشبكات الداخلية الاتصال المباشر بين الحاويات عبر المستأجرين، لكن تسريبات DNS لا تزال ممكنة إذا كنت تستخدم شبكة المضيف. التزم بشبكات الجسر أو الشبكات التراكبية.

الخطوة 6: تطبيق ملفات تعريف Seccomp و AppArmor

يقوم Seccomp بتصفية استدعاءات النظام، ويفرض AppArmor (أو SELinux) ضوابط الوصول الإلزامية. يوفر Docker ملف تعريف seccomp افتراضيًا يمنع استدعاءات النظام الخطيرة مثل clone بعلامات معينة. لعزل أكثر صرامة، أنشئ ملف تعريف مخصص:

docker run --security-opt seccomp=./custom.json --security-opt apparmor=docker-default my-app

يمكنك إنشاء ملف تعريف أساسي باستخدام docker run --rm -it --security-opt seccomp=unconfined my-app strace -c -S time ثم تقليصه. تحذير: يمكن لملفات التعريف المقيدة بشدة تعطيل الوظائف المشروعة. اختبر جيدًا في بيئة الاختبار.

الخطوة 7: النظر في العزل الهجين مع الأجهزة الافتراضية

إذا كان المستأجرون لديك يتطلبون عزلًا مطلقًا (مثل الصناعة المنظمة)، فقم بتشغيل الحاويات داخل جهاز افتراضي خفيف الوزن. توفر أدوات مثل Sysbox أو Kata Containers فصلًا على مستوى الأجهزة دون التضحية بسرعة الحاويات. هذا هو النهج المستخدم في Enhanced Container Isolation (ECI) من Docker. على الرغم من أن الحمل الإضافي أعلى من الحاويات العارية، إلا أنه أقل بكثير من الأجهزة الافتراضية الكاملة لكل عبء عمل.

لمزيد من المعلومات حول اختيار مستوى العزل المناسب، اقرأ تصميم بنية Docker متعددة المستأجرين.

تجميع كل شيء: قائمة مراجعة التعزيز

  1. أنشئ الحاويات بمستخدم غير جذر.
  2. أسقط جميع الصلاحيات، أضف المطلوب فقط.
  3. ثبت نظام الملفات للقراءة فقط مع نقاط تثبيت مؤقتة قابلة للكتابة.
  4. ضع حدودًا للذاكرة ووحدة المعالجة المركزية وعدد العمليات.
  5. أنشئ شبكات Docker معزولة لكل مستأجر.
  6. طبق ملفات تعريف seccomp و AppArmor مخصصة.
  7. قيم الحاويات الهجينة مع الأجهزة الافتراضية للاحتياجات عالية الأمان.

الخاتمة

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

Sources (5)