fail2ban كيف يعالج Fail2ban ملفات الضبط لتنفيذ الحظر


طريف

تحدثنا في الدرس السابق عن الآلية التي تعمل وفقها خدمة fail2ban لحماية خوادم لينكس حيث تحظر أرقام IP المُسيئة التي تحاول اختراق خدمة ما عبر محاولات دخول متكرّرة باستخدام حسابات شائعة. وفصلنا في شرح ملفات الضبط الخاصة بكل من المُرشّح والإجراءات. 

fail2ban-intro-2.thumb.png.5b1471fc48f01

نشرح في هذا الدرس ما يحدث عندما تبدأ خدمة fail2ban بالعمل.

تحميل ملفات الضبط الأولى

في البداية يُقرأ ملف fail2ban.conf الرئيسي لتحديد الشروط التي يجب أن تُنفَّذ العمليّة الرئيسيّة وفقها، ويتم إنشاء كلّ ما يلزم لذلك كالمقابس socket، ملفات السجل log files، وقيم PID. 
يقرأ fail2ban بعد ذلك الملف jail.conf للحصول على تفاصيل الضبط، وهذا يعني قراءة ملفات الضبط الموجودة ضمن الدليل jail.d والمنتهية باللاحقة conf. تبعًا للترتيب الأبجدي، بحيث تُضاف الإعدادات الموجودة ضمن هذه الملفات إلى الضبط الداخلي وتُكتب القيم الجديدة للخصائص على تلك الموصوفة في ملف jail.conf
يبحث fail2ban بعد ذلك عن ملف jail.local ويكرّر ذلك مُتكيفًا مع القيم الجديدة التي تحملها. أخيرًا فإنه يبحث في الدليل jail.d مرةً أخرى لقراءة الملفات ذات اللاحقة local. حسب الترتيب الأبجدي. 
وبهذه الطريقة نرى أن fail2ban يملك عددًا كبيرًا من الملفات التي يمكن استخدامها للتحكّم بالسلوك النهائي للبرنامج. وفي حالتنا هذه نحن نملك الملفين jail.conf و jail.local فقط، حيث وضعنا في الملف jail.local القيم التي نحتاج فقط لأن تكون مغايرة عن تلك الموجودة في jail.conf
في المحصلة يملك fail2ban الآن مجموعة من التعليمات التي يمكن تحميلها إلى الذاكرة وتُمثّل مزيجًا مُركبًا من جميع الملفات التي تمكّن من العثور عليها. 
يفحص البرنامج بعد ذلك كل قسم باحثًا عن عبارة enabled = true، فإذا وجدها في قسمٍ ما فإنّه يقرأ المُعاملات المكتوبة فيه لبناء خطّة عمله وتحديد ما يلزم من الإجراءات، بينما تُستخدم المُعاملات الموجودة في المقطع الافتراضي [DEFAULT] لتلك التي لا تملك تعريفًا خاصًا في أقسام الخدمات.

تحليل ملفات الإجراء لتحديد إجراءات البداية

يبحث fail2ban عن action موجِّه لمعرفة سيناريو العمل بهدف تنفيذ سياسات الحظر أو رفعه. فإذا لم يجد واحدًا فإنه يعود إلى الإجراء الافتراضي الموضّح أعلاه. 
يتكّون الإجراء الموجّه من اسم ملف(ات) الإجراء التي ستُقرأ، فضلًا عن قاموس قيم المفاتيح key-value التي تُمرّر المُعاملات اللازمة لتلك الملفات، وغالبًا ما تأخذ هذه القيم شكل مُعاملات الاستبدال عن طريق الرجوع إلى الإعدادات المضبوطة في قسم الخدمة. ويُمرّر مفتاح name قيمة المتغيّر __name__ التي ستُعيّن كقيمة لترويسة القسم. 
بعد ذلك يستخدم fail2ban هذه المعلومات للعثور على الملفات المرتبطة بها في الدليل action.d، حيث يبحث في المقام الأوّل عن الملفات ذات اللاحقة conf. ثم يُعدّل المعلومات الموجودة فيها مع الإعدادات المُضمّنة في الملفات ذات اللاحقة local. والموجودة أيضًا في الدليل نفسه.
تُحلّل تلك الملفات لتحديد الإجراءات الواجب تنفيذها، حيث تُقرأ قيمة actionstart لمعرفة الإجراءات التي يجب اتخاذها لإعداد بيئة العمل، والتي غالبًا ما تشمل على إنشاء صيغة لجدار الحماية بهدف استيعاب قواعد الحظر. 
تستخدم الإجراءات المُعرّفة في هذا الملف المُعاملات التي تُمرّر إليها من قبل الإجراء المُوجّه، إذ تُستخدم هذه القيم لإنشاء القواعد المناسبة بشكلٍ حيويّ. وإذا لم يتم تعريف متغيّر ما فإنه يمكن النظر إلى القيم الافتراضية في ملف الإجراء حينها.

تحليل ملفات المرشح لتحديد قواعد التصفية

تشمل مُعاملات الخدمة الموجودة في ملفات jail.* مسار ملف السجل، إضافةً إلى آلية الانتخاب التي يجب استخدامها لفحص الملف (والتي تُعرّف بواسطة الخيار backend)، كما تضم المُرشّح filter الذي يجب استعماله لتحديد الأسطر المُمثّلة لحالات فشل المصادقة. 
يبحث fail2ban في الدليل filter.d عن ملف المُرشّح ذو اللاحقة conf.. يُقرأ هذا الملف لتعريف الأنماط التي يمكن استخدامها لمطابقة الأسطر المُسيئة، ثم يقوم البرنامج بالبحث عن ملف المرشح ذو اللاحقة local. لمعرفة فيما إذا كان أيٍ من المُعاملات الافتراضية قد حصل على قيمة أخرى، تُستخدم في هذه الملفات التعابير النمطيّة المعرّفة. 
يقوم fail2ban بقراءة ملف سجل الخدمة. حيث يحاول كل سطر failregex مُعرّف في ملفات filter.d مقابلة كل سطر جديد يكتب إلى ملف سجل الخدمة. 
إذا ضُبط عنوان IP مُسيء عن طريق إرجاع التعبير النمطي لمطابقة فإنّه يتحقق أولًا من مطابقته كذلك مع التعبير النمطي المُعرّف بواسطة ignoreregex، فإذا تمت المطابقة معه أيضًا يتجاهل fail2ban الأمر، وإلا يزداد العداد الداخلي للعميل الذي تسبّب بالمطابقة ويتم إنشاء طابع زمني مرتبط بهذا الحدث. 
عندما يبلغ الإطار الزمني المُحدد بواسطة المُعامل findtime في ملفات jail.* نهايته (على النحو الذي يُحدّده الطابع الزمني للحدث)، يتم إهمال العدّاد الداخلي مجددًا، ولا يُعتبر هذا الحدث ذو صلة بسياسة الحظر. 
أما إذا وقعت محاولة ولوج فاشلة إضافية خلال الوقت المُحدّد يزداد العداد الداخلي مرة أخرى، فإذا ما وصل العداد إلى عتبة الفشل المُحدّدة من قبل الخيار maxretry ضمن الإطار الزمني المضبوط يُنفّذ fail2ban خطّة الحظر عبر استدعاء الإجراء actioncheck للخدمة المُعرّفة في ملفات action.d/، وهذا يُحدّد فيما إذا كان إجراء actionstart أعدّ الصيغة اللازمة. وبعد ذلك يُدعى الإجراء actionban لحظر العميل المُسيء مُحدّدا الطابع الزمني لهذا الحدث كذلك. 
بعد انقضاء الوقت المُحدّد من قبل المُعامل bantime؛ يرفع fail2ban الحظر عن العميل عبر استدعاء الإجراء actionunban
عندما تتوقف خدمة fail2ban فإنها تحذف قواعد جدار الحماية التي تمّ إنشائها من قبل الإجراء actionstop، الأمر الذي يحذف السلسلة الحاوية على قواعد fail2ban ويحذف القواعد من سلسلة INPUT والتي كانت تنقل حركة مرور البيانات إلى تلك السلسلة.

خاتمة

هكذا نأمل أن تكون قد امتلكت فهمًا عميقًا لآلية عمل fail2ban، وفي العموم فإن التعامل مع هذه الخدمة ليس بالأمر الصعب بالنسبة لأغلب المستخدمين؛ فمعظم مهمات الضبط تكون مُعدّة بشكل مسبق، ومع هذا فإذا أردت التعديل على إعدادات الضبط الافتراضية فسيكون من المفيد لك أن تتعرف على كيفية عمل fail2ban لتسهيل التعديل بما يتلاءم مع احتياجاتك.

ترجمة -وبتصرف- للمقال How the Fail2ban Service Processes Configuration Files to Implement Bans لصاحبه Justin Ellingwood.





تفاعل الأعضاء


لا توجد أيّة تعليقات بعد



يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن