دليل عملي

تدقيق أمان VPS شهري للعميل: قائمة في 45 دقيقة

الأمان والمراقبة10 دقائق للقراءةعدد الخطوات: 13

لا يسأل العميل هل خادمه آمن، بل يسأل منذ متى تعرفون ذلك. الوكالة التي لا تملك روتينًا لا تستطيع الجواب يوم ظهور ثغرة ولا عند تجديد العقد. تمرّ هذه القائمة في 45 دقيقة، لكل VPS، على سبعة فحوصات للقراءة فقط: التحديثات المعلّقة، والنواة، وحسابات SSH ومفاتيحه، والمنافذ المفتوحة، والشهادات، والنسخ الاحتياطية المستعادة، وسجلات المصادقة. وتنتهي بتقرير مؤرخ من صفحة واحدة تسلّمونه للعميل وتقارنونه من شهر إلى آخر.

المحتويات· تحقّق من حالة قائمة، لا تعد بناءها1/14
  1. 01تحقّق من حالة قائمة، لا تعد بناءها
  2. 02حدّد النطاق قبل أول تدقيق
  3. 03ما يُجهَّز مرة واحدة قبل التدقيق
  4. 04الفحوصات السبعة وميزانية وقت كل منها
  5. 05ميزانية الـ 45 دقيقة لكل VPS
  6. 06سكربت جمع بدل سبع جلسات يدوية
  7. 07أرشفوا وقارنوا: هنا يظهر الانحراف
  8. 08تقرير الصفحة الواحدة المسلَّم للعميل
  9. 09سجّلوا المخالفة ولا تصحّحوها على الفور
  10. 10حين لا يقول المخرج ما يبدو أنه يقوله
  11. 11اعتراض الوقت: 45 دقيقة لكل عميل كل شهر
  12. 12حين تكبر المحفظة
  13. 13للمتابعة
  14. 14الوثائق الرسمية

تحقّق من حالة قائمة، لا تعد بناءها

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

حدّد النطاق قبل أول تدقيق

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

ما يُجهَّز مرة واحدة قبل التدقيق

  • حساب تدقيق مخصص — مستخدم باسم صاحبه مع sudo محصور في قراءة السجلات وفحص الشبكة، بدل حساب root مشترك.
  • قائمة متوقعة لكل VPS — المنافذ التي يجب أن تستمع، والحسابات المصرّح بها، والنطاقات المخدومة، وأداة النسخ الاحتياطي ومستودعها. بلا مرجع لا تتميز المخالفة عن السلوك العادي.
  • سكربت جمع للقراءة فقط — يسلسل أوامر القائمة ويكتب كل شيء في ملف مؤرخ، فلا يُكتب كل أمر إلا مرة واحدة.
  • مجلد أرشيف لكل عميل — مجلد فرعي لكل شهر، محفوظ خارج الخادم المدقَّق، لتمكين مقارنة الأشهر.
  • نموذج تقرير — القالب نفسه لجميع العملاء، يُملأ من المخرجات المجمّعة.
  • تقويم — يوم ثابت من الشهر لكل عميل، مدوّن في أجندة الفريق، وإلا سقط التدقيق في أول شهر مزدحم.

الفحوصات السبعة وميزانية وقت كل منها

  1. التحديثات المعلّقة (6 دقائق)

    sudo apt update
    apt list --upgradable 2>/dev/null
    apt list --upgradable 2>/dev/null | grep -i security
    اعزلوا الحزم التي ينتهي مصدرها بـ -security: تُعالج أولًا. أما البقية فتمرّ بتحقق بشري، لأن قفزة إصدار رئيسية قد تكسر تطبيقًا. على AlmaLinux أو RHEL يؤدي sudo dnf check-update --security الدور نفسه. وحتى مع تفعيل التحديثات التلقائية يُظهر هذا الفحص ما بقي عالقًا.

  2. النواة وإعادة التشغيل المعلّقة (4 دقائق)

    uname -r
    ls /boot/vmlinuz-*
    ls /var/run/reboot-required
    sudo needrestart -b -r l
    إذا اختلفت أحدث نواة مثبّتة عن uname -r، أو وُجد /var/run/reboot-required، فإعادة التشغيل مستحقة. في مخرجات needrestart يبيّن السطر NEEDRESTART-KSTA هل النواة المحمّلة محدّثة، وتعرض القائمة الخدمات التي ما زالت تستخدم مكتبات قديمة. لا تُجرى إعادة التشغيل منفردًا أبدًا: تُجدول مع العميل.

  3. الحسابات ومفاتيح SSH (8 دقائق)

    awk -F: '$3>=1000' /etc/passwd
    getent group sudo
    sudo ssh-keygen -lf /home/<حساب>/.ssh/authorized_keys
    lastlog | grep -v 'Never logged in'
    last -n 20
    يجب أن يقابل كل حساب بشري شخصًا معروفًا لدى العميل أو الوكالة. ويجب أن تعود كل بصمة مفتاح إلى شخص ما زال يعمل على المشروع. حساب لم يتصل منذ أشهر، أو مفتاح مجهول، يصير برتقاليًا ويُرسل إلى العميل للتحقق.

  4. المنافذ المفتوحة (5 دقائق)

    sudo ss -tlnp
    sudo ss -ulnp
    sudo ufw status verbose
    قارنوا النتيجة بالقائمة المتوقعة لهذا الخادم. قاعدة بيانات تستمع على كل الواجهات بدل الحلقة المحلية، أو منفذ اختبار منسي، أو خدمة مجهولة: تُسجَّل كل مخالفة مع العملية التي تفتحها، دون إغلاقها فورًا، لأن خدمة قد تعتمد على ذلك المنفذ.

  5. الشهادات (4 دقائق)

    openssl s_client -connect your-domain‎.com:443 -servername your-domain‎.com </dev/null 2>/dev/null | openssl x509 -noout -enddate
    اقرأوا تاريخ الانتهاء من الخدمة المعروضة فعلًا، لا من وجود مؤقّت التجديد فقط: فقد يفشل مؤقّت نشط كل ليلة. وإذا مرّ النطاق عبر CDN فهذا الأمر يقرأ شهادة الـ CDN. وللمصدر، استبدلوا المضيف في -connect بعنوان IP الخاص بالخادم مع إبقاء -servername.

  6. النسخ الاحتياطية المستعادة (10 دقائق)

    restic snapshots
    restic restore latest --target /tmp/restore-test --include /etc/nginx
    دوّنوا تاريخ آخر نقطة استعادة، ثم استعيدوا فعلًا ملفًا أو قاعدة بيانات في مجلد مؤقت وافتحوه. النسخة التي لم تُستعَد قط ليست دليلًا بل فرضية. احذفوا المجلد المؤقت بعد ذلك. وإذا استخدم العميل أداة أخرى فالمنطق نفسه: قائمة النقاط، واستعادة جزئية، وفحص المحتوى.

  7. سجلات المصادقة (8 دقائق)

    sudo journalctl -u ssh --since '30 days ago' --no-pager | grep -c 'Failed password'
    sudo journalctl -u ssh --since '30 days ago' --no-pager | grep 'Accepted'
    sudo journalctl _COMM=sudo --since '30 days ago' --no-pager
    أحصوا الإخفاقات، واسردوا الاتصالات الناجحة وابحثوا عن تلك القادمة من عنوان مجهول. راجعوا استخدامات sudo. على RHEL ومشتقاته تسمى الوحدة sshd لا ssh.

ميزانية الـ 45 دقيقة لكل VPS

مرّر الجدول أفقيًا

الفحصالأمر الأساسيالوقت
التحديثات المعلّقة`apt list --upgradable`6 دقائق
النواة وإعادة التشغيل`needrestart -b -r l`4 دقائق
الحسابات ومفاتيح SSH`ssh-keygen -lf authorized_keys`8 دقائق
المنافذ المفتوحة`ss -tlnp`5 دقائق
الشهادات`openssl s_client`4 دقائق
النسخ الاحتياطية المستعادة`restic restore`10 دقائق
سجلات المصادقة`journalctl -u ssh`8 دقائق

سكربت جمع بدل سبع جلسات يدوية

الجزء الأكبر من الـ 45 دقيقة قراءة لا كتابة، بشرط ألا تُعاد كتابة الأوامر. اكتبوا سكربت audit-vps ينفذ أوامر الفحوصات من الأول إلى السابع ويوجّه كل مخرج إلى ملف يحمل اسم العميل والتاريخ، مثل ~/audits/client-a/YYYY-MM/raw-output‎.txt. لا يحتوي إلا أوامر قراءة: لا apt upgrade ولا systemctl restart ولا rm. شغّلوه عبر SSH من محطتكم، واجلبوا الملف، ثم اقرأوه بهدوء. تبقى استعادة النسخة الاحتياطية الخطوة اليدوية الوحيدة، لأنها تتطلب الحكم على اتساق المحتوى المستعاد.

أرشفوا وقارنوا: هنا يظهر الانحراف

التدقيق المنفرد يعطي لقطة، وتدقيقان متتاليان يعطيان اتجاهًا. احتفظوا بالمخرجات الخام لكل شهر ثم قارنوها بالشهر السابق عبر diff -u previous-audit‎.txt current-audit‎.txt. منفذ يظهر، وحساب زائد، وعدد إخفاقات اتصال تضاعف عشر مرات، ونقطة استعادة لم تعد تتحرك: كلها تبرز في أسطر قليلة من الاختلاف، بينما لا تُرى في مخرجات تُقرأ وحدها. أرشفوا كذلك التقرير المسلَّم للعميل. فيوم يسأل العميل منذ متى وُجد حساب أو متى طُبّق تصحيح، يكون الجواب ملفًا مؤرخًا لا ذكرى.

تقرير الصفحة الواحدة المسلَّم للعميل

  1. الترويسة

    اسم العميل، ومعرّف الـ VPS، وعنوان IP، وتاريخ التدقيق، واسم من أجراه.

  2. جدول الفحوصات السبعة

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

  3. المخالفات المرصودة

    كل مخالفة في جملة واقعية واحدة مع الدليل: سطر المخرجات، والمنفذ، والحساب المعني.

  4. الإجراءات المنفَّذة

    ما طبقته الوكالة وحدها ضمن النطاق المتفق عليه، مثل تحديث أمني.

  5. الإجراءات المعروضة على العميل للموافقة

    إعادة التشغيل، وحذف حساب، وإغلاق منفذ، مع خطر عدم فعل شيء.

  6. الموعد التالي

    تاريخ التدقيق القادم، ولكل مخالفة برتقالية أو حمراء أجل نهائي للمعالجة.

سجّلوا المخالفة ولا تصحّحوها على الفور

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

حين لا يقول المخرج ما يبدو أنه يقوله

  • needrestart غير موجود — الحزمة ليست مثبتة افتراضيًا في كل مكان. ثبّتوها مرة واحدة بموافقة العميل، أو قارنوا يدويًا uname -r بالنوى الموجودة في /boot.
  • لا إخفاقات SSH في السجلات — تحققوا من اسم الوحدة قبل الاستنتاج. بحسب التوزيعة تُسجَّل المصادقة تحت ssh أو sshd أو، في إصدارات OpenSSH الحديثة، sshd-session. جرّبوا sudo journalctl _COMM=sshd-session --since '30 days ago'.
  • ss -tlnp لا يعرض العمليات — بدون sudo يبقى عمود العمليات فارغًا لخدمات المستخدمين الآخرين.
  • شهادة صالحة بينما يعرض الموقع خطأ — قرأتم شهادة CDN أو vhost آخر. وجّهوا الطلب إلى عنوان الـ VPS ومرّروا -servername الصحيح.
  • restic يطلب كلمة مرور — المستودع مشفّر. احصلوا على السر من العميل قبل التدقيق لا أثناءه، وإلا سقط الفحص.

اعتراض الوقت: 45 دقيقة لكل عميل كل شهر

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

حين تكبر المحفظة

عند عشرة خوادم تتسع القائمة ليوم عمل. وعند خمسين تصير الصعوبة تنظيمية: معرفة ما لدى كل عميل، وأي مواعيد استحقاق تقع هذا الشهر، ومن دُقّق. تجمع مساحة الوكالات في ServOrbit.com خدمات كل عميل ومواعيد استحقاقه في واجهة واحدة، فتُغنيكم عن جدول بيانات موازٍ. وإذا فضّلت الوكالة ألا تتحمل الأساس النظامي بنفسها فخيار إدارة VPS موجود ويُدرس على حدة. هذا الدليل مقدَّم كما هو، دون دعم: تنفيذ التدقيق والمسؤولية تجاه العميل يبقيان عليكم.

للمتابعة

  • إرساء الأساس — يصف /blog/linux-hardening-vps-checklist التقوية الأولية التي يتحقق منها هذا التدقيق.
  • أتمتة التصحيحات — يشرح /blog/securite-vps-mises-a-jour-automatiques-debian-ubuntu أداة unattended-upgrades التي يقيس الفحص الأول ما تبقى منها.
  • النسخ الاحتياطي الصحيح — يغطي /blog/backup-vps-restic-s3-3-2-1 إعداد Restic الذي يتحقق الفحص السادس من استعادته.
  • المراقبة المستمرة — يكمّل /blog/alertes-disque-ram-vps-monitoring-proactif التدقيق الشهري بتنبيهات بين مرورين.
  • جرد إصدارات PHP — يطبق /blog/inventaire-versions-php-parc-sites-clients-agence الانضباط نفسه على أسطول المواقع.
  • التفاعل مع ثغرة — تبيّن أدلة التصحيح في فئة الأمان والمراقبة بالمدونة ما يتيحه جرد محدَّث في اليوم الأول.

الوثائق الرسمية

خيارات apt: https://manpages.debian.org/stable/apt/apt.8.en.html

مشروع needrestart: https://github.com/liske/needrestart

التحديث التلقائي في Debian: https://wiki.debian.org/UnattendedUpgrades

الأمر ss: https://man7.org/linux/man-pages/man8/ss.8.html

الأمر openssl s_client: https://docs.openssl.org/master/man1/openssl-s_client/

الأمر journalctl: https://www.freedesktop.org/software/systemd/man/latest/journalctl.html

خدمة sshd: https://man.openbsd.org/sshd.8

الأمر last: https://man7.org/linux/man-pages/man1/last.1.html

محفظة VPS مقروءة من مكان واحد

يصبح تدقيق الأسطول يدويًا غير قابل للإدارة حين تكبر المحفظة. تجمع مساحة الوكالات في ServOrbit.com خدمات كل عميل ومواعيد استحقاقه في واجهة واحدة، ويتيح خيار إدارة VPS تفويض الأساس النظامي.

بحاجة إلى مساعدة؟

تصفّح مركز المساعدة والأسئلة الشائعة، أو تواصل مع فريقنا — معاودة اتصال أو WhatsApp أو بريد إلكتروني. الدعم بـالعربية والفرنسية والإنجليزية.

راسلنا على WhatsAppيُفتح في علامة تبويب جديدة