ديف أوبس

حماية SSH بـ Fail2Ban

حماية خدمة SSH باستخدام Fail2Ban على نظام أوبونتو: دليل شامل ومفصل

يُعد بروتوكول SSH (Secure Shell) من أهم الخدمات التي تستخدم لتأمين الوصول عن بُعد إلى خوادم لينكس، وخاصة على توزيعة أوبونتو، حيث يسمح للمستخدمين بالتحكم في الخادم بطريقة مشفرة وآمنة. مع ازدياد الاعتماد على SSH للوصول إلى الأنظمة، بات من الضروري تعزيز أمانه ضد محاولات الدخول غير المصرح بها، والهجمات الإلكترونية مثل هجمات القوة الغاشمة (Brute Force Attacks). في هذا السياق، يظهر دور أداة Fail2Ban كواحدة من أفضل الحلول المجانية والمفتوحة المصدر التي تساعد على حماية خدمة SSH عبر مراقبة محاولات الدخول وحظر العناوين المشبوهة تلقائياً.


مقدمة عن SSH وأهميته في إدارة الخوادم

SSH هو بروتوكول شبكة يُستخدم لتأمين اتصال آمن بين عميل وخادم عبر شبكة غير آمنة. يتميز SSH بقدرته على تشفير البيانات المتبادلة، مما يمنع التنصت أو اعتراض البيانات الحساسة مثل كلمات المرور. يتم استخدام SSH بشكل واسع من قبل مسؤولي الأنظمة لتشغيل الأوامر عن بعد، نقل الملفات، وإدارة الخدمات.

لكن بسبب شعبيته وانتشاره، يُصبح SSH هدفاً رئيسياً لهجمات القراصنة ومحاولات الوصول غير المصرح بها. أكثر هذه الهجمات شيوعاً هي هجمات القوة الغاشمة التي تعتمد على تجربة آلاف أو ملايين كلمات المرور بهدف العثور على كلمة مرور صحيحة.


تعريف Fail2Ban ودوره في تأمين SSH

Fail2Ban هو برنامج يعمل على مراقبة ملفات السجلات (logs) الخاصة بالخادم للبحث عن نماذج معينة تشير إلى محاولات دخول فاشلة أو نشاط مشبوه. عند رصد مثل هذه المحاولات، يقوم Fail2Ban بتنفيذ إجراءات محددة مثل حظر عنوان IP المهاجم مؤقتًا أو دائمًا عن طريق تعديل جدران الحماية (firewall).

الميزة الأساسية لـ Fail2Ban هي أنه لا يعتمد على منع الهجمات من البداية، بل على التعرف السريع عليها والاستجابة المناسبة لمنع استمراريتها، مما يجعله أداة فعالة ومرنة.


خطوات تثبيت Fail2Ban على أوبونتو

1. تحديث النظام

قبل تثبيت أي برنامج، من الأفضل تحديث قاعدة بيانات الحزم لضمان تثبيت أحدث الإصدارات:

bash
sudo apt update && sudo apt upgrade -y

2. تثبيت Fail2Ban

لتثبيت Fail2Ban على أوبونتو:

bash
sudo apt install fail2ban -y

بعد تثبيت البرنامج، يبدأ Fail2Ban تلقائيًا كخدمة تعمل في الخلفية.

3. التحقق من حالة الخدمة

يمكن التحقق من أن Fail2Ban يعمل بشكل صحيح باستخدام الأمر:

bash
sudo systemctl status fail2ban

يجب أن تظهر رسالة تفيد بأن الخدمة في حالة “نشطة” (active).


إعداد Fail2Ban لحماية SSH

1. إنشاء ملف إعدادات مخصص

لا يُنصح بتعديل ملف الإعدادات الرئيسي /etc/fail2ban/jail.conf مباشرة، بل يتم نسخ محتوياته إلى ملف جديد يسمى jail.local:

bash
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

يتيح ذلك تحديث البرنامج دون فقدان التخصيصات.

2. تعديل ملف jail.local لتفعيل حماية SSH

فتح الملف للتحرير باستخدام محرر نصوص مثل nano:

bash
sudo nano /etc/fail2ban/jail.local

البحث عن القسم الخاص بـ SSH، والذي عادة ما يكون بعنوان [sshd]، والتأكد من التعديلات التالية:

ini
[sshd] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 5 bantime = 600 findtime = 600
  • enabled: تفعيل مراقبة SSH.

  • port: رقم المنفذ الخاص بـ SSH (يمكن تغييره إذا كان SSH يعمل على منفذ غير 22).

  • filter: اسم الفلتر الذي يستخدم لتعريف نماذج محاولات الدخول الفاشلة.

  • logpath: مسار ملف السجل الذي يحتوي على محاولات الدخول.

  • maxretry: عدد المحاولات الفاشلة المسموح بها قبل الحظر.

  • bantime: مدة الحظر بالثواني (600 تعني 10 دقائق).

  • findtime: الإطار الزمني الذي يتم خلاله حساب المحاولات الفاشلة.

3. إعادة تشغيل خدمة Fail2Ban لتطبيق التغييرات

bash
sudo systemctl restart fail2ban

كيفية عمل Fail2Ban مع خدمة SSH

عندما يحاول مهاجم الدخول عبر SSH ويفشل أكثر من عدد المحاولات المحدد في maxretry ضمن فترة findtime، يقوم Fail2Ban بإضافة عنوان IP الخاص بالمهاجم إلى قواعد جدار الحماية (عادة iptables أو nftables)، وبالتالي يتم حظره من الوصول إلى الخادم لفترة bantime.

هذه الطريقة تمنع الهجمات المستمرة وتحمي النظام من استنزاف الموارد الناتج عن محاولات الدخول المتكررة.


تحسين إعدادات Fail2Ban لزيادة الأمان

1. تغيير منفذ SSH الافتراضي

تغيير المنفذ الافتراضي من 22 إلى رقم آخر يقلل من عدد محاولات الاختراق، حيث إن العديد من الهجمات تستهدف المنفذ 22 فقط.

يمكن تعديل المنفذ في ملف إعدادات SSH:

bash
sudo nano /etc/ssh/sshd_config

تغيير قيمة:

nginx
Port 22

إلى مثلاً:

yaml
Port 2222

ثم إعادة تشغيل SSH:

bash
sudo systemctl restart sshd

وبعد ذلك تعديل ملف jail.local ليعكس التغيير في Fail2Ban:

ini
port = 2222

2. استخدام قوائم بيضاء (Whitelist) لعناوين IP موثوقة

لتجنب حظر عناوين IP الخاصة بالمستخدمين الشرعيين، يمكن إضافتها في ملف إعدادات Fail2Ban ignoreip:

ini
ignoreip = 127.0.0.1/8 192.168.1.100

يمكن إضافة أكثر من عنوان IP مفصول بمسافة.

3. زيادة مدة الحظر أو جعلها دائمة

يمكن جعل مدة الحظر طويلة جداً أو دائمة من خلال ضبط bantime:

  • لجعل الحظر دائم:

ini
bantime = -1
  • لزيادة مدة الحظر إلى ساعات أو أيام، يتم حساب الثواني:

مثلاً 24 ساعة:

ini
bantime = 86400

مراقبة Fail2Ban والتحقق من عمله

يمكن التحقق من سجلات Fail2Ban لمعرفة الأحداث التي تم التعامل معها:

bash
sudo cat /var/log/fail2ban.log

كما يمكن استخدام أوامر Fail2Ban للتفاعل مع الخدمة:

  • عرض الحظر الحالي لعناوين IP على SSH:

bash
sudo fail2ban-client status sshd
  • إلغاء حظر عنوان IP معين:

bash
sudo fail2ban-client set sshd unbanip 192.168.1.200

مقارنة بين Fail2Ban وأدوات الحماية الأخرى

توجد العديد من الأدوات التي تهدف إلى حماية خدمة SSH، مثل iptables اليدوي، أو أدوات متقدمة مثل DenyHosts. لكن Fail2Ban يمتاز بعدة مزايا:

  • المرونة: يمكنه مراقبة ملفات السجل لأي خدمة وليس فقط SSH.

  • سهولة التخصيص: إمكانية تعديل الإعدادات بسهولة.

  • التكامل مع جدار الحماية: يدعم مختلف أنظمة الجدار الناري.

  • الفعالية في الوقت الحقيقي: يكتشف ويمنع الهجمات تلقائياً دون الحاجة لتدخل يدوي.


الجدول التالي يوضح إعدادات Fail2Ban الأساسية وتأثيراتها:

الإعداد الوصف القيمة الافتراضية الوحدات التأثير
enabled تفعيل/تعطيل الحماية false true/false تفعيل الحماية لخدمة معينة
port رقم المنفذ المراقب 22 رقم المنفذ تحديد المنفذ الذي يعمل عليه SSH
filter فلتر محاولات الدخول الفاشلة sshd اسم فلتر يحدد نماذج السجلات للمراقبة
logpath مسار ملف السجل /var/log/auth.log مسار الملف مكان تسجيل محاولات الدخول
maxretry عدد المحاولات المسموح بها 5 عدد المحاولات قبل حظر IP
bantime مدة الحظر 600 ثوانٍ طول فترة الحظر
findtime فترة مراقبة المحاولات 600 ثوانٍ الإطار الزمني لاحتساب المحاولات

نصائح إضافية لتعزيز أمان SSH

  • استخدام المفاتيح العامة والخاصة (SSH Keys) بدلاً من كلمات المرور التقليدية.

  • تعطيل الدخول للمستخدم root مباشرة عبر SSH عن طريق تعديل /etc/ssh/sshd_config:

nginx
PermitRootLogin no
  • تفعيل جدران حماية إضافية مثل ufw (Uncomplicated Firewall) مع إعدادات صارمة لمنع الوصول غير المرغوب فيه.

  • مراقبة نشاط الشبكة واستخدام أدوات كشف التسلل (IDS) لتعزيز الحماية.

  • تحديث النظام وبرمجيات SSH بشكل دوري لسد الثغرات الأمنية.


الخاتمة

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


المصادر والمراجع