
ModSecurity هو محرك جدار حماية لتطبيقات الويب (WAF) مفتوح المصدر ومتعدد المنصات، مخصص لخوادم Apache وIIS وNginx. يمتلك لغة برمجة قوية قائمة على الأحداث توفر الحماية من مجموعة من الهجمات ضد تطبيقات الويب، وتتيح مراقبة حركة مرور HTTP وتسجيلها وتحليلها في الوقت الفعلي.
Libmodsecurity هو أحد مكونات مشروع ModSecurity v3. تعمل قاعدة شيفرة المكتبة كواجهة لموصلات ModSecurity، حيث تستقبل حركة مرور الويب وتطبّق عليها معالجة ModSecurity التقليدية. وبشكل عام، فهي توفّر القدرة على تحميل/تفسير القواعد المكتوبة بصيغة ModSecurity SecRules وتطبيقها على محتوى HTTP الذي يوفّره تطبيقك عبر الموصلات.
إذا كنت تبحث عن ModSecurity لـ Apache (المعروف أيضًا باسم ModSecurity v2.x)، فهو لا يزال قيد الصيانة ومتاحًا: هنا.
Libmodsecurity هو إعادة كتابة كاملة لمنصة ModSecurity. عندما تم تصوّره لأول مرة، بدأ مشروع ModSecurity كمجرد وحدة Apache. وعلى مرّ الوقت، تم توسيع المشروع، استجابةً للطلب الشعبي، لدعم منصات أخرى تشمل (على سبيل المثال لا الحصر) Nginx وIIS. ومن أجل تلبية الطلب المتزايد على دعم منصات إضافية، أصبح من الضروري إزالة تبعيات Apache التي يقوم عليها هذا المشروع، مما يجعله أكثر استقلالية عن المنصات.
ونتيجةً لهذا الهدف، أعدنا هندسة Libmodsecurity بحيث لم تعد تعتمد على خادم الويب Apache (سواء عند الترجمة أو أثناء التشغيل). ومن الآثار الجانبية لذلك أن المستخدمين يمكنهم توقّع أداء متزايد عبر جميع المنصات. بالإضافة إلى ذلك، اغتنمنا هذه الفرصة لإرساء الأساس لبعض الميزات الجديدة التي طالما سعى إليها المستخدمون. فعلى سبيل المثال، نهدف إلى دعم سجلات التدقيق (auditlogs) بصيغة JSON أصليًا، إلى جانب مجموعة من الوظائف الأخرى في الإصدارات المستقبلية.
لم يعد فرع 'ModSecurity' يحتوي على منطق الوحدة التقليدي (لـ Nginx وApache وIIS) الذي كان يُحزَّم تقليديًا معًا. بدلاً من ذلك، يحتوي هذا الفرع فقط على جزء المكتبة (libmodsecurity) الخاص بهذا المشروع. تُستهلك هذه المكتبة بواسطة ما نسمّيه 'الموصلات' (Connectors)، وهذه الموصلات ستتفاعل مع خادم الويب الخاص بك وتزوّد المكتبة بصيغة مشتركة تفهمها. تتم صيانة كل من هذه الموصلات كمشروع GitHub منفصل. فعلى سبيل المثال، يُوفَّر موصل Nginx بواسطة مشروع ModSecurity-nginx (https://github.com/owasp-modsecurity/ModSecurity-nginx).
إن إبقاء هذه الموصلات منفصلة يتيح لكل مشروع دورات إصدار ومشكلات وشجرات تطوير مختلفة. بالإضافة إلى ذلك، يعني ذلك أنه عند تثبيت ModSecurity v3 فإنك تحصل فقط على ما تحتاجه بالضبط، دون إضافات لن تستخدمها.
قبل بدء عملية التجميع، تأكد من تثبيت جميع التبعيات المطلوبة.
راجع قسم التبعيات والوحدات الفرعية لـ Git للحصول على مزيد من المعلومات.
بعد التجميع، تأكد من عدم وجود مشكلات في بنائك/منصتك.
نوصي بشدة بتشغيل اختبارات الوحدة واختبارات الانحدار. توجد أدوات الاختبار هذه في المجلد الفرعي tests/.
بصفتها مكتبة ديناميكية، يجب تثبيت libmodsecurity في موقع يمكن لنظام التشغيل الخاص بك العثور فيه على المكتبات الديناميكية.
في الأنظمة الشبيهة بـ Unix، يستخدم المشروع autotools لعملية التجميع.
إذا كنت تعمل باستخدام نسخة git، فتأكد من استنساخ المستودع بشكل متكرر أو تهيئة جميع الوحدات الفرعية قبل البناء.
راجع أيضًا قسم الوحدات الفرعية لـ Git.
git clone https://github.com/owasp-modsecurity/ModSecurity ModSecurity
cd ModSecurity
يستخدم هذا المستودع وحدات فرعية من git. بعد الاستنساخ، تأكد من تهيئة جميع الوحدات الفرعية وجلبها:
git submodule update --init --recursive
يمكنك التحقق من أن جميع الوحدات الفرعية تمت تهيئتها بشكل صحيح باستخدام:
git submodule status
تظهر الوحدات الفرعية التي تمت تهيئتها بشكل صحيح تجزئة commit.
تشير علامة - البادئة إلى أن الوحدة الفرعية لم تتم تهيئتها.
يمكنك بعد ذلك بدء عملية البناء:
./build.sh
./configure
make
sudo make install
يمكن العثور على تفاصيل حول عمليات البناء الخاصة بكل توزيعة في الويكي الخاص بنا: وصفات الترجمة
يمكن العثور على معلومات بناء Windows هنا.
تتم معالجة التعبيرات النمطية في SecRules عبر أداة Regex (src/utils/regex.*).
بشكل افتراضي، يستخدم ModSecurity PCRE2 لمعالجة التعبيرات النمطية.
يُستخدم هذا بواسطة المعاملات مثل @rx و@rxGlobal و@verifyCC.
سلوك وقت البناء:
--with-pcre صراحةً (WITH_PCRE).بعبارة أخرى، تتوقع عمليات البناء الحالية PCRE2 ما لم يتم تكوينها صراحةً على خلاف ذلك.
يقوم @rx و@rxGlobal بترجمة الأنماط باستخدام DOTALL | MULTILINE افتراضيًا: يسمح DOTALL
لـ . بمطابقة أسطر جديدة، ويسمح MULTILINE لـ ^/$ بالارتكاز عند كل فاصل سطر
داخلي بدلاً من الارتكاز فقط عند بداية/نهاية الموضوع بأكمله. مرّر
--enable-regex-dollar-endonly=yes لترجمتها باستخدام DOTALL | DOLLAR_ENDONLY
بدلاً من ذلك: بدون MULTILINE، يرتكز ^/$ فقط عند بداية/نهاية الموضوع
بأكمله، ويقيّد DOLLAR_ENDONLY إضافيًا $ ليطابق فقط هناك بدلاً من
المطابقة أيضًا قبل سطر جديد لاحق مباشرةً. يبقى DOTALL دون تغيير في كلتا الحالتين، لذا يمكن للأنماط
أن تطابق عبر فواصل الأسطر الداخلية عبر .. يتوافق هذا مع سلوك @rx في ModSecurity v2. العلم معطّل افتراضيًا؛ راجع
المشكلة #3295.
جميع التبعيات الأخرى مرتبطة بالمعاملات المحددة داخل SecRules أو توجيهات التكوين وقد لا تكون مطلوبة للترجمة.
libinjection مطلوبًا للمعاملين @detectXSS و@detectSQL.curl مطلوبًا للتوجيه SecRemoteRules.إذا كانت تلك المكتبات مفقودة، فسيتم ترجمة ModSecurity دون دعم للمعاملات أو التوجيهات المعنية.
يتضمن المستودع الوحدات الفرعية التالية:
others/libinjection – يُستخدم بواسطة المعاملين @detectSQLi و@detectXSS.
others/mbedtls (مجموعة فرعية من TF-PSA-Crypto) – يُستخدم للدوال والمساعدات التشفيرية (مثل التجزئة، base64).
ملاحظة: تخطيط mbedTLS v4 الأحدث غير متوافق مع بنية v3 الأقدم. تغيّرت البنية الداخلية بشكل كبير، وتم نقل العديد من المكونات إلى وحدات فرعية (مثل TF-PSA-Crypto).
بعد دمج PR #3532، يُشترط تشغيل:
git submodule update --init --recursive
يضمن هذا جلب جميع الوحدات الفرعية المطلوبة. بدون هذه الخطوة، لن يُبنى المشروع بنجاح.
يمكنك التحقق من تهيئة جميع الوحدات الفرعية بشكل صحيح باستخدام:
git submodule status
مثال على المخرجات: