تكوين Web Application Firewall الإصدار 2 على Application Gateway باستخدام قاعدة مخصصة باستخدام Azure PowerShell

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

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

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

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

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

وحدة 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 -Priority 1000

$autoscaleConfig = New-AzApplicationGatewayAutoscaleConfiguration -MinCapacity 3

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

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

# 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 -State Enabled
 
# 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 -State Enabled

# Create a firewall policy
$policySetting = New-AzApplicationGatewayFirewallPolicySetting -Mode Prevention -State Enabled
$wafPolicy = New-AzApplicationGatewayFirewallPolicy -Name wafpolicyNew -ResourceGroup $rgname -Location $location -PolicySetting $PolicySetting -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 `
  -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

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

تعرَّف على المزيد بشأن Web Application Firewall على Application بوابة