تحسين قوانين المود سكيورتي لتقليل الضغط على الخادم

في الفترة الماضية كنت اعمل على اعداد قوانين للمود سيكورتي، وبعد الانتهاء منها بدأت بمرحلة الاختبار والتنقيح. وفي اثناء تنفيذ بعض الاختبارات الصعبة لاحظت ان الطلب او الـ Request يتأخر او يعتبر من الطلبات الثقيلة على الـ Apache.

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

مثال: لنفرض اننا لدينا القوانين التالية

START

SecRule REQUEST_URI "\phpshell"
SecRule REQUEST_URI "\commander\.php\?&cmd"
SecRule REQUEST_URI "\r00r\.php\?&cmd=chmod"
SecRule REQUEST_URI "\lolshell\.php\?&cmd=chown"
SecRule REQUEST_URI "\phpshell\.php\?&cmd=ls&d"
SecRule REQUEST_URI "\shell\.php\?&cmd=sql"
SecRule REQUEST_URI "\r00r\.php\?&act=chmod"
SecRule REQUEST_URI "\lolshell\.php\?&act=chown"
SecRule REQUEST_URI "\phpshell\.php\?&act=ls&d"
SecRule REQUEST_URI "\shell\.php\?&act=sql"
SecRule REQUEST_URI "\r00r\.php\?&command=chmod"
SecRule REQUEST_URI "\lolshell\.php\?&command=chown"
SecRule REQUEST_URI "\phpshell\.php\?&command=ls&d"
SecRule REQUEST_URI "\shell\.php\?&command=sql"
SecRule REQUEST_URI "\shell11234\.php\?&act"
SecRule REQUEST_URI "\rootshell\.php\?&command"
SecRule ARGS "\shell"
SecRule REQUEST_LINE "/niceshell\.txt"

END


الان لو جمعنا القوانين هذه سوف يكون لدينا 23 قانون. السؤال هنا، كيف نقوم بتحسينها؟ الجواب هو عن طريق دمج ماسبق بداخل قانون واحد، كالتالي.

بعد التحسين

START

SecRule REQUEST_URI|ARGS|REQUEST_LINE "/[A-Za-z0-9]\.(txt|php)\?&(cmd|command|act)=(chmod|chown|ls&d|sql&)"

END

مثل ما تلاحظون، تم دمج 23 قانون بداخل قانون واحد باستخدام الريجيكس.

ولو اردنا اضافة تفاعل خاص مع القانون هذا، والتفاعل يعني الـ Action خاص بالقانون ويتم تنفيذة في حال تطابق الـ REQUEST مع الـ RULE المعني.

بعد اضافة التفاعل الخاص

START

SecRule REQUEST_URI|ARGS|REQUEST_LINE "/[A-Za-z0-9]\.(txt|php)\?&(cmd|command|act)=(chmod|chown|ls&d|sql&)" \
        "deny,log,auditlog,msg:'Bad Request',id:'000000',severity:'2'"

END

وبهذا نكون اختصارنا 23 قانون بداخل قانون واحد مع اضافة تفاعل خاص مع القانون السابق. وعند تنفيذ طلب معين سوف يمر على قانون واحد فقط بدل من ان يمر في 23 قانون.

قد تكون كفكرة سهلة جداً، ولكن تنفيذها صعب لمن لا يجيد التعامل مع regular expression في كتابة الاكواد.

ويجب ان تكون حذر جدًا اثناء كتابة القوانين بهذا الشكل، اي خطأ قد يسبب مشاكل كثيرة ومن ضمنها توقف apache عن العمل. ولكن استخدام الاساليب هذه بالشكل السليم ستعطيك نتائج جيدة من حيث الاداء عمومًا.

تحياتي، مصطفى.

📮 المتابعة عبر البريد الالكتروني

عند الاشتراك سيصلك جديد منشوراتي ومقالاتي على ايميلك. لا يتم نشر اي اعلانات ابدًا، فقط المقالات التي انشرها هنا في مدونتي هذه.

‎التعليقات‫:‬ 6 On تحسين قوانين المود سكيورتي لتقليل الضغط على الخادم

شاركني برأيك