النقاط الرئيسية
- fail2ban عبارة عن أداة أمان ذاتية التنظيم لنظام Linux تعمل على حظر عناوين IP تلقائيًا في حالة حدوث العديد من حالات فشل الاتصال.
- يتكامل مع جدار حماية Linux (iptables) وينفذ عمليات الحظر عن طريق إضافة قواعد إلى جدار الحماية، مع ترك وظائف جدار الحماية العادية دون مساس.
- يمكن تكوين fail2ban عن طريق نسخ ملف التكوين الافتراضي إلى ملف جديد يسمى jail.local، حيث يمكنك إجراء التخصيصات التي تستمر عبر الترقيات.
مع fail2ban
يقوم جهاز الكمبيوتر الذي يعمل بنظام Linux الخاص بك تلقائيًا بحظر عناوين IP التي بها عدد كبير جدًا من حالات فشل الاتصال. إنها أمان منظم ذاتيًا! سنوضح لك كيفية استخدامها.
تم تقديم هذه المقالة الخاصة بأسبوع التوعية بالأمن السيبراني إليك بالتعاون مع Incogni .
ما هو fail2ban؟
Fail2ban هي أداة مساعدة تعمل تلقائيًا على حظر عنوان IP إذا حاول الاتصال بالخادم عدة مرات وفشل في ذلك.
عندما يحاول شخص ما الاتصال بخادمك — سواء كان خادم SSH أو خادم ويب أو بريد إلكتروني أو خادم Minecraft — فإنه عادة ما يُطلب منه إدخال اسم مستخدم وكلمة مرور قبل السماح له بالوصول. ولن يتمكن الأشخاص العاديون الذين يدخلون (أو يخمنون) تفاصيل حساباتهم فعليًا من إدخال أكثر من محاولة واحدة كل بضع ثوانٍ في أسرع وقت. وعندما يتم إدخال بيانات الاعتماد بشكل أسرع وبتكرار أكبر من ذلك، فهذه علامة على وجود مشكلة — فقد يقوم شخص ما بتشغيل هجوم بالقوة الغاشمة على جهاز كمبيوتر آخر لمحاولة اقتحامه.
لاكتشاف هجوم القوة الغاشمة، تحتاج إلى مراقبة طلبات الاتصال التي تفشل في الوصول إلى حساب. بمجرد تحديد هوية المهاجم، يجب منعه من القيام بمحاولات أخرى.
الطريقة الوحيدة لتحقيق ذلك عمليًا هي أتمتة العملية بأكملها. من خلال القليل من التكوين البسيط، fail2ban
سوف تدير المراقبة والحظر وإلغاء الحظر لك.
fail2ban
يتكامل مع جدار الحماية لينكسiptables
. إنه يفرض الحظر على عناوين IP المشتبه بها عن طريق إضافة قواعد إلى جدار الحماية. وللحفاظ على هذا الشرح واضحًا، نستخدم iptables
مع مجموعة قواعد فارغة.
بالطبع، إذا كنت مهتمًا بالأمان، فمن المحتمل أن يكون لديك جدار حماية تم تكوينه بمجموعة قواعد مكتظة. fail2ban
فقط يضيف ويزيل قواعده الخاصة — ستظل وظائف جدار الحماية العادية لديك دون مساس.
يمكننا رؤية مجموعة القواعد الفارغة لدينا باستخدام هذا الأمر:
sudo iptables -L
تثبيت fail2ban
التثبيت fail2ban
الأمر بسيط في جميع التوزيعات التي استخدمناها للبحث في هذه المقالة. في Ubuntu 20.04، يكون الأمر كما يلي:
sudo apt-get install fail2ban
في فيدورا 32، اكتب:
sudo dnf install fail2ban
في Manjaro 20.0.1، استخدمنا 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
سنبحث عن قسمين في الملف: (DEFAULT) و(sshd). لكن احرص على العثور على الأقسام الفعلية. تظهر هذه العلامات أيضًا بالقرب من الجزء العلوي في القسم الذي يصفها، لكن هذا ليس ما نريده.
ستجد قسم (DEFAULT) في مكان ما حول السطر 40. إنه قسم طويل يحتوي على الكثير من التعليقات والشروحات.
قم بالتمرير إلى الأسفل حتى السطر 90، وستجد الإعدادات الأربعة التالية التي تحتاج إلى معرفتها:
- تجاهل: قائمة بيضاء بعناوين IP التي لن يتم حظرها أبدًا. لديهم بطاقة خروج مجانية دائمة من السجن. عنوان IP المحلي (
127.0.0.1
) موجود في القائمة بشكل افتراضي، إلى جانب نظيره IPv6 (::1
إذا كان هناك عناوين IP أخرى تعلم أنه لا ينبغي حظرها أبدًا، فأضفها إلى هذه القائمة واترك مسافة بين كل عنوان. - وقت الحظر: المدة التي يتم حظر عنوان IP خلالها (يرمز “m” إلى الدقائق). إذا كتبت قيمة بدون “m” أو “h” (للساعات)، فسيتم التعامل معها على أنها ثوانٍ. ستؤدي القيمة -1 إلى حظر عنوان IP بشكل دائم. كن حذرًا للغاية حتى لا تحظر نفسك بشكل دائم.
- وقت البحث: مقدار الوقت الذي ستؤدي فيه محاولات الاتصال الفاشلة الكثيرة إلى حظر عنوان IP.
- أقصى محاولة: القيمة الخاصة بـ “عدد كبير جدًا من المحاولات الفاشلة”.
إذا تم إجراء اتصال من نفس عنوان IP maxretry
محاولات الاتصال الفاشلة داخل findtime
الفترة، يتم حظرهم طوال مدة bantime
الاستثناءات الوحيدة هي عناوين IP الموجودة في ignoreip
قائمة.
fail2ban
يضع عناوين IP في السجن لفترة زمنية محددة. fail2ban
يدعم العديد من السجون المختلفة، ويمثل كل منها تطبيق الإعدادات على نوع اتصال واحد. يتيح لك هذا الحصول على إعدادات مختلفة لأنواع اتصال مختلفة. أو يمكنك الحصول على fail2ban
قم بمراقبة مجموعة مختارة فقط من أنواع الاتصال.
ربما تكون قد خمنت ذلك من اسم القسم (DEFAULT)، ولكن الإعدادات التي نظرنا إليها هي الإعدادات الافتراضية. الآن، دعنا نلقي نظرة على إعدادات سجن SSH.
تكوين السجن
تتيح لك السجون نقل أنواع الاتصال داخل وخارج fail2ban's
المراقبة. إذا كانت الإعدادات الافتراضية لا تتطابق مع تلك التي تريد تطبيقها على السجن، فيمكنك تعيين قيم محددة لـ bantime
, findtime
، و maxretry
.
قم بالتمرير إلى الأسفل حتى السطر رقم 280، وسوف ترى قسم (sshd).
هنا يمكنك تعيين قيم سجن اتصال SSH. لتضمين هذا السجن في المراقبة والحظر، يتعين علينا كتابة السطر التالي:
enabled = true
ونكتب هذا السطر أيضًا:
maxretry = 3
كان الإعداد الافتراضي هو خمسة، ولكننا نريد أن نكون أكثر حذرًا مع اتصالات SSH. قمنا بخفضه إلى ثلاثة، ثم قمنا بحفظ الملف وإغلاقه.
لقد أضفنا هذا السجن إلى fail2ban's
المراقبة، وتجاوز أحد الإعدادات الافتراضية. يمكن للسجن استخدام مجموعة من الإعدادات الافتراضية والإعدادات الخاصة بالسجن.
تمكين fail2ban
حتى الآن، قمنا بالتثبيت fail2ban
وقمنا بتكوينه. الآن، علينا تمكينه من العمل كخدمة بدء تشغيل تلقائي. بعد ذلك، نحتاج إلى اختباره للتأكد من أنه يعمل كما هو متوقع.
لتمكين fail2ban
كخدمة، نستخدم systemctl
يأمر:
sudo systemctl enable fail2ban
نستخدمه أيضًا لبدء الخدمة:
sudo systemctl start 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 dave@ubuntu20-04.local
في السابق، كانت رسالة الخطأ “رفض الإذن”. هذه المرة، تم رفض الاتصال تمامًا. نحن أشخاص غير مرغوب فيهم. لقد تم حظرنا.
دعونا نلقي نظرة على تفاصيل سجن (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 set sshd unbanip 192.168.5.25
على جهاز الكمبيوتر البعيد الخاص بنا، إذا قمنا بإجراء طلب اتصال SSH آخر وكتبنا كلمة المرور الصحيحة، فسوف يُسمح لنا بالاتصال:
ssh dave@ubuntu20-04.local
بسيطة وفعالة
الأبسط هو الأفضل عادةً، fail2ban
يعد هذا حلاً أنيقًا لمشكلة معقدة. فهو لا يتطلب سوى قدر ضئيل من التكوين ولا يفرض أي تكاليف تشغيلية تقريبًا – عليك أو على جهاز الكمبيوتر الخاص بك.