سجلات موارد Azure Web Application Firewall
يمكنك مراقبة موارد Web Application Firewall باستخدام السجلات. يمكنك حفظ الأداء والوصول والبيانات الأخرى أو استهلاكها من مورد الأغراض الخاص بالمراقبة.
إشعار
نوصي باستخدام الوحدة النمطية Azure Az PowerShell للتفاعل مع Azure. للبدء، راجع تثبيت Azure PowerShell. لمعرفة كيفية الترحيل إلى الوحدة النمطية Az PowerShell، راجع ترحيل Azure PowerShell من AzureRM إلى Az.
سجلات التشخيص
يمكنك استخدام أنواع مختلفة من السجلات في Azure لإدارة واستكشاف أخطاء application gateways وإصلاحها. يمكنك الوصول إلى بعض هذه السجلات من خلال المدخل. يمكن استخراج جميع السجلات من تخزين Azure Blob وعرضها في أدوات مختلفة، مثل سجلات مراقب Azure وExcel وPower BI. يمكنك معرفة المزيد حول الأنواع المختلفة من السجلات من القائمة التالية:
- Activity log: يمكنك استخدام سجلات نشاط Azure لعرض كافة العمليات التي تم إرسالها إلى اشتراك Azure وحالتها. يتم تجميع إدخالات سجل النشاط بشكل افتراضي، ويمكنك lمشاهدتها في مدخل Microsoft Azure.
- Access Resource log: يمكنك استخدام هذا السجل لعرض أنماط الوصول إلى بوابة التطبيق وتحليل المعلومات المهمة. يتضمن ذلك عنوان IP الخاص بالمتصل وعنوان URL المطلوب وزمن انتقال الاستجابة ورمز الإرجاع ووحدات البايت الواردة والمخرجة. يحتوي هذا السجل على سجلات فردية لكل طلب ويربط هذا الطلب ببوابة التطبيق الفريدة التي قامت بمعالجة الطلب. يمكن تحديد مثيلات Application Gateway الفريدة بواسطة معرف مثيل الخاصية.
- Performance Resource log: يمكنك استخدام هذا السجل لعرض كيفية أداء مثيلات Application Gateway. يسجل هذا التسجيل معلومات الأداء لكل مثيل، بما في ذلك إجمالي الطلبات التي يتم تقديمها، ومعدل النقل بالبايت، وإجمالي الطلبات التي يتم تقديمها، وعدد الطلبات الفاشلة، وعدد مثيلات الخلفية السليمة وغير السليمة. يتم تجميع سجل الأداء كل 60 ثانية. يتوفر سجل الأداء فقط لـ v1 SKU. بالنسبة إلى v2 SKU، استخدم المقاييس لبيانات الأداء.
- Firewall Resource log: يمكنك استخدام هذا السجل لعرض الطلبات التي تم تسجيلها من خلال وضع الكشف أو المنع لـ application gateway التي تم تكوينها باستخدام جدار حماية تطبيق الويب.
إشعار
تتوفر السجلات فقط للموارد المنشورة في نموذج توزيع Azure Resource Manager. لا يمكنك استخدام سجلات للموارد في نموذج النشر الكلاسيكي. للحصول على فهم أفضل للنموذجين، راجع مقالة فهم نشر Resource Manager والنشر الكلاسيكي.
لديك ثلاثة خيارات لتخزين سجلاتك:
- حساب التخزين: من الأفضل استخدام حسابات التخزين للسجلات حينما يتم تخزين السجلات لمدة أطول ومراجعتها عند الحاجة.
- مراكز الأحداث: تعد مراكز الأحداث خياراً رائعاً للتكامل مع معلومات الأمان الأخرى وأدوات إدارة الأحداث (SIEM) للحصول على تنبيهات حول مواردك.
- سجلات Azure Monitor من الأفضل استخدام سجلات Azure Monitor للمراقبة العامة في الوقت الفعلي لتطبيقك أو الاطلاع على الاتجاهات.
تمكين تسجيل الدخول من خلال PowerShell
يتم تمكين تسجيل النشاط تلقائياً لكل مورد Resource Manager. يجب تمكين الوصول وتسجيل الأداء لبدء تجميع البيانات المتوفرة من خلال تلك السجلات. لتمكين تسجيل الدخول، استخدم الخطوات التالية:
لاحظ معرف مورد حساب التخزين الخاص بك، حيث يتم تخزين بيانات السجل. هذه القيم بالشكل: /subscriptions/<subscriptionId>/resourceGroups/<resource group name>/providers/Microsoft.Storage/storageAccounts/<اسم حساب التخزين>. يمكنك استخدام أي حساب تخزين في اشتراكك. يمكنك استخدام مدخل Microsoft Azure للبحث عن هذه المعلومات.
لاحظ معرّف مورد application gateway الذي تم تمكين التسجيل له. هذه القيمة هي النموذج: /subscriptions/<subscriptionId>/resourceGroups/<resource group name>/providers/Microsoft.Network/applicationGateways/<اسم بوابة التطبيق>. يمكنك استخدام المدخل للعثور على هذه المعلومات.
تمكين التسجيل التشخيصي باستعمال أمر PowerShell cmdlet التالي:
Set-AzDiagnosticSetting -ResourceId /subscriptions/<subscriptionId>/resourceGroups/<resource group name>/providers/Microsoft.Network/applicationGateways/<application gateway name> -StorageAccountId /subscriptions/<subscriptionId>/resourceGroups/<resource group name>/providers/Microsoft.Storage/storageAccounts/<storage account name> -Enabled $true
تلميح
لا تتطلب سجلات النشاط حساب تخزين منفصل. يؤدي استخدام التخزين للوصول وتسجيل الأداء إلى فرض رسوم الخدمة.
تمكين تسجيل الدخول عبر مدخل Microsoft Azure
في مدخل Azure، ابحث عن المورد وحدد Diagnostic settings.
بالنسبة لـ Application Gateway، تتوفر ثلاثة سجلات:
- سجل الوصول
- سجل الأداء
- سجل جدار الحماية
حدد Add diagnostic setting.
توفر صفحة إعداد التشخيص إعدادات سجلات الموارد. في هذا المثال، يخزن «Log Analytics» السجلات. يمكنك أيضا استخدام مركز أحداث أو حساب تخزين أو حل شريك لحفظ سجلات الموارد.
اكتب اسما للإعدادات، وتأكد من الإعدادات، وحدد Save.
سجل النشاط
يقوم Azure بإنشاء سجل النشاط بشكل افتراضي. يتم الاحتفاظ بالسجلات لمدة 90 يوماً في مخزن سجلات أحداث Azure. تعرف على المزيد حول هذه السجلات من خلال قراءة مقالة عرض الأحداث وسجل النشاط.
سجل الوصول
يتم إنشاء سجل الوصول فقط إذا قمت بتمكينه على كل مثيل Application Gateway، كما هو مفصّل في الخطوات السابقة. يتم تخزين البيانات في حساب التخزين الذي حددته عند تمكين التسجيل. يسجل كل وصول لـ Application Gateway بتنسيق JSON، كما هو مبين في المثال التالي للإصدار 1:
قيمة | الوصف |
---|---|
instanceId | مثيل Application Gateway الذي قدم الطلب. |
ClientIP | إنشاء IP للطلب. |
clientPort | إنشاء منفذ للطلب. |
httpMethod | طريقة HTTP المستخدمة في الطلب. |
requestUri | URI للطلب المستلم. |
RequestQuery | Server-Routed: مثيل تجمع خلفي تم إرسال الطلب إليه. X-AzureApplicationGateway-LOG-ID: معرف الارتباط المستعمل للطلب. ويمكن استخدامه لاستكشاف مشكلات حركة المرور على الخوادم الخلفية وإصلاحها. SERVER-STATUS: رمز استجابة HTTP الذي تلقته بوابة التطبيق من النهاية الخلفية. |
UserAgent | عامل المستخدم من عنوان طلب HTTP. |
httpStatus | إرجاع التعليمة البرمجية لحالة HTTP إلى العميل من Application Gateway. |
httpVersion | إصدار HTTP من الطلب. |
receivedBytes | حجم الحزمة المتلقاة بالبايت. |
sentBytes | حجم الحزمة المرسلة بالبايت. |
timeTaken | المدة الزمنية (بالملي ثانية) التي تستغرقها معالجة الطلب وإرسال استجابته. يتم حساب هذا على أنه الفاصل الزمني من وقت تلقي Application Gateway للبايت الأول من طلب HTTP إلى الوقت الذي تنتهي فيه عملية إرسال الاستجابة. من المهم ملاحظة أن حقل الوقت المستغرق يتضمن عادةً الوقت الذي تنتقل فيه حزم الطلب والرد عبر الشبكة. |
sslEnabled | ما إذا كان الاتصال إلى تجمعات back-end قد استخدم TLS/SSL. القيم الصالحة هي تشغيل وإيقاف. |
مضيف | اسم المضيف الذي تم إرسال الطلب به إلى الخادم الخلفي. إذا تم تجاوز اسم المضيف الخلفية، فسيعكس هذا الاسم ذلك. |
originalHost | اسم المضيف الذي تم استلام الطلب به بواسطة Application Gateway من العميل. |
{
"resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/PEERINGTEST/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
"operationName": "ApplicationGatewayAccess",
"timestamp": "2017-04-26T19:27:38Z",
"category": "ApplicationGatewayAccessLog",
"properties": {
"instanceId": "ApplicationGatewayRole_IN_0",
"clientIP": "203.0.113.97",
"clientPort": 46886,
"httpMethod": "GET",
"requestUri": "/phpmyadmin/scripts/setup.php",
"requestQuery": "X-AzureApplicationGateway-CACHE-HIT=0&SERVER-ROUTED=10.4.0.4&X-AzureApplicationGateway-LOG-ID=aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e&SERVER-STATUS=404",
"userAgent": "-",
"httpStatus": 404,
"httpVersion": "HTTP/1.0",
"receivedBytes": 65,
"sentBytes": 553,
"timeTaken": 205,
"sslEnabled": "off",
"host": "www.contoso.com",
"originalHost": "www.contoso.com"
}
}
بالنسبة لـ Application Gateway وWAF v2، تظهر السجلات المزيد من التفاصيل:
قيمة | الوصف |
---|---|
instanceId | مثيل Application Gateway الذي قدم الطلب. |
ClientIP | إنشاء IP للطلب. |
clientPort | إنشاء منفذ للطلب. |
httpMethod | طريقة HTTP المستخدمة في الطلب. |
requestUri | URI للطلب المستلم. |
UserAgent | عامل المستخدم من عنوان طلب HTTP. |
httpStatus | إرجاع التعليمة البرمجية لحالة HTTP إلى العميل من Application Gateway. |
httpVersion | إصدار HTTP من الطلب. |
receivedBytes | حجم الحزمة المتلقاة بالبايت. |
sentBytes | حجم الحزمة المرسلة بالبايت. |
timeTaken | المدة الزمنية (بالملي ثانية) التي تستغرقها معالجة الطلب وإرسال استجابته. يتم حساب هذا على أنه الفاصل الزمني من وقت تلقي Application Gateway للبايت الأول من طلب HTTP إلى الوقت الذي تنتهي فيه عملية إرسال الاستجابة. من المهم ملاحظة أن حقل الوقت المستغرق يتضمن عادةً الوقت الذي تنتقل فيه حزم الطلب والرد عبر الشبكة. |
sslEnabled | ما إذا كان الاتصال إلى مجموعات back-end قد استخدم TLS. القيم الصالحة هي تشغيل وإيقاف. |
sslCipher | مجموعة التشفير المستخدمة لاتصال TLS (إذا تم تمكين TLS). |
sslProtocol | يكون بروتوكول SSL/TLS قيد الاستخدام (في حالة تم تمكين TLS). |
serverRouted | الخادم الخلفي الذي يقوم application gateway بتوجيه الطلب إليه. |
serverStatus | التعليمة البرمجية لحالة HTTP للخادم الخلفي. |
serverResponseLatency | زمن انتقال الاستجابة من الخادم الخلفي. |
مضيف | العنوان المدرج في عنوان المضيف للطلب. |
{
"resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/PEERINGTEST/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
"operationName": "ApplicationGatewayAccess",
"time": "2017-04-26T19:27:38Z",
"category": "ApplicationGatewayAccessLog",
"properties": {
"instanceId": "appgw_1",
"clientIP": "203.0.113.97",
"clientPort": 46886,
"httpMethod": "GET",
"requestUri": "/phpmyadmin/scripts/setup.php",
"userAgent": "-",
"httpStatus": 404,
"httpVersion": "HTTP/1.0",
"receivedBytes": 65,
"sentBytes": 553,
"timeTaken": 205,
"sslEnabled": "off",
"sslCipher": "",
"sslProtocol": "",
"serverRouted": "104.41.114.59:80",
"serverStatus": "200",
"serverResponseLatency": "0.023",
"host": "www.contoso.com",
}
}
سجل الأداء
يتم إنشاء سجل الأداء فقط إذا قمت بتمكينه على كل مثيل Application Gateway، كما هو مفصل في الخطوات السابقة. يتم تخزين البيانات في حساب التخزين الذي حددته عند تمكين التسجيل. يتم إنشاء بيانات سجل الأداء في فترات زمنية مدتها دقيقة واحدة. يتوفر فقط لـ v1 SKU. بالنسبة إلى v2 SKU، استخدم المقاييس لبيانات الأداء. يتم تسجيل البيانات التالية:
قيمة | الوصف |
---|---|
instanceId | مثيل Application Gateway الذي يتم إنشاء بيانات الأداء من أجله. بالنسبة لـ application gateway متعددة المثيلات، يوجد صف واحد لكل مثيل. |
healthyHostCount | عدد المضيفين السليمين في مجموعة back-end. |
unHealthyHostCount | عدد المضيفين غير السليمين في مجموعة back-end. |
requestCount | عدد الطلبات التي تقديمها. |
زمن الوصول | متوسط زمن الوصول (بالملي ثانية) للطلبات من النسخة إلى النهاية الخلفية التي تخدم الطلبات. |
failedRequestCount | عدد الطلبات الفاشلة. |
معدل النقل | متوسط معدل النقل منذ السجل الأخير، مقاساً بالبايت في الثانية. |
{
"resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/{resourceGroupName}/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
"operationName": "ApplicationGatewayPerformance",
"time": "2016-04-09T00:00:00Z",
"category": "ApplicationGatewayPerformanceLog",
"properties":
{
"instanceId":"ApplicationGatewayRole_IN_1",
"healthyHostCount":"4",
"unHealthyHostCount":"0",
"requestCount":"185",
"latency":"0",
"failedRequestCount":"0",
"throughput":"119427"
}
}
إشعار
يتم حساب زمن الانتقال من وقت استلام البايت الأول من طلب HTTP إلى وقت إرسال البايت الأخير من استجابة HTTP. إنه مجموع وقت معالجة Application Gateway بالإضافة إلى تكلفة الشبكة حتى النهاية، بالإضافة إلى الوقت الذي تستغرقه حتى النهاية لمعالجة الطلب.
سجل جدار الحماية
يتم إنشاء سجل جدار الحماية فقط إذا قمت بتمكينه لكل application gateway، كما هو مفصل في الخطوات السابقة. كما يتطلب هذا السجل أيضاً تكوين جدار حماية تطبيق الويب على application gateway. يتم تخزين البيانات في الوجهة التي حددتها عند تمكين التسجيل. يتم تسجيل البيانات التالية:
قيمة | الوصف |
---|---|
instanceId | مثيل Application Gateway الذي يتم من أجله إنشاء بيانات جدار الحماية. بالنسبة لـ application gateway متعددة المثيلات، يوجد صف واحد لكل مثيل. |
clientIp | إنشاء IP للطلب. |
requestUri | URL للطلب المستلم. |
ruleSetType | نوع مجموعة القواعد. القيمة المتوفرة هي OWASP. |
ruleSetVersion | إصدار مجموعة القواعد المستخدمة. القيم المتوفرة هي 2.2.9 و3.0. |
ruleId | معرّف القاعدة للحدث المشغل. |
رسالة | رسالة سهلة الاستخدام للحدث المشغل. يتم توفير المزيد من التفاصيل في قسم التفاصيل. |
إجراء | وضع النهج: الكشف - المكتشف - هذا هو الإجراء الوحيد ل WAF عندما يكون في وضع الكشف. تمت مطابقة جميع شروط قاعدة معينة وتم تسجيل الطلب ثم تمريره إلى الخلفية. وضع النهج: منع - مسموح به - تمت مطابقة جميع الشروط لقاعدة معينة وتم تمرير الطلب إلى الخلفية. - محظور - تمت مطابقة جميع الشروط لقاعدة معينة وتم حظر الطلب. - مطابقة - تمت مطابقة شرط واحد/أكثر لقاعدة معينة، ولكن قرار حظر الطلب أو تمريره سيحتاج إلى مزيد من التقييم وسيتم تقييمه استنادا إلى قاعدة تسجيل الخروج عن المألوف النهائية. وضع النهج: تحدي JS - JSChallengeIssued: تم إصداره بسبب إزالة التحدي المفقودة/غير الصالحة، الإجابة المفقودة. يتم إنشاء هذا السجل عندما يطلب عميل الوصول إلى تطبيق ويب للمرة الأولى ولم يتم تحديه مسبقا. يتلقى هذا العميل صفحة تحدي JS ويتابع لحساب تحدي JS. عند الحساب الناجح، يتم منح العميل ملف تعريف ارتباط الصلاحية. - JSChallengePass: تم تمريره بسبب إجابة تحدي صالحة. يتم إنشاء هذا السجل عندما يحل العميل تحدي JS ويعيد إرسال الطلب بالإجابة الصحيحة. في هذه الحالة، يتحقق Azure WAF من صحة ملف تعريف الارتباط ويتابع معالجة القواعد المتبقية دون إنشاء تحدي JS آخر. - JSChallengeValid: مسجل/تمرير بسبب تحدي صالح يتم إنشاء هذا السجل عندما يكون العميل قد حل تحديا مسبقا. في هذه الحالة، يسجل Azure WAF الطلب ويتابع معالجة القواعد المتبقية. - JSChallengeBlock: محظور يتم إنشاء هذا السجل عند فشل حساب تحدي JS. |
موقع | الموقع الذي تم إنشاء السجل من أجله. حاليا، يتم سرد العمومية فقط لأن القواعد عمومية. |
details | تفاصيل الحدث المشغل. |
details.message | وصف القاعدة. |
details.data | بيانات محددة تم العثور عليها عند الطلب تطابق القاعدة. |
details.file | ملف التكوين الذي يحتوي على القاعدة. |
details.line | رقم السطر في ملف التكوين الذي قام بتشغيل الحدث. |
اسم المضيف | اسم المضيف أو عنوان IP لـ Application Gateway. |
transactionId | معرّف فريد لمعاملة معينة يساعد في تجميع انتهاكات القواعد المتعددة التي حدثت في نفس الطلب. |
policyId | المعرف الفريد لسياسة جدار الحماية المقترن بعبارة التطبيق أو وحدة الإصغاء أو المسار. |
policyScope | موقع النهج - يمكن أن تكون القيم "Global" أو "Listener" أو "Location". |
policyScopeName | اسم العنصر حيث يتم تطبيق النهج. |
{
"resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/{resourceGroupName}/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
"operationName": "ApplicationGatewayFirewall",
"time": "2017-03-20T15:52:09.1494499Z",
"category": "ApplicationGatewayFirewallLog",
"properties": {
"instanceId": "ApplicationGatewayRole_IN_0",
"clientIp": "203.0.113.147",
"requestUri": "/",
"ruleSetType": "OWASP",
"ruleSetVersion": "3.0",
"ruleId": "920350",
"ruleGroup": "920-PROTOCOL-ENFORCEMENT",
"message": "Host header is a numeric IP address",
"action": "Matched",
"site": "Global",
"details": {
"message": "Warning. Pattern match \"^[\\\\d.:]+$\" at REQUEST_HEADERS:Host ....",
"data": "127.0.0.1",
"file": "rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf",
"line": "791"
},
"hostname": "127.0.0.1",
"transactionId": "16861477007022634343",
"policyId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/drewRG/providers/Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies/perListener",
"policyScope": "Listener",
"policyScopeName": "httpListener1"
}
}
}
عرض سجل النشاط وتحليله
يمكنك عرض بيانات سجل النشاط وتحليلها باستخدام أي من الطرق التالية:
- أدوات Azure: يمكنك استرداد المعلومات من سجل النشاط من خلال Azure PowerShell أو Azure CLI أو Azure REST API أو مدخل Azure. تم تفصيل التعليمات الاسترشادية المُفصّلة لكل أسلوب في مقالة عمليات النشاط باستخدام إدارة الموارد "ARM".
- Power BI: إذا لم يكن لديك حساب Power BI بالفعل، فيمكنك تجربته مجاناً. باستخدام تطبيقات قالب Power BI، يمكنك تحليل بياناتك.
عرض وتحليل سجلات الوصول، والأداء، وجدار الحماية
يمكن أن تجمع سجلات Azure Monitor ملفات الحساب وسجل الأحداث من حساب تخزين كائن ثنائي كبير الحجم Blob storage. يتضمن تصورات وقدرات بحث قوية لتحليل سجلاتك.
يمكنك أيضاً الاتصال بحساب التخزين لديك واسترداد إدخالات سجل JSON للوصول وسجلات الأداء. بعد تنزيل ملفات JSON، يمكنك تحويلها إلى CSV وعرضها في Excel أو Power BI أو أي أداة أخرى لتصور البيانات.
تلميح
إذا كنت على دراية بـ Visual Studio والمفاهيم الأساسية لتغيير قيم الثوابت والمتغيرات في C#، فيمكنك استخدام أدوات محول السجل المتوفرة من GitHub.
تحليل سجلات الوصول من خلال GoAccess
يمكنك أيضاً استخدام قالب Resource Manager الذي يقوم بتثبيت محلل السجلات الشائع GoAccess وتشغيله بالنسبة لسجلات الوصول في Application Gateway. يوفر GoAccess إحصاءات استخدام شبكة HTTP قيِّمة، مثل الزوار الفريدين، والملفات المطلوبة، والمضيفين، وأنظمة التشغيل، والمتصفحات ورموز حالة HTTP. لمزيد من التفاصيل، الرجاء مراجعة الملف التمهيدي في مجلد نموذج Resource Manager في GitHub.
الخطوات التالية
- تصور سجلات العداد والأحداث باستخدام سجلات Azure Monitor.
- تصور سجل نشاط Azure باستخدام مشاركة منشور مدونة Power BI.
- راجع عرض وتحليل سجلات نشاط Azure في Power BI والمزيد من منشورات المدونة.