يراقب fail2ban ملفّ سجلّ بحثًا عن نمط، ويعدّ المطابقات لكل عنوان، ويضيف قاعدة جدار ناريّ حين يُتجاوز العدد. هذا كل ما يفعله، ومعرفة ذلك تقول لك بالضبط في ماذا ينفع وفي ماذا لا ينفع.
ما يوقفه
- محاولات كلمة مرور SSH المتكرّرة — وإن كانت المفاتيح توقفها أصلًا.
- ومحاولات الدخول الفاشلة المتكرّرة على نموذج، إن كانت تُسجَّل.
- والماسحات البسيطة التي تمشي على قائمة مسارات معروفة.
وما لا يوقفه
هو ردّ فعل: يتحرّك بعد عدّة إخفاقات، فلا يرى تخمينًا ناجحًا واحدًا أبدًا. ولا ينفع كذلك أمام محاولةٍ موزّعة على ألف عنوان، كلٌّ منها يجرّب مرّتين — وهكذا تبدو المحاولة الجادّة.
زنزانةٌ لتسجيل دخول عبر الويب
# /etc/fail2ban/filter.d/mysite-login.conf
[Definition]
failregex = ^<HOST> .* "POST /login" 401
ignoreregex =
# /etc/fail2ban/jail.local
[mysite-login]
enabled = true
filter = mysite-login
logpath = /var/log/nginx/access.log
maxretry = 5
findtime = 600
bantime = 3600
جرّب النمط قبل التفعيل
fail2ban-regex /var/log/nginx/access.log /etc/fail2ban/filter.d/mysite-login.conf
يطبع كم سطرًا طابق. وصفرُ مطابقات يعني أن الزنزانة لن تنطلق أبدًا وأنك ستظنّ نفسك محميًّا.
ولا تحظر نفسك
ignoreip = 127.0.0.1/8 ::1 YOUR.OFFICE.IP.HERE
خلف شبكة توزيع يحمل كل طلبٍ عنوان الوسيط، فأوّل حظرٍ يحجب الوسيط ومعه كل زائر عندك. اضبط عنوان العميل الحقيقيّ أوّلًا — انظر المقال عن الوجود خلف شبكة توزيع.
fail2ban-client status mysite-login
fail2ban-client set mysite-login unbanip 1.2.3.4
وابدأ بحظرٍ ساعةً واحدة لا بحظر دائم. فقائمة الحظر الدائم تكبر ولا تُراجَع أبدًا، وينتهي بها الأمر إلى أن تضمّ عميلًا.