تكوين جدار حماية تطبيق ويب v2 على بوابة التطبيق باستخدام قاعدة مخصصة باستخدام Azure PowerShell

تسمح لك القواعد المخصصة بإنشاء القواعد الخاصة بك التي تم تقييمها لكل طلب يمر عبر جدار حماية تطبيق الويب (WAF) الإصدار 2. تتمتع هذه القواعد بأولوية أعلى من بقية القواعد في مجموعات القواعد المدارة. تحتوي القواعد المخصصة على إجراء (للسماح أو الحظر) وشرط مطابقة وعامل تشغيل للسماح بالتخصيص الكامل.

تقوم هذه المقالة بإنشاء بوابة تطبيق WAF v2 يستخدم قاعدة مخصصة. تحظر القاعدة المخصصة مرور البيانات إذا كانت مقدمة الطلب تحتوي على عامل مستخدم evilbot.

للاطلاع على المزيد من أمثلة القواعد المخصصة، راجع إنشاء قواعد جدار حماية تطبيقات ويب مخصصة واستخدامها

إذا كنت تريد تشغيل Azure PowerShell في هذه المقالة في برنامج نصي واحد مستمر يمكنك نسخه ولصقه وتشغيله، فراجع نماذج PowerShell لبوابة تطبيقات Azure.

المتطلبات الأساسية

وحدة Azure PowerShell

إذا اخترت تثبيت PowerShell واستخدامه محليًا، فستتطلب هذه المقالة إصدار الوحدة Azure PowerShell الإصدار 2.1.0 أو إصدارًا أحدث.

  1. قم بتشغيل Get-Module -ListAvailable Az للعثور على الإصدار. إذا كنت بحاجة إلى الترقية، فراجع تثبيت الوحدة النمطية Azure PowerShell.
  2. لإنشاء اتصال مع Azure، قم بتشغيل Connect-AzAccount.

إذا لم يكن لديك اشتراك Azure، فأنشئ حساب Azure مجاني قبل أن تبدأ.

مثال البرنامج النصي

إعداد المتغيرات

$rgname = "CustomRulesTest"

$location = "East US"

$appgwName = "WAFCustomRules"

قم بإنشاء مجموعة موارد

$resourceGroup = New-AzResourceGroup -Name $rgname -Location $location

إنشاء شبكة افتراضية

$sub1 = New-AzVirtualNetworkSubnetConfig -Name "appgwSubnet" -AddressPrefix "10.0.0.0/24"

$sub2 = New-AzVirtualNetworkSubnetConfig -Name "backendSubnet" -AddressPrefix "10.0.1.0/24"

$vnet = New-AzvirtualNetwork -Name "Vnet1" -ResourceGroupName $rgname -Location $location `
  -AddressPrefix "10.0.0.0/16" -Subnet @($sub1, $sub2)

إنشاء VIP عام ثابت

$publicip = New-AzPublicIpAddress -ResourceGroupName $rgname -name "AppGwIP" `
  -location $location -AllocationMethod Static -Sku Standard

إنشاء تجمع ومنفذ الواجهة الأمامية

$gwSubnet = Get-AzVirtualNetworkSubnetConfig -Name "appgwSubnet" -VirtualNetwork $vnet

$gipconfig = New-AzApplicationGatewayIPConfiguration -Name "AppGwIpConfig" -Subnet $gwSubnet

$fipconfig01 = New-AzApplicationGatewayFrontendIPConfig -Name "fipconfig" -PublicIPAddress $publicip

$pool = New-AzApplicationGatewayBackendAddressPool -Name "pool1" `
  -BackendIPAddresses testbackend1.westus.cloudapp.azure.com, testbackend2.westus.cloudapp.azure.com

$fp01 = New-AzApplicationGatewayFrontendPort -Name "port1" -Port 80

إنشاء مستمع وإعداد http وقاعدة ومقياس تلقائي

$listener01 = New-AzApplicationGatewayHttpListener -Name "listener1" -Protocol Http `
  -FrontendIPConfiguration $fipconfig01 -FrontendPort $fp01

$poolSetting01 = New-AzApplicationGatewayBackendHttpSettings -Name "setting1" -Port 80 `
  -Protocol Http -CookieBasedAffinity Disabled

$rule01 = New-AzApplicationGatewayRequestRoutingRule -Name "rule1" -RuleType basic `
  -BackendHttpSettings $poolSetting01 -HttpListener $listener01 -BackendAddressPool $pool

$autoscaleConfig = New-AzApplicationGatewayAutoscaleConfiguration -MinCapacity 3

$sku = New-AzApplicationGatewaySku -Name WAF_v2 -Tier WAF_v2

إنشاء قاعدتين مخصصتين وتطبيقهما على سياسة WAF

# Create WAF config
$wafConfig = New-AzApplicationGatewayWebApplicationFirewallConfiguration -Enabled $true -FirewallMode "Prevention" -RuleSetType "OWASP" -RuleSetVersion "3.0"
# Create a User-Agent header custom rule 
$variable = New-AzApplicationGatewayFirewallMatchVariable -VariableName RequestHeaders -Selector User-Agent
$condition = New-AzApplicationGatewayFirewallCondition -MatchVariable $variable -Operator Contains -MatchValue "evilbot" -Transform Lowercase -NegationCondition $False  
$rule = New-AzApplicationGatewayFirewallCustomRule -Name blockEvilBot -Priority 2 -RuleType MatchRule -MatchCondition $condition -Action Block
 
# Create a geo-match custom rule
$var2 = New-AzApplicationGatewayFirewallMatchVariable -VariableName RemoteAddr
$condition2 = New-AzApplicationGatewayFirewallCondition -MatchVariable $var2 -Operator GeoMatch -MatchValue "US"  -NegationCondition $False
$rule2 = New-AzApplicationGatewayFirewallCustomRule -Name allowUS -Priority 14 -RuleType MatchRule -MatchCondition $condition2 -Action Allow

# Create a firewall policy
$wafPolicy = New-AzApplicationGatewayFirewallPolicy -Name wafpolicyNew -ResourceGroup $rgname -Location $location -CustomRule $rule,$rule2

أنشئ بوابة التطبيق

$appgw = New-AzApplicationGateway -Name $appgwName -ResourceGroupName $rgname `
  -Location $location -BackendAddressPools $pool `
  -BackendHttpSettingsCollection  $poolSetting01 `
  -GatewayIpConfigurations $gipconfig -FrontendIpConfigurations $fipconfig01 `
  -FrontendPorts $fp01 -HttpListeners $listener01 `
  -RequestRoutingRules $rule01 -Sku $sku -AutoscaleConfiguration $autoscaleConfig `
  -WebApplicationFirewallConfig $wafConfig `
  -FirewallPolicy $wafPolicy

تحديث WAF الخاص بك

بعد إنشاء WAF، يمكنك تحديثه باستخدام إجراء مشابه للتعليمات البرمجية التالية:

# Get the existing policy
$policy = Get-AzApplicationGatewayFirewallPolicy -Name $policyName -ResourceGroupName $RGname
# Add an existing rule named $rule
$policy.CustomRules.Add($rule)
# Update the policy
Set-AzApplicationGatewayFirewallPolicy -InputObject $policy

الخطوات التالية

تعرف على المزيد حول جدار حماية تطبيق الويب على بوابة التطبيق