تحصين (Hardening) خوادم Linux
خروج

الدرس 1 من 13 · الأساسيات

نموذج التهديد وسطح الهجوم

30 د Debian 12 الإصدارات Debian 12, Ubuntu 24.04, Rocky 9

الهدف

قبل تقوية (hardening) أي خادم، يجب أن تعرف ما الذي تحميه، وممّن تحميه، ومن أين يمكن للمهاجم أن يدخل. ستخرج من هذا الدرس بطريقة جرد بسيطة ستعيد استعمالها في جميع الدروس التالية.

أهم النقاط

  • التقوية (hardening) تعني نزع كل ما لا يحتاجه النظام وإقفال ما تبقّى. وهي ليست تثبيت « برنامج أمني ».
  • نموذج التهديد (threat model) يجيب عن ثلاثة أسئلة: ما الأصول؟، ما التهديدات؟، ما الإجراءات؟
  • سطح الهجوم (attack surface) هو كل ما يمكن للمهاجم أن يصل إليه: المنافذ المفتوحة، الحسابات، البرامج المثبّتة، الملفات ذات الصلاحيات الواسعة جدًا، والأشخاص.
  • مبدآن يوجّهان هذا التكوين بأكمله: التقليص (minimisation: أشياء أقل = ثغرات أقل) والدفاع في العمق (defense in depth: عدة حواجز مستقلة).
  • نقيس قبل ونقيس بعد: دون جرد أولي، يستحيل إثبات أن الخادم أصبح أكثر أمانًا.

1. لماذا نقوّي الخوادم؟ ثلاث حالات مغربية

مقاولة صغيرة ومتوسطة في الدار البيضاء تبيع عبر الإنترنت. يعمل موقعها على خادم VPS مستأجر. ذات صباح، تعرض الصفحة الرئيسية رسالة قرصان. السبب: إضافة ويب لم تُحدَّث قط، وحساب SSH باسم admin بكلمة المرور Admin2024.

مستشفى في فاس لديه خادم لحجز المواعيد. يحتوي الخادم على أسماء وأرقام هواتف وأسباب الاستشارة. هذه معطيات ذات طابع شخصي بمفهوم القانون 09-08، تحت مراقبة CNDP (اللجنة الوطنية لمراقبة حماية المعطيات ذات الطابع الشخصي). أي تسريب يُحمّل المؤسسة المسؤولية.

بنك في الرباط يخضع لقواعد صارمة: القانون 05-20 المتعلق بالأمن السيبراني وتوجيهات DGSSI (المديرية العامة لأمن نظم المعلومات). يطلب المدقّقون أدلة: إعدادات مكتوبة، سجلات، تقرير تدقيق.

في الحالات الثلاث، ليس السؤال « هل يمكن مهاجمة خادمي؟ » (نعم، سيُهاجَم) بل « كم من الجهد سيبذله المهاجم، وهل سأرى الهجوم؟ ».

2. بناء نموذج تهديد في 15 دقيقة

خذ ورقة، أو ملفًا نصيًا بسيطًا، واملأ ثلاثة أعمدة.

الأصل (ما له قيمة) التهديد (ما قد يحدث) الإجراء (ما أفعله)
قاعدة بيانات الزبائن السرقة عبر حقن SQL حساب SQL محدود، نسخ احتياطية مشفّرة
الوصول عبر SSH التخمين بالقوة الغاشمة (brute force) على كلمات المرور مفاتيح SSH، fail2ban
موقع العرض تشويه الواجهة (defacement) التحديثات، ملفات للقراءة فقط
قرص الخادم عطل أو برنامج فدية (ransomware) نسخة احتياطية خارج الخادم، مُختبَرة

اطرح بعد ذلك سؤال « من؟ »:

  • الروبوت الذي يمسح الإنترنت كله (الأكثر شيوعًا: بعد دقائق قليلة من وضعه على الإنترنت، يتلقّى خادم VPS محاولات SSH)؛
  • المجرم السيبراني الذي يبحث عن خادم يشفّره مقابل فدية؛
  • المطّلع من الداخل (insider): موظف سابق، أو مقدّم خدمة لم يُغلق حسابه قط؛
  • الخطأ البشري: ملف نسخة احتياطية تُرك في مجلد الويب.

تحمي التقوية أساسًا من الأوّلَين ومن الأخير. أما ضد المطّلع من الداخل، فنحتاج إضافة إلى ذلك إلى إجراءات تنظيمية: إغلاق الحسابات عند المغادرة، وتتبّع الأفعال (الدرس 3.2).

3. قياس سطح الهجوم

هذا هو الجرد الأولي الذي يجب القيام به على كل خادم. جميع هذه الأوامر للقراءة فقط: لا تغيّر أي شيء.

# أي نظام، وأي إصدار؟ (مدة الدعم تتوقف على ذلك)
cat /etc/os-release
uname -r                          # إصدار النواة (kernel)

# من يستمع على الشبكة؟ (TCP وUDP، مع البرنامج)
ss -tulpn
#  0.0.0.0:22   ← مفتوح للجميع
#  127.0.0.1:3306 ← محلي فقط (جيد لقاعدة بيانات)

# أي حسابات يمكنها فتح جلسة؟
awk -F: '$7 !~ /(nologin|false)$/ {print $1, $7}' /etc/passwd

# من يمكنه أن يصبح root؟
getent group sudo wheel           # sudo على Debian/Ubuntu، وwheel على Rocky
ls /etc/sudoers.d/

# كم عدد البرامج المثبّتة؟ (كل حزمة ثغرة محتملة)
dpkg -l | grep -c '^ii'           # Debian / Ubuntu
rpm -qa | wc -l                   # Rocky / RHEL

# أي خدمات تنطلق مع تشغيل الجهاز؟
systemctl list-unit-files --state=enabled

# أي برامج تُنفَّذ بصلاحيات مالكها (SUID)؟
find / -xdev -type f -perm -4000 2>/dev/null

احتفظ بهذه المخرجات في مجلد مؤرّخ، مثلًا /root/inventaire/2026-10-19/. في نهاية التكوين، ستعيد الجرد نفسه وتقارن.

4. المبادئ التي توجّه كل قرار

التقليص. الخدمة غير المثبّتة لا يمكن اختراقها. قبل « تأمين » خادم FTP، اسأل نفسك هل ما زال مفيدًا.

أدنى الصلاحيات (least privilege). لكل حساب ولكل خدمة الصلاحيات التي يحتاجها فقط. لا ينبغي لخادم الويب أن يكتب في ملفات PHP الخاصة به.

الدفاع في العمق. جدار ناري (firewall)، إضافة إلى SSH مُقوّى، إضافة إلى fail2ban، إضافة إلى السجلات: إذا سقط حاجز، يصمد الذي يليه.

قابلية التتبّع. ما لا يُسجَّل لم يحدث. دون سجلات، يستحيل شرح حادث للإدارة، أو لـ CNDP، أو لـ maCERT (فريق الاستجابة الوطني التابع لـ DGSSI).

قابلية التراجع. كل تغيير يُدوَّن ويُختبر ويمكن التراجع عنه. لا نقوّي أبدًا خادمًا في الإنتاج دون وحدة تحكّم احتياطية (console) (وصول VNC من المزوّد، أو console الآلة الافتراضية).

5. المراجع المعيارية: لا داعي لإعادة اختراع العجلة

لست وحدك. تنشر عدة هيئات قوائم توصيات:

  • ANSSI (الوكالة الفرنسية): Recommandations de configuration d'un système GNU/Linux (توصيات إعداد نظام GNU/Linux). مجاني، تحت Licence Ouverte (الرخصة المفتوحة)، وباللغة الفرنسية. يصنّف الإجراءات حسب المستوى (أدنى، متوسط، معزّز، عالٍ).
  • CIS Benchmarks (Center for Internet Security): أدلة مفصّلة جدًا لكل توزيعة. قراءتها مجانية، لكن رخصتها تمنع نسخها.
  • DGSSI: تحدّد التوجيهية الوطنية لأمن نظم المعلومات (DNSSI) قواعد للإدارات العمومية وللبنيات التحتية ذات الأهمية الحيوية في المغرب.

يتبع هذا التكوين الروح نفسها ويعلّمك كيف تطبّق هذه الإجراءات، ثم كيف تتحقّق منها باستعمال Lynis (الدرس 4.1).

6. كيف ستجري التطبيقات العملية

تُنجَز التطبيقات العملية على آلتك الافتراضية الخاصة (أبدًا على حاسوبك الشخصي، وأبدًا على خادم في الإنتاج):

sudo ml demarrer hardening-1-1    # يُهيّئ الآلة ويعرض المهام
# … تعمل …
sudo ml verifier                  # يتحقّق من كل مهمة

بعض الدروس تعدّل ملفات حسّاسة (SSH، الجدار الناري). حتى لا تقطع الوصول عن نفسك أبدًا، سنعمل غالبًا على نسخة داخل /root/durcir/، نختبرها قبل تطبيقها. أبقِ دائمًا console الآلة الافتراضية مفتوحة.

حسب الإصدار

النقطة Debian 12 Ubuntu 24.04 Rocky 9
مجموعة المسؤولين sudo sudo wheel
الجدار الناري المرفق لا شيء مفعّل (nftables مثبّت) ufw (غير مفعّل) firewalld (مفعّل)
التحكم الإلزامي في الوصول AppArmor AppArmor SELinux
نهاية الدعم العادي منتصف 2026، ثم LTS حتى 2028 2029 (2034 مع Ubuntu Pro) 2032

أخطاء متكررة

  • التقوية دون جرد: لن تعرف أبدًا ما الذي حسّنته فعلًا، ولا ما الذي أفسدته.
  • نسخ قائمة أوامر وُجدت على الإنترنت دون فهم: إنها أفضل طريقة لقطع SSH عن نفسك أو لتعطيل تطبيق.
  • نسيان الحسابات « المنسية »: مقدّم خدمة غادر وما زال لديه shell نشط هو باب مفتوح. الحساب sync (الـ shell /bin/sync) أمر عادي على Debian.
  • الاعتقاد بأن خادم VPS « جديدًا تمامًا » آمن: صور المستضيفين غالبًا ما تكون فيها المصادقة عبر SSH بكلمة المرور مفعّلة.

التطبيق العملي (Lab)

ستبدأ جرد خادمك:

  1. تدوين النظام وإصداره انطلاقًا من /etc/os-release؛
  2. إغلاق حساب مقدّم خدمة غادر؛
  3. سرد الحسابات التي ما زال بإمكانها فتح جلسة؛
  4. كتابة أول نموذج تهديد لك في ثلاثة أعمدة.

اختبار قصير

  1. ما الأعمدة الثلاثة لنموذج التهديد؟
  2. في مخرجات ss -tulpn، ما الفرق بين 0.0.0.0:3306 و127.0.0.1:3306؟
  3. لماذا تكون الخدمة غير المثبّتة أكثر أمانًا من خدمة مُعدّة جيدًا؟
  4. اذكر مرجعين للتقوية والفرق بين رخصتيهما.
  5. لماذا نحتاج إلى console احتياطية قبل تقوية SSH أو الجدار الناري؟
الأجوبة
  1. الأصل (ما له قيمة)، التهديد (ما قد يحدث)، الإجراء (ما نفعله).
  2. 0.0.0.0:3306 يقبل الاتصالات من جميع الواجهات، وبالتالي ربما من الإنترنت؛ أما 127.0.0.1:3306 فلا يقبل إلا الاتصالات المحلية.
  3. لأنها لا يمكن أن تحتوي على أي ثغرة قابلة للاستغلال: هذا هو مبدأ التقليص.
  4. دليل ANSSI (Licence Ouverte، قابل لإعادة الاستعمال) وCIS Benchmarks (قراءة مجانية، ونسخ ممنوع).
  5. خطأ في الإعداد قد يمنع أي اتصال عبر الشبكة: عندها لا يسمح بالإصلاح إلا الـ console (VNC، console الآلة الافتراضية).

المراجع: دليل ANSSI لـ GNU/Linux (Licence Ouverte)، توثيق Red Hat، صفحات الدليل (man). نص أصلي من MasterLinux.

تمارين تطبيقية

تُنجَز على Debian 12

أنجز هذا التطبيق العملي على جهازك

الطرفية طرفيتك: آلة افتراضية بنظام لينكس (VirtualBox أو VMware أو Hyper-V أو WSL…) أو Docker/Podman. أداة ml تحضّر التمرين وتصحّح عملك، ويُؤكَّد الدرس هنا تلقائيًا.

أنشئ حسابًا مجانيًا للحصول على أمرك الشخصي وتصحيح تطبيقاتك العملية تلقائيًا.

إنشاء حسابي

المهام المطلوبة

  1. اكتب في /root/inventaire/systeme.txt معرّف النظام وإصداره، مفصولين بمسافة، كما يظهران في /etc/os-release (الحقلان ID وVERSION_ID)، مثلًا: debian 12
    عرض تلميححمّل الملف بـ . /etc/os-release ثم echo "$ID $VERSION_ID" > /root/inventaire/systeme.txt
    عرض الحل
    . /etc/os-release && echo "$ID $VERSION_ID" > /root/inventaire/systeme.txt

    التحقق : . /etc/os-release && grep -qx "$ID $VERSION_ID" /root/inventaire/systeme.txt

  2. الحساب ancien_presta يعود إلى مقدّم خدمة غادر المؤسسة. انزع عنه أي shell للدخول (الـ shell /usr/sbin/nologin) واقفل كلمة مروره.
    عرض تلميحusermod -s /usr/sbin/nologin ancien_presta ثم usermod -L ancien_presta (أو passwd -l)
    عرض الحل
    usermod -s /usr/sbin/nologin -L ancien_presta

    التحقق : getent passwd ancien_presta | cut -d: -f7 | grep -qx /usr/sbin/nologin && getent shadow ancien_presta | cut -d: -f2 | grep -q '^!'

  3. اكتب في /root/inventaire/comptes-shell.txt القائمة المرتّبة (sort) للحسابات التي لا ينتهي الـ shell الخاص بها لا بـ nologin ولا بـ false، اسم واحد في كل سطر.
    عرض تلميحawk -F: '$7 !~ /(nologin|false)$/ {print $1}' /etc/passwd | sort > … — لا تتفاجأ برؤية root وsync.
    عرض الحل
    awk -F: '$7 !~ /(nologin|false)$/ {print $1}' /etc/passwd | sort > /root/inventaire/comptes-shell.txt

    التحقق : test -s /root/inventaire/comptes-shell.txt && awk -F: '$7 !~ /(nologin|false)$/ {print $1}' /etc/passwd | sort | cmp -s - /root/inventaire/comptes-shell.txt

  4. حرّر نموذج تهديد مصغّرًا في /root/inventaire/menaces.txt: على الأقل 3 أسطر بالصيغة « actif ; menace ; mesure » (أي: أصل ; تهديد ; إجراء)، مع فاصلتين منقوطتين لاتينيتين ; بالضبط في كل سطر (وليس الفاصلة المنقوطة العربية ؛).
    عرض تلميحمثال لسطر: قاعدة الزبائن ; السرقة عبر حقن SQL ; حسابات SQL محدودة + نسخ احتياطية مشفّرة
    عرض الحل
    printf 'base clients ; vol par injection SQL ; compte SQL limité et sauvegardes chiffrées\nacces SSH ; force brute sur les mots de passe ; clés SSH et fail2ban\nsite web ; défiguration ; mises à jour et droits en lecture seule\n' > /root/inventaire/menaces.txt

    التحقق : test "$(grep -c '^[^;][^;]*;[^;][^;]*;[^;][^;]*$' /root/inventaire/menaces.txt)" -ge 3

المراجع الرسمية المعتمدة: ANSSI — Recommandations de configuration d'un système GNU/Linux (guide ANSSI-BP-028, Licence Ouverte) : principes de minimisation et de défense en profondeur ; Red Hat Enterprise Linux 9 — Security hardening (chapitre d'introduction) ; Pages de manuel os-release(5), passwd(5), ss(8). نص أصلي من MasterLinux.