يعد موصل ModSecurity-nginx هو نقطة الاتصال بين nginx و libmodsecurity (ModSecurity v3). وبعبارة أخرى، يوفر هذا المشروع قناة اتصال بين nginx و libmodsecurity. هذا الموصل مطلوب لاستخدام LibModSecurity مع nginx.
يأخذ موصل ModSecurity-nginx شكل وحدة nginx. تعمل الوحدة ببساطة كطبقة اتصال بين nginx وModSecurity.
لاحظ أن هذا المشروع يعتمد على libmodsecurity بدلاً من ModSecurity (الإصدار 2.9 أو أقل).
يستخدم الإصدار القديم ModSecurity المستقل، وهو عبارة عن غلاف لأجزاء Apache الداخلية لربط ModSecurity بـ nginx. هذا الإصدار الحالي أقرب إلى nginx، ويستهلك libmodsecurity الجديد الذي لم يعد يعتمد على Apache. ونتيجة لذلك، يحتوي هذا الإصدار الحالي على تبعيات أقل وأخطاء أقل وأسرع. بالإضافة إلى ذلك، يتم أيضًا توفير بعض الوظائف الجديدة - مثل إمكانية استخدام تكوين القواعد العامة مع تخصيصات الدليل/الموقع (على سبيل المثال، SecRuleRemoveById).
قبل تجميع هذا البرنامج، تأكد من تثبيت libmodsecurity. يمكنك تنزيله من مستودع ModSecurity git. للحصول على معلومات تتعلق بتجميع وتثبيت libmodsecurity يرجى مراجعة الوثائق المرفقة معه.
بعد تثبيت libmodsecurity، يمكنك متابعة تثبيت موصل ModSecurity-nginx، الذي يتبع إجراء تثبيت وحدة nginx لجهة خارجية. من الدليل المصدر nginx:
./configure --add-module=/path/to/ModSecurity-nginx
أو لبناء وحدة ديناميكية:
./configure --add-dynamic-module=/path/to/ModSecurity-nginx --with-compat
لاحظ أنه عند إنشاء وحدة ديناميكية، يجب أن يتطابق إصدار nginx المصدر مع إصدار nginx الذي تقوم بتجميع هذا من أجله.
يتوفر مزيد من المعلومات حول دعم الوظائف الإضافية لجهات خارجية لـ nginx هنا: http://wiki.nginx.org/3rdPartyModules
يعمل ModSecurity for nginx على توسيع توجيهات تكوين nginx الخاصة بك. ويضيف أربعة توجيهات جديدة وهم:
بناء الجملة: modsecurity على | عن
السياق: http، الخادم، الموقع
الافتراضي: إيقاف
يقوم بتشغيل أو إيقاف تشغيل وظيفة ModSecurity. لاحظ أن توجيه التكوين هذا لم يعد مرتبطًا بحالة SecRule. وبدلاً من ذلك، فهو يعمل الآن فقط كعلامة nginx لتمكين الوحدة أو تعطيلها.
بناء الجملة: modsecurity_rules_file <المسار إلى ملف القواعد>
السياق: http، الخادم، الموقع
الافتراضي: لا
يحدد موقع ملف تكوين modsecurity، على سبيل المثال:
server {
modsecurity on;
location / {
root /var/www/html;
modsecurity_rules_file /etc/my_modsecurity_rules.conf;
}
}
بناء الجملة: modsecurity_rules_remote
السياق: http، الخادم، الموقع
الافتراضي: لا
يحدد من أين (على الإنترنت) سيتم تنزيل ملف تكوين modsecurity. كما يحدد أيضًا المفتاح الذي سيتم استخدامه للمصادقة على هذا الخادم:
server {
modsecurity on;
location / {
root /var/www/html;
modsecurity_rules_remote my-server-key https://my-own-server/rules/download;
}
}
بناء الجملة: modsecurity_rules <قاعدة modsecurity>
السياق: http، الخادم، الموقع
الافتراضي: لا
يسمح بالتضمين المباشر لقاعدة ModSecurity في تكوين nginx. المثال التالي هو تحميل القواعد من ملف وإدخال تكوينات محددة لكل دليل/اسم مستعار:
server {
modsecurity on;
location / {
root /var/www/html;
modsecurity_rules_file /etc/my_modsecurity_rules.conf;
}
location /ops {
root /var/www/html/opts;
modsecurity_rules '
SecRuleEngine On
SecDebugLog /tmp/modsec_debug.log
SecDebugLogLevel 9
SecRuleRemoveById 10
' ;
}
}
بناء الجملة: سلسلة modsecurity_transaction_id
السياق: http، الخادم، الموقع
الافتراضي: لا
يسمح بتمرير معرف المعاملة من nginx بدلاً من إنشائه في المكتبة. يمكن أن يكون هذا مفيدًا لأغراض التتبع، على سبيل المثال خذ بعين الاعتبار هذا التكوين:
log_format extended ' $remote_addr - $remote_user [ $time_local ] '
'" $request " $status $body_bytes_sent '
'" $http_referer " " $http_user_agent " $request_id ' ;
server {
server_name host1;
modsecurity on;
modsecurity_transaction_id "host1- $request_id " ;
access_log logs/host1-access.log extended;
error_log logs/host1-error.log;
location / {
...
}
}
server {
server_name host2;
modsecurity on;
modsecurity_transaction_id "host2- $request_id " ;
access_log logs/host2-access.log extended;
error_log logs/host2-error.log;
location / {
...
}
}
باستخدام مزيج من log_format وmodsecurity_transaction_id، ستتمكن من العثور على الارتباطات بين سجل الوصول وإدخالات سجل الأخطاء باستخدام نفس المعرف الفريد.
يمكن أن تحتوي السلسلة على متغيرات.
كمشروع مفتوح المصدر، ندعو (ونشجع) أي شخص من المجتمع للمساهمة في مشروعنا. قد يتخذ هذا شكل: وظائف جديدة وإصلاحات الأخطاء وتقارير الأخطاء ودعم المستخدمين المبتدئين وأي شيء آخر ترغب في المساعدة فيه. شكرًا لك.
نحن نفضل أن يكون التصحيح الخاص بك ضمن البنية التحتية لـ GitHub لتسهيل عمل المراجعة لدينا وتكامل ضمان الجودة لدينا. يوفر GitHub وثائق ممتازة حول كيفية تنفيذ "طلبات السحب". مزيد من المعلومات متاحة هنا: https://help.github.com/articles/using-pull-requests/
يرجى احترام أسلوب الترميز المستخدم. يمكن أن تتضمن طلبات السحب العديد من الالتزامات، لذا قم بتوفير إصلاح واحد أو وظيفة واحدة لكل التزام. لا تغير أي شيء خارج نطاق عملك المستهدف (على سبيل المثال، نمط الترميز في وظيفة مررت بها).
يوجد داخل الكود الخاص بنا العديد من العناصر التي تم وضع علامة عليها كـ TODO أو FIXME والتي قد تحتاج إلى اهتمامك. تحقق من قائمة العناصر عن طريق إجراء grep:
$ cd /path/to/modsecurity-nginx
$ egrep -Rin "TODO|FIXME" -R *
يمكنك أيضًا إلقاء نظرة على تقارير الأخطاء الأخيرة وفتح المشكلات للحصول على فكرة عن نوع المساعدة التي نبحث عنها.
إلى جانب الاختبار اليدوي، نوصيك بشدة باستخدام أداة اختبار nginx للتأكد من أن التصحيح لا يؤثر سلبًا على سلوك أو أداء nginx.
اختبارات nginx متاحة على: http://hg.nginx.org/nginx-tests/
لاستخدام هذه الاختبارات، تأكد من أن لديك أداة Perl المساعدة (جزء من Perl 5) وتابع بالأوامر التالية:
$ cp /path/to/ModSecurity-nginx/tests/* /path/to/nginx/test/repository
$ cd /path/to/nginx/test/repository
$ TEST_NGINX_BINARY=/path/to/your/nginx prove .
إذا كنت تواجه مشاكل في الحصول على وظائفك المضافة لاجتياز جميع اختبارات nginx، فلا تتردد في الاتصال بنا أو بالقائمة البريدية لـ nginx على: http://nginx.org/en/support.html
نحن نحترم مخطط تصحيح أخطاء nginx. باستخدام خيار التكوين "--with-debug" أثناء تكوين nginx، ستقوم أيضًا بتمكين رسائل تصحيح الأخطاء الخاصة بالموصل. من المتوقع أن يتم تصحيح أخطاء عمليات التفريغ والأعطال الأساسية بنفس الطريقة المستخدمة لتصحيح أخطاء nginx. لمزيد من المعلومات، يرجى التحقق من معلومات تصحيح أخطاء nginx: http://wiki.nginx.org/Debugging
إذا كنت تواجه مشكلة في التكوين أو إذا كان هناك شيء لا يعمل كما تتوقع، فيرجى استخدام القائمة البريدية لمستخدم ModSecurity. نرحب أيضًا بالمشكلات الموجودة على GitHub، ولكننا نفضل أن يطرح المستخدمون أسئلة على القائمة البريدية أولاً، حيث يمكنك الوصول إلى المجتمع بأكمله. ولا تنس أيضًا البحث عن مشكلة موجودة قبل فتح مشكلة جديدة.
أخيرًا، إذا كنت تخطط لفتح مشكلة على GitHub، من فضلك لا تنس إخبارنا بإصدار libmodsecurity الخاص بك وإصدار موصل nginx الذي تقوم بتشغيله.
يرجى عدم الإبلاغ علنًا عن أي مشكلة أمنية. بدلاً من ذلك، اتصل بنا على:[email protected] للإبلاغ عن المشكلة. بمجرد إصلاح المشكلة، سنمنحك رصيدًا مقابل الاكتشاف.
نود أن نناقش أي أفكار قد تكون لديكم بشأن ميزة جديدة. يرجى أن تضع في اعتبارك أن هذا مشروع يحركه المجتمع لذا تأكد من الاتصال بالمجتمع عبر القائمة البريدية للحصول على التعليقات أولاً. وبدلاً من ذلك، لا تتردد في فتح مشكلات GitHub التي تطلب ميزات جديدة. قبل فتح إصدار جديد، يرجى التحقق مما إذا كان هناك طلب ميزة موجود للوظيفة المطلوبة.
إن الحصول على توزيعاتنا في الوقت المحدد هو أمر نرغب فيه بشدة. أخبرنا إذا كان هناك أي شيء يمكننا القيام به لتسهيل عملك كعامل تعبئة.