Configurare un web application firewall su un gateway applicazione nuovo o esistente

Informazioni su come creare un gateway applicazione con web application firewall (WAF) abilitato. Leggere anche le informazioni su come aggiungere un WAF a un gateway applicazione esistente.

Il WAF nel gateway applicazione di Azure protegge le applicazioni Web dai comuni attacchi basati sul Web, come ad esempio gli attacchi SQL injection, gli attacchi di scripting intersito e il controllo delle sessioni.

Il gateway applicazione è un servizio di bilanciamento del carico di livello 7. Fornisce richieste HTTP con routing delle prestazioni e failover tra server diversi, sia nel cloud che in locale. Il gateway applicazione offre numerose funzionalità di controller per la distribuzione di applicazioni (ADC, Application Delivery Controller):

  • Bilanciamento del carico HTTP
  • Affinità di sessione basata su cookie
  • Offload Secure Sockets Layer (SSL)
  • Probe di integrità personalizzati
  • Supporto per la funzionalità multisito

    Per un elenco completo delle funzionalità supportate, vedere Panoramica del gateway applicazione.

Questo articolo mostra come aggiungere un WAF a un gateway applicazione esistente. Illustra anche come creare un gateway applicazione che usa un WAF.

Immagine dello scenario

Differenze di configurazione dei WAF

Se è stato letto l'argomento Creare un gateway applicazione con PowerShell, si conoscono le impostazioni della SKU da configurare quando si crea un gateway applicazione. Il WAF fornisce impostazioni aggiuntive da definire quando si configura uno SKU in un gateway applicazione. Non esistono altre modifiche aggiuntive da apportare sul gateway applicazione.

Impostazione Dettagli
SKU Un gateway applicazione normale senza WAF supporta le dimensioni Standard_Small, Standard_Medium e Standard_Large. Con l'introduzione di un WAF sono disponibili due SKU aggiuntive, WAF_Medium e WAF_Large. Un WAF non è supportato nei gateway applicazione Small.
Livello I valori disponibili sono Standard o WAF. Quando si usa un WAF, è necessario scegliere WAF.
Modalità Questa impostazione è la modalità del WAF. I valori consentiti sono Rilevamento e Prevenzione. Quando il firewall WAF è configurato in modalità Rilevamento, tutte le minacce vengono archiviate in un file di log. In modalità Prevenzione, gli eventi vengono comunque registrati, ma l'autore dell'attacco riceve una risposta di mancata autorizzazione 403 dal gateway applicazione.

Aggiungere un web application firewall a un gateway applicazione esistente

Assicurarsi di usare la versione più recente di Azure PowerShell. Per altre informazioni, vedere Usare Windows PowerShell con Gestione risorse.

  1. Accedere all'account Azure.

    Login-AzureRmAccount
    
  2. Selezionare la sottoscrizione da usare per questo scenario.

    Select-AzureRmSubscription -SubscriptionName "<Subscription name>"
    
  3. Recuperare il gateway dove si desidera aggiungere un WAF.

    $gw = Get-AzureRmApplicationGateway -Name "AdatumGateway" -ResourceGroupName "MyResourceGroup"
    
  4. Configurare lo SKU WAF. Le dimensioni disponibili sono WAF_Large e WAF_Medium. Quando si utilizza un WAF, il livello deve essere WAF. Verificare la capacità quando si imposta la SKU.

    $gw | Set-AzureRmApplicationGatewaySku -Name WAF_Large -Tier WAF -Capacity 2
    
  5. Configurare le impostazioni WAF nel modo definito nell'esempio seguente. PerFirewallMode, i valori disponibili sono Prevenzione e Rilevamento.

    $gw | Set-AzureRmApplicationGatewayWebApplicationFirewallConfiguration -Enabled $true -FirewallMode Prevention
    
  6. Aggiornare il gateway applicazione con le impostazioni definite nel passaggio precedente.

    Set-AzureRmApplicationGateway -ApplicationGateway $gw
    

Questo comando aggiorna il gateway applicazione con un WAF. Per informazioni su come visualizzare i log per il gateway applicazione, vedere l'argomento relativo alla diagnostica del gateway applicazione. Per le implicazioni di sicurezza del WAF, esaminare i log a intervalli regolari per essere aggiornati sulle condizioni di sicurezza delle applicazioni Web.

Creare un gateway applicazione con un web application firewall

I passaggi seguenti illustrano l'intero processo di creazione di un gateway applicazione con un WAF.

Assicurarsi di usare la versione più recente di Azure PowerShell. Per altre informazioni, vedere Usare Windows PowerShell con Gestione risorse.

  1. Accedi ad Azure eseguendo Login-AzureRmAccount. Verrà richiesto di eseguire l'autenticazione con le proprie credenziali.

  2. Controllare le sottoscrizioni per l'account eseguendo Get-AzureRmSubscription.

  3. Scegliere quale sottoscrizione di Azure usare.

    Select-AzureRmsubscription -SubscriptionName "<Subscription name>"
    

Creare un gruppo di risorse

Creare un gruppo di risorse per il gateway applicazione.

New-AzureRmResourceGroup -Name appgw-rg -Location "West US"

Gestione risorse di Azure richiede che tutti i gruppi di risorse specifichino un percorso che viene usato come percorso predefinito per le risorse presenti in tale gruppo di risorse. Assicurarsi che tutti i comandi per creare un gateway applicazione usino lo stesso gruppo di risorse.

Nell'esempio precedente è stato creato un gruppo di risorse denominato "appgw-RG" con la località "Stati Uniti occidentali".

Nota

Se è necessario configurare un probe personalizzato per il gateway applicazione, vedere Creare un probe personalizzato per il gateway applicazione di Azure con PowerShell per Azure Resource Manager. Per altre informazioni, vedere l'articolo relativo a probe personalizzati e monitoraggio dell'integrità.

Configurare una rete virtuale

Il gateway applicazione richiede una propria subnet. In questo passaggio si crea una rete virtuale con uno spazio degli indirizzi di 10.0.0.0/16 e due subnet, una per il gateway applicazione e una per i membri del pool di back-end.

# Create a subnet configuration object for the application gateway subnet. A subnet for an application should have a minimum of 28 mask bits. This value leaves 10 available addresses in the subnet for application gateway instances. With a smaller subnet, you might not be able to add more instances of your application gateway in the future.
$gwSubnet = New-AzureRmVirtualNetworkSubnetConfig -Name 'appgwsubnet' -AddressPrefix 10.0.0.0/24

# Create a subnet configuration object for the back-end pool members subnet.
$nicSubnet = New-AzureRmVirtualNetworkSubnetConfig  -Name 'appsubnet' -AddressPrefix 10.0.2.0/24

# Create the virtual network with the previously created subnets.
$vnet = New-AzureRmvirtualNetwork -Name 'appgwvnet' -ResourceGroupName appgw-rg -Location "West US" -AddressPrefix 10.0.0.0/16 -Subnet $gwSubnet, $nicSubnet

Configurare l'indirizzo IP pubblico

Per gestire le richieste esterne, il gateway applicazione richiede un indirizzo IP pubblico. Questo indirizzo IP pubblico non deve avere un DomainNameLabel definito per essere usato dal gateway applicazione.

# Create a public IP address for use with the application gateway. Defining the `DomainNameLabel` during creation is not supported for use with the application gateway.
$publicip = New-AzureRmPublicIpAddress -ResourceGroupName appgw-rg -name 'appgwpip' -Location "West US" -AllocationMethod Dynamic

Configurare il gateway applicazione

# Create an IP configuration to configure which subnet the application gateway uses. When the application gateway starts, it picks up an IP address from the configured subnet and routes network traffic to the IP addresses in the back-end IP pool.
$gipconfig = New-AzureRmApplicationGatewayIPConfiguration -Name 'gwconfig' -Subnet $gwSubnet

# Create a back-end pool to hold the addresses or NIC handles for the application that the application gateway is protecting.
$pool = New-AzureRmApplicationGatewayBackendAddressPool -Name 'pool01' -BackendIPAddresses 1.1.1.1, 2.2.2.2, 3.3.3.3

# Upload the authentication certificate to be used to communicate with the back-end servers.
$authcert = New-AzureRmApplicationGatewayAuthenticationCertificate -Name 'whitelistcert1' -CertificateFile <full path to .cer file>

# Configure the back-end HTTP settings to be used to define how traffic is routed to the back-end pool. The authentication certificate used in the previous step is added to the back-end HTTP settings.
$poolSetting = New-AzureRmApplicationGatewayBackendHttpSettings -Name 'setting01' -Port 443 -Protocol Https -CookieBasedAffinity Enabled -AuthenticationCertificates $authcert

# Create a front-end port to be used by the listener.
$fp = New-AzureRmApplicationGatewayFrontendPort -Name 'port01'  -Port 443

# Create a front-end IP configuration to associate the public IP address with the application gateway.
$fipconfig = New-AzureRmApplicationGatewayFrontendIPConfig -Name 'fip01' -PublicIPAddress $publicip

# Configure the certificate for the application gateway. This certificate is used to decrypt and re-encrypt the traffic on the application gateway.
$cert = New-AzureRmApplicationGatewaySslCertificate -Name cert01 -CertificateFile <full path to .pfx file> -Password <password for certificate file>

# Create the HTTP listener for the application gateway. Assign the front-end IP configuration, port, and SSL certificate to use.
$listener = New-AzureRmApplicationGatewayHttpListener -Name listener01 -Protocol Https -FrontendIPConfiguration $fipconfig -FrontendPort $fp -SslCertificate $cert

# Create a load-balancer routing rule that configures the load balancer behavior. In this example, a basic round-robin rule is created.
$rule = New-AzureRmApplicationGatewayRequestRoutingRule -Name 'rule01' -RuleType basic -BackendHttpSettings $poolSetting -HttpListener $listener -BackendAddressPool $pool

# Configure the SKU of the application gateway.
$sku = New-AzureRmApplicationGatewaySku -Name WAF_Medium -Tier WAF -Capacity 2

# Define the SSL policy to use.
$policy = New-AzureRmApplicationGatewaySslPolicy -PolicyType Predefined -PolicyName AppGwSslPolicy20170401S

# Configure the WAF configuration settings.
$config = New-AzureRmApplicationGatewayWebApplicationFirewallConfiguration -Enabled $true -FirewallMode "Prevention"

# Create the application gateway by using all the previously created configuration objects.
$appgw = New-AzureRmApplicationGateway -Name appgwtest -ResourceGroupName appgw-rg -Location "West US" -BackendAddressPools $pool -BackendHttpSettingsCollection $poolSetting -FrontendIpConfigurations $fipconfig  -GatewayIpConfigurations $gipconfig -FrontendPorts $fp -HttpListeners $listener -RequestRoutingRules $rule -Sku $sku -WebApplicationFirewallConfig $config -SslCertificates $cert -AuthenticationCertificates $authcert

Nota

I gateway applicazione creati con la configurazione di base del WAF sono configurati con CRS 3.0 per la protezione.

Ottenere un nome DNS del gateway applicazione

Dopo avere creato il gateway, il passaggio successivo prevede la configurazione del front-end per la comunicazione. Quando si usa un IP pubblico, il gateway applicazione richiede un nome DNS assegnato in modo dinamico, non descrittivo. Per assicurarsi che gli utenti possano raggiungere il gateway applicazione, usare un record CNAME che faccia riferimento all'endpoint pubblico del gateway applicazione. Per altre informazioni, vedere Configurare un nome di dominio personalizzato per un servizio cloud di Azure.

Per configurare un alias, recuperare i dettagli del gateway applicazione e il relativo nome DNS/indirizzo IP usando l'elemento PublicIPAddress collegato al gateway applicazione. Usare il nome DNS del gateway applicazione per creare un record CNAME che associ le due applicazioni Web a questo nome DNS. Non è consigliabile usare record A perché l'indirizzo VIP può cambiare al riavvio del gateway applicazione.

Get-AzureRmPublicIpAddress -ResourceGroupName appgw-RG -Name publicIP01
Name                     : publicIP01
ResourceGroupName        : appgw-RG
Location                 : westus
Id                       : /subscriptions/<subscription_id>/resourceGroups/appgw-RG/providers/Microsoft.Network/publicIPAddresses/publicIP01
Etag                     : W/"00000d5b-54ed-4907-bae8-99bd5766d0e5"
ResourceGuid             : 00000000-0000-0000-0000-000000000000
ProvisioningState        : Succeeded
Tags                     : 
PublicIpAllocationMethod : Dynamic
IpAddress                : xx.xx.xxx.xx
PublicIpAddressVersion   : IPv4
IdleTimeoutInMinutes     : 4
IpConfiguration          : {
                                "Id": "/subscriptions/<subscription_id>/resourceGroups/appgw-RG/providers/Microsoft.Network/applicationGateways/appgwtest/frontendIP
                            Configurations/frontend1"
                            }
DnsSettings              : {
                                "Fqdn": "00000000-0000-xxxx-xxxx-xxxxxxxxxxxx.cloudapp.net"
                            }

Passaggi successivi

Per informazioni su come configurare la registrazione diagnostica, per registrare gli eventi che vengono rilevati o bloccati con un WAF, visitare Integrità back-end, log di diagnostica e metriche per il gateway applicazione.