إعداد Fail2Ban: دليل حماية SSH من هجمات Brute-Force
احمِ خادمك من هجمات SSH Brute-Force باستخدام Fail2Ban. التثبيت، إعداد jail.local، جيلات Nginx/Apache، القائمة البيضاء للـ IP، مراقبة الحظر وتنبيهات البريد الإلكتروني.
جدول المحتويات
إعداد Fail2Ban: دليل حماية SSH من هجمات Brute-Force
هجمات SSH Brute-Force هي من أكثر التهديدات شيوعًا التي يواجهها كل خادم متصل بالإنترنت. Fail2Ban هو أداة قوية تراقب محاولات تسجيل الدخول الفاشلة وتحظر تلقائيًا عناوين IP المهاجمين. سيرشدك هذا الدليل لإعداد Fail2Ban مع حماية شاملة لـ SSH و Nginx و Apache.
ما هو Fail2Ban؟
Fail2Ban هو أداة أمان تراقب ملفات السجل وتحظر عناوين IP التي تقوم بعدد كبير من محاولات تسجيل الدخول الفاشلة خلال نافذة زمنية محددة باستخدام قواعد iptables/nftables. مكتوب بـ Python ويتضمن فلاتر جاهزة للعديد من الخدمات.
التثبيت
# Ubuntu/Debian
sudo apt update
sudo apt install fail2ban -y
# CentOS/AlmaLinux/Rocky Linux
sudo dnf install epel-release -y
sudo dnf install fail2ban -y
# تشغيل خدمة Fail2Ban
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
# فحص الحالة
sudo systemctl status fail2ban
إعداد jail.local
ملف الإعداد الرئيسي لـ Fail2Ban هو jail.conf. لكن لا تعدّله مباشرة — قد يُستبدل أثناء التحديثات. بدلًا من ذلك، أنشئ ملف jail.local:
# نسخ jail.conf
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# تعديل الإعداد
sudo nano /etc/fail2ban/jail.local
# /etc/fail2ban/jail.local
[DEFAULT]
# مدة الحظر (ثانية) — ساعة واحدة
bantime = 3600
# نافذة الاكتشاف (ثانية) — 10 دقائق
findtime = 600
# الحد الأقصى للمحاولات الفاشلة
maxretry = 5
# مستوى السجل
loglevel = INFO
# هدف السجل
logtarget = /var/log/fail2ban.log
# إشعار البريد الإلكتروني
destemail = admin@example.com
sender = fail2ban@example.com
mta = sendmail
# الإجراء — حظر وإرسال بريد إلكتروني
action = %(action_mwl)s
# القائمة البيضاء — هذه الـ IPs لن تُحظر أبدًا
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24
إعداد SSH Jail
# داخل /etc/fail2ban/jail.local
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 86400 # 24 ساعة
findtime = 600
لـ SSH، يُنصح بـ maxretry = 3 و bantime = 86400 (24 ساعة). هذا يسمح للمهاجمين بـ 3 محاولات فقط يوميًا.
إعداد Nginx Jails
# فشل مصادقة HTTP لـ Nginx
[nginx-http-auth]
enabled = true
port = http,https
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 5
bantime = 3600
# انتهاك تحديد معدل Nginx
[nginx-limit-req]
enabled = true
port = http,https
filter = nginx-limit-req
logpath = /var/log/nginx/error.log
maxretry = 10
bantime = 600
# حماية من فيضان 404 لـ Nginx
[nginx-404]
enabled = true
port = http,https
filter = nginx-404
logpath = /var/log/nginx/access.log
maxretry = 20
findtime = 60
bantime = 3600
إعداد Apache Jails
# فشل مصادقة Apache
[apache-auth]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache2/error.log
maxretry = 5
bantime = 3600
# بوتات سيئة لـ Apache
[apache-badbots]
enabled = true
port = http,https
filter = apache-badbots
logpath = /var/log/apache2/access.log
maxretry = 2
bantime = 86400
القائمة البيضاء للـ IP
[DEFAULT]
# يمكن إضافة عدة IPs أو شبكات فرعية
ignoreip = 127.0.0.1/8 ::1 10.0.0.0/8 192.168.0.0/16 203.0.113.1
# إعادة تحميل الإعداد
sudo fail2ban-client reload
# التحقق من القائمة البيضاء
sudo fail2ban-client get sshd ignoreip
مراقبة الـ IPs المحظورة
# عرض حالة جميع الجيلات
sudo fail2ban-client status
# عرض حالة جيل محدد
sudo fail2ban-client status sshd
# قائمة الـ IPs المحظورة
sudo fail2ban-client status sshd | grep "Banned IP"
# مراقبة ملف السجل
sudo tail -f /var/log/fail2ban.log
# تصفية أحداث الحظر الأخيرة
sudo grep "Ban" /var/log/fail2ban.log | tail -20
حظر وإلغاء حظر الـ IPs
# حظر IP يدويًا
sudo fail2ban-client set sshd banip 1.2.3.4
# إلغاء حظر IP
sudo fail2ban-client set sshd unbanip 1.2.3.4
# إزالة جميع الحظر (استخدم بحذر!)
sudo fail2ban-client unban --all
إشعارات البريد الإلكتروني
[DEFAULT]
destemail = admin@example.com
sender = fail2ban@yourdomain.com
mta = sendmail
# خيارات الإجراء:
# action_ = حظر فقط
# action_mw = حظر + بريد إلكتروني
# action_mwl = حظر + بريد إلكتروني + whois + سطور السجل
action = %(action_mwl)s
الإعدادات العدوانية جدًا (maxretry منخفض، bantime طويل) يمكن أن تحظر المستخدمين الشرعيين أيضًا. لـ SSH، maxretry=3-5 و bantime=3600-86400 نهج متوازن.
الخلاصة
Fail2Ban جزء لا غنى عنه من أمان الخادم. عند إعداده بشكل صحيح لـ SSH و Nginx و Apache، يقلل بشكل كبير من هجمات Brute-Force. راقب ملفات السجل بانتظام وأضف الحظر الإيجابي الكاذب إلى القائمة البيضاء.
مقالات ذات صلة
فحص البرامج الضارة والـ Rootkit: دليل rkhunter و ClamAV
احمِ خادم Linux من البرامج الضارة والـ Rootkit. تثبيت rkhunter و ClamAV، إعداد الفحص، تفسير النتائج، الفحص المجدول والاستجابة للحوادث.
إعداد خادم WireGuard VPN: دليل خطوة بخطوة
أنشئ خادم WireGuard VPN: توليد المفاتيح، إعداد الخادم والعميل، توجيه IP، قواعد جدار الحماية وإعداد عملاء Windows/Linux/Android.
أمان شبكة Zero Trust: دليل الإعداد الأساسي
مبادئ أمان شبكة Zero Trust والتطبيق العملي: لا تثق أبدًا تحقق دائمًا، التجزئة الدقيقة، الوصول القائم على الهوية والتطبيق بأدوات Linux الموجودة.