Konfigurowanie zapory aplikacji internetowej w wersji 2 w usłudze Application Gateway przy użyciu reguły niestandardowej przy użyciu programu Azure PowerShell
Reguły niestandardowe umożliwiają tworzenie własnych reguł ocenianych dla każdego żądania przekazywanego przez zaporę aplikacji internetowej (WAF) w wersji 2. Te reguły mają wyższy priorytet niż pozostałe reguły w zarządzanych zestawach reguł. Reguły niestandardowe mają akcję (aby zezwolić lub zablokować), warunek dopasowania i operator umożliwiający pełne dostosowanie.
W tym artykule utworzono zaporę aplikacji internetowej usługi Application Gateway w wersji 2, która używa reguły niestandardowej. Reguła niestandardowa blokuje ruch, jeśli nagłówek żądania zawiera złabot user-agent.
Aby wyświetlić więcej przykładów reguł niestandardowych, zobacz Tworzenie i używanie niestandardowych reguł zapory aplikacji internetowej
Jeśli chcesz uruchomić program Azure PowerShell w tym artykule w jednym skryptie ciągłym, który można skopiować, wkleić i uruchomić, zobacz przykłady programu PowerShell aplikacja systemu Azure Gateway.
Wymagania wstępne
Moduł programu Azure PowerShell
Jeśli zdecydujesz się zainstalować program Azure PowerShell i korzystać z niego lokalnie, ten skrypt wymaga modułu Azure PowerShell w wersji 2.1.0 lub nowszej.
- Aby dowiedzieć się, jaka wersja jest używana, uruchom polecenie
Get-Module -ListAvailable Az
. Jeśli konieczne będzie uaktualnienie, zobacz Instalowanie modułu Azure PowerShell. - Aby utworzyć połączenie z platformą Azure, uruchom polecenie
Connect-AzAccount
.
Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto platformy Azure.
Przykładowy skrypt
Konfigurowanie zmiennych
$rgname = "CustomRulesTest"
$location = "East US"
$appgwName = "WAFCustomRules"
Tworzenie grupy zasobów
$resourceGroup = New-AzResourceGroup -Name $rgname -Location $location
Tworzenie sieci wirtualnej
$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)
Tworzenie statycznego publicznego adresu VIP
$publicip = New-AzPublicIpAddress -ResourceGroupName $rgname -name "AppGwIP" `
-location $location -AllocationMethod Static -Sku Standard
Tworzenie puli i portu frontonu
$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
Tworzenie odbiornika, ustawienia http, reguły i autoskalowania
$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
Tworzenie dwóch reguł niestandardowych i stosowanie ich do zasad zapory aplikacji internetowej
# 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
Tworzenie usługi Application Gateway
$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
Aktualizowanie zapory aplikacji internetowej
Po utworzeniu zapory aplikacji internetowej można ją zaktualizować przy użyciu procedury podobnej do następującego kodu:
# 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
Następne kroki
Dowiedz się więcej o zaporze aplikacji internetowej w usłudze Application Gateway