لماذا يغيّر الدليل المقنَّن كل شيء للوكالة
يستطيع المطور الفردي تطبيق خمس أوامر ذهنيًا بعد كل تسليم. الوكالة لا تستطيع ذلك: تقنيون متعددون، وعشرات خوادم VPS للعملاء، وجداول مناوبة متدورة. حين يُبلّغ عميل عن وصول مشبوه بعد ستة أشهر من الإطلاق، السؤال ليس «هل أمّنتم الخادم؟» بل «هل تستطيعون إثبات ذلك؟»
أصبحت إمكانية التتبع متطلبًا تعاقديًا وتنظيميًا. تُلزم توجيهات NIS2 (جاري تطبيقها في التشريعات الوطنية) وGDPR مقدمي الخدمات الذين يتعاملون مع البيانات الشخصية بتوثيق الإجراءات الأمنية المُطبَّقة. بدون دليل تشغيل موثق وبدون سجلات auditd، لا تملك وكالتك أي وثيقة قابلة للاحتجاج بها.
لا يُعيد هذا الدليل وصف تثبيت fail2ban أو UFW — فمقالا حماية VPS باستخدام fail2ban وجدار الحماية UFW على VPS يتناولان ذلك بالتفصيل. ينطلق هذا الدليل من مستوى أعلى: كيفية توحيد هذه الإجراءات وتفويضها وتتبعها عبر محفظة كاملة من عملاء.
ما يضيفه هذا الدليل لوكالتك
- قابلية التكرار: يتبع كل تقني نفس الخطوات بالضبط، بنفس الترتيب، في كل خادم VPS جديد.
- إمكانية التتبع: يسجّل
auditd من فعل ماذا، ومتى، وأي أمر — دليل قابل للحفظ في حالات الحوادث أو مراجعات العملاء. - التفويض الآمن: يستطيع التقني المبتدئ تسليم خادم مُصلَّب دون ارتجال، لأن الدليل يحتوي القرارات نيابةً عنه.
- الدفاع التعاقدي: بند الأمان في عقد الصيانة لا يمكن الاحتجاج به إلا بسجل تنفيذ مؤرخ.
- تقليص سطح الهجوم: تُزيل القائمة الإهمالات الكلاسيكية — SSH للمستخدم root مفتوح، auditd غير مفعّل — وهي نقاط الدخول الأكثر استغلالًا.
- الاتساق بين العملاء: نفس القاعدة الأمنية للجميع، مع فوارق فقط حيثما يستلزم ذلك مواصفات العميل.
المتطلبات الأساسية ونطاق القائمة
تستهدف هذه القائمة Ubuntu 24.04 LTS وDebian 12 (Bookworm)، وهما أكثر التوزيعات شيوعًا على خوادم VPS عام 2026. جرى التحقق من الأوامر على هذه الأنظمة؛ على AlmaLinux أو Rocky Linux تختلف أسماء الحزم ومسارات الخدمة.
المتطلبات الدنيا للـVPS: نواة واحدة (vCPU)، 1 جيجابايت رام (2 جيجابايت مُوصى بها عند تشغيل fail2ban وauditd معًا)، 20 جيجابايت SSD. تسلّم ServOrbit كل VPS بوصول فوري للمستخدم root عبر SSH وطرفية KVM مضمّنة، مما يُتيح لوكالتك تطبيق هذا الدليل منذ اللحظة الأولى — دون الحاجة لطلب وصول وسيط من المضيف.
القائمة منظَّمة في سبعة كتل بترتيب التطبيق. تتوقف عند نطاق الأمان الأساسي للنظام: أمان التطبيقات (لوحة الإدارة المكشوفة، الهجمات على التطبيقات) مُعالَج بشكل منفصل في لوحة الإدارة المكشوفة: سطوح الهجوم المنسية على VPS.
الكتلة 1 — التحديثات والجرد الأولي
تحديث النظام وإعداد الجرد
أول إجراء بعد تسجيل الدخول كـroot هو رفع النظام إلى مستوى التصحيحات الحالية.
apt update && apt upgrade -y
apt install -y auditd audispd-plugins curl gnupg2 ufw fail2banسجّل في دليل التشغيل: التاريخ وإصدار النواة (uname -r) وقائمة الحزم المثبتة (dpkg -l > /root/inventory-$(date +%F).txt). يُشكّل ملف الجرد هذا خط الأساس للخادم عند التسليم — وهو الوثيقة التي تقدمها إذا أبدى عميل اعتراضًا على الحالة الأولية لجهازه.
مرجع CIS Benchmark: التحكم CIS 1.1 (Ubuntu Linux 24.04 LTS Benchmark، قسم «الإعداد الأولي»).
تفعيل التحديثات الأمنية التلقائية
apt install -y unattended-upgrades
dpkg-reconfigure --priority=low unattended-upgradesتحقق من أن السطر Unattended-Upgrade::Allowed-Origins يتضمن ${distro_id}:${distro_codename}-security. لمحفظة العملاء، فعّل التحديثات التلقائية وجدوِل مراجعة شهرية للتحديثات غير الأمنية — تستلزم موافقة بشرية.
مرجع CIS: التحكم CIS 1.9 (ضمان تثبيت التحديثات والتصحيحات والبرامج الأمنية الإضافية).
الكتلة 2 — مستخدم sudo وإغلاق root
إنشاء حساب مخصص للإدارة
لا تستخدم root للمهام اليومية. أنشئ حسابًا اسميًا لكل تقني أو حساب خدمة للوكالة:
useradd -m -s /bin/bash adminagency
usermod -aG sudo adminagency
passwd adminagencyنصيحة للوكالة: استخدم اسم حساب يمكن تمييزه في السجلات (jean.dupont أو agency-admin)، لا اسمًا عامًا مثل admin. حين يتتبع auditd إجراءً ما، يُسجَّل الحساب المُنفِّذ — الاسم العام يُفقد المراجعة قيمتها.
تعطيل تسجيل دخول root عبر SSH
sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
grep PermitRootLogin /etc/ssh/sshd_configتنبيه: لا تُعد تحميل sshd إلا بعد التحقق من قدرة مستخدم sudo على الاتصال وتنفيذ sudo su. وإلا ستُقفل نفسك خارج الخادم.
مرجع CIS: التحكم CIS 5.2.8 (ضمان تعطيل تسجيل دخول root عبر SSH).
الكتلة 3 — المصادقة بمفتاح SSH
نشر المفتاح العمومي للوكالة
mkdir -p /home/adminagency/.ssh
chmod 700 /home/adminagency/.ssh
echo "<AGENCY_PUBLIC_KEY>" >> /home/adminagency/.ssh/authorized_keys
chmod 600 /home/adminagency/.ssh/authorized_keys
chown -R adminagency:adminagency /home/adminagency/.sshنصيحة للوكالة: احتفظ بمستودع مفاتيح عمومية بإصدارات (ملف واحد لكل تقني، تجديد سنوي). كل مفتاح يُنشر على VPS عميل يجب أن يكون مرجعًا في هذا المستودع — هذا ما يُتيح لك إلغاء وصول شخص غادر الفريق.
تعطيل المصادقة بكلمة المرور
بعد التحقق من المفتاح (اختبر من طرفية أخرى قبل التأكيد):
sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
sed -i 's/^#\?ChallengeResponseAuthentication.*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config
systemctl reload sshdمرجع CIS: التحكم CIS 5.2.19 (ضمان تعطيل المصادقة بكلمة المرور في SSH).
الكتلة 4 — جدار الحماية UFW
تهيئة UFW بسياسة الرفض الافتراضي
ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp comment 'Agency SSH'
ufw allow 80/tcp comment 'HTTP'
ufw allow 443/tcp comment 'HTTPS'
ufw --force enable
ufw status verboseافتح فقط المنافذ التي يستخدمها مشروع العميل فعليًا. إذا لم يستخدم تطبيق العميل منفذ بريد إلكتروني مباشر، لا تفتحه.
للتفاصيل الكاملة عن fail2ban وخيارات UFW المتقدمة، راجع المقالين: حماية VPS باستخدام fail2ban وجدار الحماية UFW على VPS.
مرجع CIS: التحكم CIS 3.5.1 (ضمان تثبيت حزمة جدار الحماية).
الكتلة 5 — fail2ban
تفعيل fail2ban مع سجن SSH
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.localحرِّر /etc/fail2ban/jail.local واضبط قسم [sshd]:
[sshd]
enabled = true
maxretry = 5
findtime = 600
bantime = 3600systemctl enable fail2ban
systemctl start fail2ban
fail2ban-client status sshdلمحفظة العملاء، يُنصح بالنظر في CrowdSec كبديل أو مكمّل: قائمة الحجب المجتمعية تجمع معلومات آلاف الخوادم.
الكتلة 6 — auditd: سجل التتبع
تفعيل auditd وتهيئة القواعد الأساسية
auditd هو المكوّن الذي تنساه الوكالات في أغلب الأحيان — ومع ذلك فهو الذي يوفر الدليل القابل للاحتجاج عند وقوع حادث.
systemctl enable auditd
systemctl start auditdأنشئ ملف قواعد الوكالة في /etc/audit/rules.d/agency.rules:
# تتبع جميع عمليات رفع الصلاحيات
-w /etc/sudoers -p wa -k sudoers_changes
-w /etc/sudoers.d/ -p wa -k sudoers_changes
# تتبع اتصالات SSH
-w /var/log/auth.log -p wa -k auth_log
# تتبع تعديلات ملفات الإعداد الأساسية
-w /etc/ssh/sshd_config -p wa -k sshd_config
-w /etc/passwd -p wa -k passwd_changes
-w /etc/shadow -p wa -k shadow_changes
# تتبع الأوامر المنفّذة بصلاحية root
-a always,exit -F arch=b64 -S execve -F euid=0 -k root_commandsaugenrules --load
auditctl -lمرجع CIS: التحكم CIS 4.1.1 (ضمان تفعيل المراجعة) والتحكم CIS 4.1.3 (ضمان جمع الأحداث التي تُعدّل معلومات التاريخ والوقت).
تصدير سجلات auditd والاحتفاظ بها
يجب الاحتفاظ بسجلات auditd خارج الخادم لتكون قابلة للاحتجاج. هيّئ تصديرًا إلى نظامك المركزي (rsyslog أو Loki أو مزامنة rsync يومية بسيطة إلى تخزين الوكالة):
# مثال: تصدير rsyslog إلى جامع الوكالة
echo ':programname, isequal, "auditd" @<IP_COLLECTEUR_AGENCE>:514' \
>> /etc/rsyslog.d/99-auditd-remote.conf
systemctl restart rsyslogاحتفظ بالسجلات لمدة 90 يومًا على الأقل. لا يحدد GDPR مدة احتفاظ دنيا لسجلات الأمان، لكن أُطر مثل CIS Controls v8 (التحكم 8.3) توصي بـ 90 يومًا على الأقل في الموقع وسنة في أرشيف بارد.
الكتلة 7 — التحقق النهائي وسجل التسليم
بعد تنفيذ الكتل الست السابقة، راجع حالة الخادم قبل تسليم الوصول إلى العميل:
# التحقق من الخدمات النشطة
systemctl is-active ufw fail2ban auditd sshd
# التأكد أن root لا يستطيع الاتصال عبر SSH
grep PermitRootLogin /etc/ssh/sshd_config
# التحقق من قواعد UFW
ufw status verbose
# التحقق من قواعد auditd المحمّلة
auditctl -l
# مراجعة آخر عمليات تسجيل الدخول
last -n 10أنتج سجل تسليم مؤرخًا وموقعًا (حتى عبر البريد الإلكتروني) يُدرج الإجراءات المطبّقة وإصدارات حزم الأمان المثبتة وموقع جامع السجلات. هذه الوثيقة يوقّعها عميلك وتُشكّل الدليل التعاقدي على التهيئة الأولية.
سجل التسليم ليس شكليةً: عميل يتعرض لاختراق بعد سنتين من الإطلاق سيطلب من وكالتك تبرير حالة الخادم عند التسليم. بدون هذه الوثيقة، يتحول عبء الإثبات.
دليل الوكالة مقابل التهيئة الارتجالية
| المعيار | التهيئة الارتجالية | الدليل الموحَّد |
|---|---|---|
| قابلية التكرار | تعتمد على التقني الحاضر | متطابقة في كل تسليم |
| تتبع auditd | نادرًا ما يُفعَّل، تهيئة متغيرة | مفعَّل ومهيَّأ بشكل منهجي |
| الدليل عند الحوادث | لا وثائق قابلة للاحتجاج | سجل تسليم مؤرخ + سجلات مركزية |
| التفويض لمبتدئ | محفوف بالمخاطر (إهمالات محتملة) | ممكن مع الدليل كمرشد |
| تجديد مفاتيح SSH | يدوي وكثيرًا ما يُنسى | إجراء مكتوب ومستودع بإصدارات |
| الامتثال لـ NIS2 / GDPR | غير موثق | موثق وقابل للتكرار |
نصيحة المراجعة الشهرية. مرة في الشهر، أعِد تنفيذ التحققات النهائية من الكتلة 7 على كل VPS عميل نشط وأرشِف المخرجات. الفرق بين مراجعتين متتاليتين يكشف فورًا أي تعديل غير مصرح به: منفذ إضافي مفتوح، خدمة fail2ban موقوفة، قاعدة auditd ناقصة. تستغرق هذه المراجعة أقل من خمس دقائق للخادم الواحد حين تكون الأوامر في سكريبت.
استكشاف الأخطاء: الأخطاء الشائعة عند تطبيق الدليل
الخطأ 1 — sshd يرفض البدء بعد تعديل sshd_config
الرسالة: sshd: /etc/ssh/sshd_config line 42: unsupported option
السبب: توجيه مهمل أو بصياغة خاطئة. تحقق بـ sshd -t قبل إعادة تحميل الخدمة. على Ubuntu 24.04، استُبدلت ChallengeResponseAuthentication بـ KbdInteractiveAuthentication.
sshd -t && systemctl reload sshdالخطأ 2 — UFW يحجب اتصال SSH الخاص بك
الرسالة: يتجمّد الاتصال SSH بعد ufw enable.
السبب: لم تُضَف قاعدة SSH قبل التفعيل. استخدم طرفية KVM الخاصة بـ ServOrbit للوصول إلى الخادم بدون SSH، ثم نفّذ ufw allow 22/tcp وufw reload.
الخطأ 3 — auditd يعمل لكن auditctl -l يُعيد قائمة فارغة
الرسالة: List of rules: لا يتبعها شيء.
السبب: ملف القواعد غير محمّل. تحقق من وجود ملف .rules في /etc/audit/rules.d/ ونفّذ augenrules --load.
الخطأ 4 — fail2ban لا يحظر رغم محاولات فاشلة متكررة
الرسالة: fail2ban-client status sshd يُظهر Currently banned: 0 بعد 10 محاولات.
السبب: تغيّر مسار سجل SSH. على Debian 12 وUbuntu 24.04 مع journald، يجب ضبط الخلفية في jail.local: backend = systemd.
الخطأ 5 — unattended-upgrades يُعيد تشغيل خدمات الإنتاج
السبب: التهيئة الافتراضية تُعيد تشغيل الخدمات تلقائيًا بعد التحديثات. لخادم VPS عميل في الإنتاج، عطّل إعادة التشغيل التلقائية وجدوِل نافذة صيانة:
# في /etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Automatic-Reboot "false";للمزيد: التحصين المتقدم والمراقبة المستمرة
تُغطي هذه القائمة المستوى الأول من تصليب النظام. لمحفظة عملاء تتطلب مستوى أمانًا أعلى:
- خادم الاستقبال SSH (Bastion): مركزة جميع الوصول عبر نقطة دخول واحدة محصّنة — راجع Bastion Host على VPS.
- CrowdSec: كشف سلوكي وقائمة حجب مجتمعية كمكمّل أو بديل لـ fail2ban — راجع تأمين VPS بـ CrowdSec.
- النسخ الاحتياطية: تهيئة الأمان لا تحمي من فقدان البيانات — راجع النسخ الاحتياطية بـ BorgBackup على VPS.
- تصحيحات التطبيقات: تصليب النظام لا جدوى منه إذا لم يُصان التطبيقات المستضافة ذاتيًا — راجع روتين التصحيحات للتطبيقات المستضافة ذاتيًا.
- شهادات SSL: HTTPS شرط مسبق قبل أي تعرض عمومي — راجع شهادات SSL مع Let's Encrypt على VPS.