انتقل إلى المحتوى الرئيسي
العودة إلى الفئة

إعداد Fail2Ban: دليل حماية SSH من هجمات Brute-Force

احمِ خادمك من هجمات SSH Brute-Force باستخدام Fail2Ban. التثبيت، إعداد jail.local، جيلات Nginx/Apache، القائمة البيضاء للـ IP، مراقبة الحظر وتنبيهات البريد الإلكتروني.

وقت القراءة: 13 دقيقة الأمان
fail2banbrute-forceأمان sshأمانlinuxiptablesnginxapache

جدول المحتويات

إعداد Fail2Ban: دليل حماية SSH من هجمات Brute-Force

هجمات SSH Brute-Force هي من أكثر التهديدات شيوعًا التي يواجهها كل خادم متصل بالإنترنت. Fail2Ban هو أداة قوية تراقب محاولات تسجيل الدخول الفاشلة وتحظر تلقائيًا عناوين IP المهاجمين. سيرشدك هذا الدليل لإعداد Fail2Ban مع حماية شاملة لـ SSH و Nginx و Apache.

ما هو Fail2Ban؟

Fail2Ban هو أداة أمان تراقب ملفات السجل وتحظر عناوين IP التي تقوم بعدد كبير من محاولات تسجيل الدخول الفاشلة خلال نافذة زمنية محددة باستخدام قواعد iptables/nftables. مكتوب بـ Python ويتضمن فلاتر جاهزة للعديد من الخدمات.

التثبيت

hljs bash
# 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:

hljs bash
# نسخ jail.conf
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

# تعديل الإعداد
sudo nano /etc/fail2ban/jail.local
hljs ini
# /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

hljs ini
# داخل /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

hljs ini
# فشل مصادقة 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

hljs ini
# فشل مصادقة 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

hljs ini
[DEFAULT]
# يمكن إضافة عدة IPs أو شبكات فرعية
ignoreip = 127.0.0.1/8 ::1 10.0.0.0/8 192.168.0.0/16 203.0.113.1
hljs bash
# إعادة تحميل الإعداد
sudo fail2ban-client reload

# التحقق من القائمة البيضاء
sudo fail2ban-client get sshd ignoreip

مراقبة الـ IPs المحظورة

hljs bash
# عرض حالة جميع الجيلات
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

hljs bash
# حظر 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

إشعارات البريد الإلكتروني

hljs ini
[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. راقب ملفات السجل بانتظام وأضف الحظر الإيجابي الكاذب إلى القائمة البيضاء.