كيفية تأمين خادم Linux الخاص بك باستخدام fail2ban

نشرت: 2022-01-29
نافذة طرفية منمقة تعمل على كمبيوتر محمول يعمل بنظام Linux على غرار Ubuntu.
فاطماواتي أحمد زينوري / شاترستوك

باستخدام fail2ban ، يقوم كمبيوتر Linux الخاص بك تلقائيًا بحظر عناوين IP التي بها عدد كبير جدًا من حالات فشل الاتصال. إنه أمن ذاتي التنظيم! سنوضح لك كيفية استخدامه.

الأمن الأمن الأمن

قالت دوقة وندسور واليس سيمبسون ذات مرة: "لا يمكنك أبدًا أن تكون ثريًا جدًا أو نحيفًا جدًا." لقد قمنا بتحديث هذا من أجل عالمنا الحديث المترابط: لا يمكنك أبدًا أن تكون حذرًا جدًا أو آمنًا للغاية.

إذا كان جهاز الكمبيوتر الخاص بك يقبل طلبات الاتصال الواردة ، مثل اتصالات Secure Shell (SSH) ، أو يعمل كخادم ويب أو بريد إلكتروني ، فأنت بحاجة إلى حمايته من هجمات القوة الغاشمة ومخمن كلمات المرور.

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

الطريقة الوحيدة التي يمكن من خلالها تحقيق ذلك عمليًا هي أتمتة العملية برمتها. بقليل من الضبط البسيط ، سوف يدير fail2ban المراقبة والحظر وإلغاء الحظر نيابةً عنك.

الإعلانات

يتكامل fail2ban مع iptables لجدار حماية Linux. إنه يفرض الحظر على عناوين IP المشبوهة عن طريق إضافة قواعد إلى جدار الحماية. للحفاظ على هذا الشرح منظمًا ، نستخدم iptables مع مجموعة قواعد فارغة.

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

يمكننا رؤية مجموعة القواعد الفارغة باستخدام هذا الأمر:

 sudo iptables -L 

ذو صلة: دليل المبتدئين إلى iptables ، جدار حماية Linux

جارٍ تثبيت Fail2ban

يعد تثبيت fail2ban بسيطًا في جميع التوزيعات التي استخدمناها للبحث في هذه المقالة. في Ubuntu 20.04 ، يكون الأمر كما يلي:

 sudo apt-get install fail2ban 

في Fedora 32 ، اكتب:

 sudo dnf تثبيت fail2ban 

في Manjaro pacman ، استخدمنا Pacman:

 sudo pacman -Sy fail2ban 

تكوين fail2ban

يحتوي التثبيت fail2ban على ملف تكوين افتراضي يسمى jail.conf. يتم الكتابة فوق هذا الملف عند ترقية fail2ban ، لذلك سنفقد تغييراتنا إذا أجرينا تخصيصات لهذا الملف.

بدلاً من ذلك ، سنقوم بنسخ ملف jail.conf إلى ملف يسمى jail.local. من خلال وضع تغييرات التكوين الخاصة بنا في jail.local ، ستستمر عبر الترقيات. تتم قراءة كلا الملفين تلقائيًا بواسطة fail2ban .

هذه طريقة نسخ الملف:

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

افتح الملف الآن في المحرر المفضل لديك. سنستخدم gedit :

 sudo gedit /etc/fail2ban/jail.local
الإعلانات

سنبحث عن قسمين في الملف: [افتراضي] و [sshd]. احرص على العثور على الأقسام الفعلية ، على الرغم من ذلك. تظهر هذه التسميات أيضًا بالقرب من الجزء العلوي في قسم يصفها ، ولكن هذا ليس ما نريده.

تم فتح /etc/fail2ban/jail.local في نافذة gedit.

ستجد قسم [الافتراضي] في مكان ما حول السطر 40. إنه مقطع طويل به الكثير من التعليقات والتوضيحات.

تم فتح /etc/fail2ban/jail.local في نافذة gedit وانتقل إلى السطر 89.

قم بالتمرير لأسفل إلى حول السطر 90 ، وستجد الإعدادات الأربعة التالية التي تحتاج إلى معرفتها:

  • ignoreip: قائمة بيضاء بعناوين IP التي لن يتم حظرها أبدًا. لديهم بطاقة Get Out of Jail Free دائمة. عنوان IP للمضيف المحلي ( 127.0.0.1 ) موجود في القائمة افتراضيًا ، إلى جانب IPv6 المكافئ له ( ::1 ). إذا كانت هناك عناوين IP أخرى تعرف أنه لا يجب حظرها أبدًا ، فأضفها إلى هذه القائمة واترك مسافة بين كل منها.
  • bantime: المدة التي يتم فيها حظر عنوان IP (يشير الحرف "m" إلى دقائق). إذا قمت بكتابة قيمة بدون "m" أو "h" (للساعات) ، فسيتم التعامل معها على أنها ثوان. القيمة -1 ستحظر عنوان IP بشكل دائم. كن حذرًا جدًا حتى لا تحبس نفسك بشكل دائم.
  • findtime: مقدار الوقت الذي سيؤدي خلاله عدد كبير جدًا من محاولات الاتصال الفاشلة إلى حظر عنوان IP.
  • maxretry: قيمة "عدد كبير جدًا من المحاولات الفاشلة".

إذا قام اتصال من نفس عنوان IP بإجراء محاولات اتصال فاشلة findtime خلال فترة البحث ، فسيتم حظرها طوال bantime maxretry الاستثناءات الوحيدة هي عناوين IP في قائمة ignoreip .

fail2ban يضع عناوين IP في السجن لفترة زمنية محددة. ويدعم fail2ban العديد من أنواع السجون المختلفة ، ويمثل كل واحد منها عمليات حفظ للإعدادات التي تنطبق على نوع اتصال واحد. يتيح لك ذلك الحصول على إعدادات مختلفة لأنواع الاتصال المختلفة. أو يمكن أن يكون لديك fail2ban فقط عن مجموعة مختارة من أنواع الاتصال.

ربما تكون قد خمنت ذلك من اسم القسم [الافتراضي] ، لكن الإعدادات التي نظرنا إليها هي الإعدادات الافتراضية. الآن ، لنلقِ نظرة على إعدادات سجن SSH.

ذات صلة: كيفية تحرير الملفات النصية بيانياً على Linux باستخدام gedit

تكوين السجن

تتيح لك Jails نقل أنواع الاتصال داخل وخارج مراقبة fail2ban's . إذا كانت الإعدادات الافتراضية لا تتطابق مع تلك التي تريد تطبيقها على السجن ، فيمكنك تعيين قيم محددة لـ bantime و findtime و maxretry .

الإعلانات

قم بالتمرير لأسفل إلى حوالي السطر 280 ، وسترى قسم [sshd].

تم فتح /etc/fail2ban/jail.local في نافذة gedit وتمريره إلى السطر 280.

هذا هو المكان الذي يمكنك فيه تعيين قيم لسجن اتصال SSH. لتضمين هذا السجن في المراقبة والحظر ، علينا كتابة السطر التالي:

 تمكين = صحيح

نكتب هذا السطر أيضًا:

 ماكسريتري = 3

كان الإعداد الافتراضي خمسة ، لكننا نريد أن نكون أكثر حذرًا مع اتصالات SSH. أسقطناه إلى ثلاثة ، ثم حفظنا الملف وأغلقناه.

أضفنا هذا السجن لمراقبة fail2ban's ، وتجاوزنا أحد الإعدادات الافتراضية. يمكن أن يستخدم السجن مزيجًا من الإعدادات الافتراضية والخاصة به.

تفعيل fail2ban

حتى الآن ، قمنا بتثبيت fail2ban وتكوينه. الآن ، يتعين علينا تمكينه من العمل كخدمة بدء التشغيل التلقائي. بعد ذلك ، نحتاج إلى اختباره للتأكد من أنه يعمل بالشكل المتوقع.

الإعلانات

لتمكين fail2ban كخدمة ، نستخدم الأمر systemctl :

 sudo systemctl يقوم بتمكين fail2ban

نستخدمها أيضًا لبدء الخدمة:

 sudo systemctl ابدأ fail2ban 

يمكننا التحقق من حالة الخدمة باستخدام systemctl أيضًا:

 sudo systemctl status fail2ban.service 

كل شيء يبدو جيدًا - حصلنا على الضوء الأخضر ، لذلك كل شيء على ما يرام.

دعونا نرى ما إذا كان fail2ban يوافق:

 sudo fail2ban-client status 

هذا يعكس ما أنشأناه. لقد قمنا بتمكين سجن واحد ، اسمه [sshd]. إذا قمنا بتضمين اسم السجن مع أمرنا السابق ، فيمكننا إلقاء نظرة أعمق عليه:

 sudo fail2ban-client status sshd 

يسرد هذا عدد الإخفاقات وعناوين IP المحظورة. بالطبع ، كل الإحصائيات هي صفر في الوقت الحالي.

اختبار سجننا

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

الإعلانات

سيتم تشغيل قيمة maxretry بعد ثلاث محاولات اتصال فاشلة ، وليس ثلاث محاولات فاشلة لإدخال كلمة المرور. لذلك ، يتعين علينا كتابة كلمة مرور غير صحيحة ثلاث مرات لفشل محاولة الاتصال واحدة.

سنقوم بعد ذلك بمحاولة اتصال أخرى ونكتب كلمة المرور بشكل غير صحيح ثلاث مرات أخرى. يجب أن تؤدي المحاولة الأولى غير الصحيحة لكلمة المرور لطلب الاتصال الثالث إلى fail2ban.

بعد أول كلمة مرور غير صحيحة في طلب الاتصال الثالث ، لم نحصل على استجابة من الجهاز البعيد. لم نحصل على أي تفسير. نحن فقط نحصل على الكتف البارد.

يجب عليك الضغط على Ctrl + C للعودة إلى موجه الأوامر. إذا حاولنا مرة أخرى ، فسنحصل على رد مختلف:

 ssh [email protected] 

في السابق ، كانت رسالة الخطأ "تم رفض الإذن". هذه المرة ، تم رفض الاتصال تمامًا. نحن شخص غير مرغوب فيه. لقد تم حظرنا.

لنلقِ نظرة على تفاصيل سجن [sshd] مرة أخرى:

 sudo fail2ban-client status sshd 

الإعلانات

كانت هناك ثلاث حالات فشل ، وتم حظر عنوان IP واحد (192.168.4.25).

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

 sudo iptables -L 

تمت إضافة قاعدة إلى نهج INPUT ، لإرسال حركة مرور SSH إلى سلسلة f2b-sshd . ترفض القاعدة في سلسلة f2b-sshd اتصالات SSH من 192.168.4.25. لم نغير الإعداد الافتراضي لـ bantime ، لذلك ، في غضون 10 دقائق ، سيتم إلغاء حظر عنوان IP هذا ويمكنه تقديم طلبات اتصال جديدة.

إذا قمت بتعيين مدة حظر أطول (مثل عدة ساعات) ، ولكنك تريد السماح لعنوان IP بتقديم طلب اتصال آخر في وقت أقرب ، فيمكنك الإفراج المشروط عنه مبكرًا.

نكتب ما يلي للقيام بذلك:

 مجموعة sudo fail2ban-client sshd Unbanip 192.168.5.25 

على جهاز الكمبيوتر البعيد الخاص بنا ، إذا قدمنا ​​طلب اتصال SSH آخر وقمنا بكتابة كلمة المرور الصحيحة ، فسيُسمح لنا بالاتصال:

 ssh [email protected] 

بسيط وفعال

عادةً ما يكون الخيار الأبسط أفضل ، بينما يعد fail2ban حلاً أنيقًا لمشكلة صعبة. لا يتطلب الأمر سوى القليل من التكوين ولا يكاد يفرض أي عبء تشغيلي - عليك أو على جهاز الكمبيوتر الخاص بك.

ذات صلة: أفضل أجهزة كمبيوتر Linux المحمولة للمطورين والمتحمسين