تمكين Web Application Firewall باستخدام Azure CLI
يمكنك تقييد حركة المرور على بوابة التطبيق باستخدام جدار حماية تطبيقات الويب (WAF). يستخدم جدار حماية تطبيق الويب قواعد OWASP لحماية تطبيقك. تتضمن هذه القواعد الحماية من هجمات مثل حقن SQL، وهجمات البرمجة النصية عبر الموقع، واختطاف الجلسات.
في هذه المقالة، ستتعرف على كيفية:
- إعداد الشبكة
- إنشاء بوابة تطبيق مع تمكين جدار حماية تطبيق ويب
- إنشاء مجموعة تحجيم الجهاز الظاهري
- إنشاء حساب تخزين وتكوين التشخيص
إذا كنت تفضل ذلك، يمكنك إكمال هذا الإجراء باستخدام Azure PowerShell.
إذا لم يكن لديك اشتراك في Azure، فأنشئ حساب Azure مجاني قبل أن تبدأ.
المتطلبات الأساسية
استخدم بيئة Bash في Azure Cloud Shell. لمزيد من المعلومات، راجع التشغيل السريع ل Bash في Azure Cloud Shell.
إذا كنت تفضل تشغيل أوامر مرجع CLI محلياً قم بتثبيت CLI Azure. إذا كنت تعمل على نظام تشغيل Windows أو macOS، ففكر في تشغيل Azure CLI في حاوية Docker. لمزيد من المعلومات، راجع كيفية تشغيل Azure CLI في حاوية Docker.
إذا كنت تستخدم تثبيت محلي، يُرجى تسجيل الدخول إلى Azure CLI مستخدمًا أمر az login. لإنهاء عملية المصادقة، اتبع الخطوات المعروضة في جهازك. للحصول على خيارات أخرى لتسجيل دخول، راجع تسجيل الدخول باستخدام Azure CLI.
عندما يُطلب منك، قم بتثبيت ملحق Azure CLI عند الاستخدام لأول مرة. لمزيد من المعلومات بشأن الامتدادات، راجع استخدام امتدادات مع Azure CLI.
يُرجى تشغيل إصدار az للوصول إلى الإصدار والمكتبات التابعة التي تم تثبيتها. للتحديث لآخر إصدار، يُرجى تشغيل تحديث az.
- يتطلب هذا العنصر الإصدار 2.0.4 أو أحدث من Azure CLI. إذا كنت تستخدم Azure Cloud Shell، يتم تثبيت أحدث إصدار بالفعل.
إنشاء مجموعة موارد
وتُعد مجموعة الموارد عبارة عن حاوية منطقية يتم فيها توزيع موارد Azure وإدارتها. قم بإنشاء مجموعة موارد Azure تُسمى myResource GroupAG مع مجموعة az group create.
az group create --name myResourceGroupAG --location eastus
إنشاء موارد الشبكة
تُستخدم الشبكة الظاهرية والشبكات الفرعية لتوفير اتصال الشبكة ببوابة التطبيق والموارد المرتبطة بها. أنشئ شبكة ظاهرية تُسمى myVNet وشبكة فرعية تُسمى myAGSubnet . ثم قم بإنشاء عنوان IP عام اسمه myAGPublicIPAddress .
az network vnet create \
--name myVNet \
--resource-group myResourceGroupAG \
--location eastus \
--address-prefix 10.0.0.0/16 \
--subnet-name myBackendSubnet \
--subnet-prefix 10.0.1.0/24
az network vnet subnet create \
--name myAGSubnet \
--resource-group myResourceGroupAG \
--vnet-name myVNet \
--address-prefix 10.0.2.0/24
az network public-ip create \
--resource-group myResourceGroupAG \
--name myAGPublicIPAddress \
--allocation-method Static \
--sku Standard
إنشاء بوابة تطبيق مع نهج WAF
استخدم az network application-gateway create لإنشاء بوابة تطبيق تسمى myAppGateway. عند إنشاء بوابة تطبيق باستخدام Azure CLI، فإنك تحدد معلومات التكوين، مثل إعدادات السعة وsku وHTTP. يتم تعيين بوابة التطبيق إلى myAGSubnet وmyAGPublicIPAddress.
az network application-gateway waf-policy create \
--name waf-pol \
--resource-group myResourceGroupAG \
--type OWASP \
--version 3.2
az network application-gateway create \
--name myAppGateway \
--location eastus \
--resource-group myResourceGroupAG \
--vnet-name myVNet \
--subnet myAGSubnet \
--capacity 2 \
--sku WAF_v2 \
--http-settings-cookie-based-affinity Disabled \
--frontend-port 80 \
--http-settings-port 80 \
--http-settings-protocol Http \
--public-ip-address myAGPublicIPAddress \
--waf-policy waf-pol \
--priority 1
قد يستغرق إنشاء بوابة التطبيق عدة دقائق. بعد إنشاء بوابة التطبيق، يمكنك رؤية الميزات الجديدة لها:
- appGatewayBackendPool - يجب أن يكون هناك بوابة التطبيق تجمع عنوان الخلفية واحد على الأقل.
- appGatewayBackendHttpSettings - يحدد هذا المنفذ 80 وبروتوكول HTTP يستخدم للاتصال.
- appGatewayHttpListener - المستمع الافتراضية المرتبطة appGatewayBackendPool.
- appGatewayFrontendIP - المتنازل myAGPublicIPAddress إلى appGatewayHttpListener.
- rule1 - قاعدة التحويل توجيه مقترن appGatewayHttpListener.
إنشاء مجموعة تحجيم الجهاز الظاهري
في هذا المثال، تقوم بإنشاء مجموعة لتغيير حجم الجهاز الظاهري توفر خادمين للمجموعة الخلفية في بوابة التطبيق. ترتبط الأجهزة الظاهرية في مجموعة تغيير الحجم بالشبكة الفرعية myBackendSubnet . لإنشاء مجموعة المقياس، يمكنك استخدام إنشاء az vmss.
استبدل <اسم المستخدم> و<كلمة المرور> بقيمك قبل تشغيل هذا.
az vmss create \
--name myvmss \
--resource-group myResourceGroupAG \
--image Ubuntu2204 \
--admin-username <username> \
--admin-password <password> \
--instance-count 2 \
--vnet-name myVNet \
--subnet myBackendSubnet \
--vm-sku Standard_DS2 \
--upgrade-policy-mode Automatic \
--app-gateway myAppGateway \
--backend-pool-name appGatewayBackendPool
قم بتثبيت NGINX
az vmss extension set \
--publisher Microsoft.Azure.Extensions \
--version 2.0 \
--name CustomScript \
--resource-group myResourceGroupAG \
--vmss-name myvmss \
--settings '{ "fileUris": ["https://raw.githubusercontent.com/Azure/azure-docs-powershell-samples/master/application-gateway/iis/install_nginx.sh"],"commandToExecute": "./install_nginx.sh" }'
إنشاء حساب تخزين وتكوين التشخيص
خلال هذه المقالة، تستخدم بوابة التطبيق حساب تخزين لتخزين البيانات لأغراض الكشف والوقاية. يمكنك استخدام سجلات Azure Monitor أو Event Hub لتسجيل البيانات.
إنشاء حساب تخزين
أنشئ حساب تخزين اسمه myagstore1 مع مجموعة az storage account create.
az storage account create \
--name myagstore1 \
--resource-group myResourceGroupAG \
--location eastus \
--sku Standard_LRS \
--encryption-services blob
تكوين التشخيصات
قم بتكوين التشخيصات لتسجيل البيانات في سجلات ApplicationGatewayAccessLog وApplicationGatewayPerformanceLog وApplicationGatewayFirewallLog. استبدل <subscriptionId>
بمعرف الاشتراك الخاص بك ثم قم بتكوين التشخيص بمجموعة az monitor diagnostic-settings create.
appgwid=$(az network application-gateway show --name myAppGateway --resource-group myResourceGroupAG --query id -o tsv)
storeid=$(az storage account show --name myagstore1 --resource-group myResourceGroupAG --query id -o tsv)
az monitor diagnostic-settings create --name appgwdiag --resource $appgwid \
--logs '[ { "category": "ApplicationGatewayAccessLog", "enabled": true, "retentionPolicy": { "days": 30, "enabled": true } }, { "category": "ApplicationGatewayPerformanceLog", "enabled": true, "retentionPolicy": { "days": 30, "enabled": true } }, { "category": "ApplicationGatewayFirewallLog", "enabled": true, "retentionPolicy": { "days": 30, "enabled": true } } ]' \
--storage-account $storeid
اختبار بوابة التطبيق
للحصول على عنوان IP العام لبوابة التطبيق، استخدم عرض الشبكة العامة للشبكة من الألف إلى الياء. نسخ عنوان IP العام، ثم ألصقه في شريط العنوان في متصفحك.
az network public-ip show \
--resource-group myResourceGroupAG \
--name myAGPublicIPAddress \
--query [ipAddress] \
--output tsv
تنظيف الموارد
عند عدم الحاجة إلى ذلك، قم بإزالة مجموعة الموارد، وبوابة التطبيق، وجميع الموارد ذات الصلة.
az group delete --name myResourceGroupAG