Mod_evasive عبارة عن Apache module كان يعرف سابقاً باسم mod_dosevasive وهو يساعد في الحماية ضد هجمات حجب الخدمة DoS – Denial of Service  وهجمات منع الخدمة الموزعة DDoS – Distributed Denial of Service  وهجمات القوة الغاشمة brute force التي تستهدف سيرفر الويب Apache web server حيث يقوم بإرسال تقارير عن هذه الحالات عبر البريد الالكتروني وتسجيلها في سجلات النظام  syslog.

هذه الأداة تعمل من خلال خلق جدول داخلي متغير لعناوين IP and URL وتقوم بمنع أي عنوان IP منفرد من القيام بالأمور التالية:

  • طلب نفس الصفحة أكثر من مرة خلال ثانية واحدة

  • عمل أكثر من 50 طلب متزامن لنفس العملية خلال ثانية واحدة

  • عمل أي طلبات أثناء فترة الحظر أو المنع المؤقتة

في حال تم القيام بإحدى الأمور السابقة فسوف يقوم السيرفر بالإجابة من خلال إرسال كود الحالة 403 وسيتم تسجيل عنوان IP الخاص بهذا الطلب في log file.

ويمكن لمدير السيرفر تفعيل خاصية التنبيه من خلال إرسال رسائل عن الحالات المشبوهة إلى عنوان بريد إلكتروني يتم تحديده مسبقاً، كما يمكن لمدير السيرفر ضبط تعليمات خاصة لتقوم بمنع أو حظر عنوان IP الخاص بالمهاجم.

سنتعرف على عملية تنصيب وإعداد واستخدام mod-evasive على السيرفر :

المتطلبات:


قبل البدء بهذه العملية يجب أن تملك الأمور التالية:

  • نظام تشغيل CentOS 7 64-bit (يمكن أن يكون CentOS 6)

  • مستخدم بصلاحيات عادية non-root user قادر على استخدام صلاحيات sudo

  • سيرفر أباتشي Apache web server

 

الخطوة 1: تنصيب mod_evasive :

سنقوم بتنصيب الحزم packages المطلوبة لعمل mod_evasive ومن ثم نقوم بتنصيب mod_evasive,  في البداية يجب أن نقوم بتنصيب EPEL yum repository

EPEL – Extra Packages for Enterprise Linux (مجموعة مختصة بتوزيعه فيدورا Fedora تقوم بإنشاء وإدارة مجموعة من حزم التطبيقات المفتوحة المصدر الخاصة بنظام التشغيل Linux) .

عملية تنصيب هذا المستودع EPEL repository على السيرفر تتم باستخدام التعليمة التالية:

 CentOS 7

sudo rpm -ivh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm

CentOS 6

sudo rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

للتأكد من تفعيل هذا المستودع نستخدم التعليمة التالية:

sudo yum repolist

إذا تمت عملية إضافة هذا المستودع بنجاح يجب أن نرى اسمه في نتيجة تنفيذ التعليمة السابقة بشكل مشابه للنص التالي:

epel/x86_64                                           Extra Packages for Enterprise Linux 7 – x86_64

للقيام بحماية الحزم الأساسية الخاصة بهذا المستودع باستخدام الإضافة plugin portecbase يمكننا استخدام التعليمة التالية:

sudo yum install yum-plugin-protectbase.noarch –y

الغاية من استخدام الإضافة protectbase plugin هو حماية مستودعات محددة من عملية التحديث لمستودعات أخرى , حزم التطبيقات الموجودة في المستودعات المحمية لن يتم تحديثها أو الكتابة فوقها أو استبدالها بحزم أخرى من مستودعات غير محمية حتى ولو كانت ذات إصدار إحدث.

الان يمكننا تنصيب mod_evasive module باستخدام التعليمة التالية:

sudo yum install mod_evasive –y

الخطوة 2: التحقق من عملية التنصيب :

بعد الانتهاء من عملية التنصيب لنقم بالتحقق من أن ملف الإعدادات تم تنصيبه والتحقق من أن الوحدات اللازمة قد تم تحميلها, خلال عملية التنصيب سيتم إضافة ملف الإعدادات ضمن المسار التالي:

etc/httpd/conf.d/mod_evasive.conf/

للتأكد من ذلك يمكننا استخدام التعليمة:

sudo ls -al /etc/httpd/conf.d/mod_evasive.conf

النتيجة ستكون بشكل مشابه للتالي:

rw-r–r– 1 root root 3473 Jul 21 01:41 /etc/httpd/conf.d/mod_evasive.conf-

بشكل افتراضي يتم إضافة سطر يحوي على العبارة LoadModule لبداية ملف الإعدادات mod_evasive.conf , قم بفتح هذا الملف وقم بإضافة هذه العبارة إن لم تكن موجوه، هذه العبارة تجعل سيرفر الأباتشي يقوم بتحميل واستخدام mod_evasive module.

في CentOS 7 يجب أن يحوي ملف الإعدادات:

etc/httpd/conf.d/mod_evasive.conf/

على السطر التالي:

LoadModule evasive20_module modules/mod_evasive24.so

وفي CentOS 6 يجب أن يحوي ملف الإعدادات:

etc/httpd/conf.d/mod_evasive.conf/

على السطر التالي:

LoadModule evasive20_module modules/mod_evasive20.so

التعليمة التالية تقوم بعرض الوحدات الخاصة بسيرفر الأباتشي وتبحث عن mod_evasive module

sudo httpd -M | grep evasive

نتيجة تنفيذ التعليمة السابقة يجب أن تحوي على السطر التالي:

evasive20_module (shared)

الخطوة 3 إعداد Mod_evasive:

بعد الانتهاء من عملية التنصيب والتحقق يمكننا إعداد mod_evasive بسهولة من خلال ملف الإعدادات mod_evasive.conf

سوف نناقش بعض بارامترات الإعدادات الرئيسية:

DOSEmailNotify: إذا تم ضبط هذه القيمة سوف يتم إرسال رسائل عبر البريد الالكتروني لعنوان يتم تحديده مسبقاً للإعلام عن عمليات حظر أو منع لعنوان IP الذي قام بمخالفة القواعد المطبقة (محاولة هجوم)

نص رسالة البريد الالكتروني يكون كالتالي:

mod_evasive HTTP Blacklisted 111.111.111.111

إذا كنا نريد إعداد mod_evasive ليقوم بإرسال التنبيهات إلى عنوان البريد الالكتروني example@example.com يجب أن نقوم بتعديل ملف الإعدادات من خلال فتح هذا الملف باستخدام محرر النصوص nano (يمكن أن يكون أي محرر نصوص أخر)

sudo nano /etc/httpd/conf.d/mod_evasive.conf

ومن ثم إزالة الإشارة # قبل DOSEmailNotify وكتابة عنوان البريد الالكتروني

DOSEmailNotify exaple@example.com

تنبه : mod_avasive يستخدم /bin/mail في عملية الإرسال، يجب أن يكون mail server منصب مسبقاً ويعمل بشكل جيد.

DOSWhitlist: استخدام هذا الخيار مع عناوين IP موثوقة يسمح لهذه العنوان بالقيام بالأمور الممنوعة، الهدف من هذه العملية هو السماح لبرامج الحماية و السكريبتات الخاصة والأدوات الأخرى التي يستخدمها مدير السيرفر بالعمل دون أن يتم منعها في حال قامت بطلبات متكررة من السيرفر.

إضافة العنوان IP: 111.111.111.111 إلى whitelist تتم من خلال تعديل محتوى ملف الإعدادات:

etc/httpd/conf.d/mod_evasive.conf/

ليحوي على السطر التالي:

DOSWhitelist 111.111.111.111

يمكن أن نقوم بالسماح لمجال عناوين محدد من خلال كتابة أول ثلاث أجزاء من عنوان IP إذا لزم الأمر , للسماح لأكثر من عنوان IP ضمن مجالات مختلفة يمكن أن نستخدم أسطر متعددة كما في المثال التالي:

DOSWhitelist 111.111.111.111

DOSWhitelist 222.222.222.222

البرامترين DOSPagCount و DOSSiteCount ينصح بتغير قيمهم لتجنب حالات الحجب الغير ضرورية للمستخدمين العاديين.

DOSPageCount: يحدد عدد الطلبات من نفس عنوان IP لنفس الصفحة خلال فترة زمنية محددة (عادةً ما تكون ثانية واحدة) وفي حال تجاوز عدد المرات المسموح به فسوف يتم إضافة عنوان IP إلى قائمة الحظر.

القيمة الافتراضية هي 2 ويمكن تغيرها إلى 20 من خلال تعديل محتوى الملف:

etc/httpd/conf.d/mod_evasive.conf/

ليحوي على السطر التالي:

DOSPageCount 20

DOSSiteCount: يحدد العدد الكلي للطلبات لصفحات موقع محدد من قبل نفس عنوان IP وذلك خلال فترة زمنية محدد (القيمة الافتراضية هي ثانية واحدة) , لتغير هذه القيمة لتصبح 100 من خلال تعديل محتوى الملف:

etc/httpd/conf.d/mod_evasive.conf/

ليحوى على السطر التالي:

DOSSiteCount 100

يوجد بعض البارامترات الأخرى التي يمكن تعديلها للحصول على أداء أفضل.

DOSBlockingPeriod: يحدد الفترة الزمنية بالثانية لمدة حظر عنوان IP لمستخدم معين في حال قام بمخالفة القواعد المطبقة وتمت إضافته إلى قائمة الحظر، وخلال هذه الفترة (فترة الحظر) كل الطلبات المشبوه القادمة من هذا المستخدم سوف يتم الإجابة عليها برسالة الخطأ 403 (forbidden). القيمة الافتراضية لمدة الحظر هي 10 ثانية.

لزيادة هذه المدة لتصبح 300 ثانية يمكننا تعديل ملف الإعدادات:

etc/httpd/conf.d/mod_evasive.conf/

ليحوي على السطر التالي:

DOSBlockingPeriod 300

:DOSLogDir يحدد مسار مجلد مؤقت ليتم استخدامه من قبل mod_evasive بشكل افتراضي يتم استخدام tem وهذا يمكن أن يؤدي إلى بعض المشاكل في الحماية, إذا كان النظام مفتوح للمستخدمين (المستخدم يملك shell بصلاحية المستخدم العادي) فيجب أن نقوم بإنشاء مجلد والسماح فقط بالكتابة فيه من قبل المستخدم الذي يستخدم سيرفر الأباتشي (عادةً يكون باسم apache) ومن ثم ضبط هذا البارامتر لمسار هذا المجلد.

مثال: من أجل ضبط mod-evasive لتقوم باستخدام المجلد:

var/log/mod_evasive/

نقوم أولاً بإنشاء هذا المجلد باستخدام التعليمة التالية:

sudo mkdir /var/log/mod_evasive

ومن ثم تحديد ملكية هذا المجلد ليكون تابع للمستخدم apache

sudo chown -R apache:apache /var/log/mod_evasive

ومن ثم تعديل ملف الإعدادات:

etc/httpd/conf.d/mod_evasive.conf/

ليحوي على السطر التالي:

DOSLogDir “/var/log/mod_evasive”

DOSSystemCommand:  يمكن تحديد قيمة لهذا البارامتر تكون على شكل تعليمة معينة ليتم تنفيذها في كل مرة يتم فيها إضافة عنوان IP إلى قائمة الحظر. استخدام هذا البارامتر يمكن أن يتم بشكل مشترك مع الجدار الناري (في حال وجوده) أو يمكن أن يعمل لتنفيذ shell script

الخطوة 4 تفعيلmod_evasivemodul :

بعد إجراء التعديلات السابقة في ملف الإعدادات يجب أن نقوم بإعادة تشغيل سيرفر الاباتشي ليتم تفعيل وتطبيق التعديلات السابقة.

إعادة تشغيل الاباتشي تتم باستخدام التعليمة:

 CentOS 7

sudo systemctl restart httpd.service

 CentOS 6

sudo service httpd restart

الخطوة 5 اختبار mod_evasive:

لنقم بعملية اختبار بسيطة للتأكد من أن mod_evasive يعمل بشكل جيد, سوف نستخدم سكريبت مكتوبة بلغة perl تم كتابتها من قبل مطوري mod_evasive , لتشغيل هذه السكريبت يجب أن نقوم بتنصيب perl على السيرفر ويتم ذلك باستخدام التعليمة التالية:

sudo yum install -y perl

السكريبت موجودة في المسار التالي:

usr/share/doc/mod_evasive-1.10.1/test.pl/

بشكل افتراضي فإن هذه السكريبت تقوم بطلب نفس الصفحة من سيرفر الاباتشي 100 مرة من أجل اختبار فعالية mod_evasive سنقوم بتعديل هذه القيمة لتصبح 200 طلب ويتم ذلك من خلال تعديل محتوى السكريبت:

usr/share/doc/mod_evasive-1.10.1/test.pl/

لنقم بفتح هذا الملف باستخدام محرر النصوص nano باستخدام التعليمة التالية:

sudo nano /usr/share/doc/mod_evasive-1.10.1/test.pl

ومن ثم تعديل القيمة 100 في حلقة for(0..100) لتصبح for(0..200) ومن ثم حفظ هذا الملف والخروج منه.

لتنفيذ هذا السكريبت نستخدم التعليمة التالية:

sudo perl /usr/share/doc/mod_evasive-1.10.1/test.pl

نتيجة التنفيذ يجب أن تكون كالتالي:

HTTP/1.1 403 Forbidden

HTTP/1.1 403 Forbidden

HTTP/1.1 403 Forbidden

HTTP/1.1 403 Forbidden

HTTP/1.1 403 Forbidden

كود الحالة 403 في الإجابة يشير إلى أن عملية الوصول ممنوعة من قبل سيرفر الويب حيث قام Mod_evasive  بمنع هذه الطلبات وقام أيضاً بتسجيل عنوان IP في syslog وقام بإضافته إلى قائمة الحظر.

يمكننا عرض السجل باستخدام التعليمة التالية:

sudo tailf /var/log/messages

يجب أن يحوي على رسالة كالتالي:

Jul 29 00:11:18 servername mod_evasive[18290]: Blacklisting address 127.0.0.1: possible DoS attack

إذا قمت بإعداد mod_avasive ليقوم بإعلامك بمنع عنوان IP من خلال رسالة عبر البريد الالكتروني عن فسوف تصلك رسالة تحوي على التالي:

mod_evasive HTTP Blacklisted 127.0.0.1

الخلاصة:


Mod_avasive هو أداة رائعة لحماية السيرفر من هجمات حجب الخدمة وحجب الخدمة الموزعة ولكنه فعال فقط في الحالات التي يكون فيها معالج السيرفر وعرض الحزمة الكلي قادرين على التعامل مع هذه الطلبات والإجابة عليها ولهذا السبب من المهم أن تقوم بربط mod_avasive ليعمل مع جدار ناري firewall من أجل الحصول على أعلى مستوى حماية.

بدون بنية تحتية جيدة وجدار ناري مُعد بشكل جيد وموجود في المكان المناسب فإن هجمات حجب الخدمة الموزعة DDoS يمكن أن تخرج السيرفر أو الموقع عن الخدمة وإذا كانت هذه الهجمات قوية وتتم بشكل مستمر يجب أن تفكر باستخدام أجهزة حماية خاصة للتخفيف من هذه الهجمات.

ترجمة بتصرف لمقال :  How To Protect Against DoS and DDoS with mod_evasive for Apache on CentOS 7

أقرا ايضا : مقال : هجمات الحرمان من الخدمه