Distribuire e configurare Firewall di Azure con Azure PowerShell

Il controllo dell'accesso alla rete in uscita è un componente importante di un piano di sicurezza della rete generale. Ad esempio, potrebbe essere utile limitare l'accesso ai siti Web. In alternativa, potrebbe essere utile limitare gli indirizzi IP e le porte in uscita a cui è possibile accedere.

È possibile controllare l'accesso alla rete in uscita da una subnet di Azure con Firewall di Azure. Con Firewall di Azure, è possibile configurare:

  • Regole di applicazione che definiscono i nomi di dominio completi (FQDN) accessibili da una subnet.
  • Regole di rete che definiscono l'indirizzo di origine, il protocollo, la porta di destinazione e l'indirizzo di destinazione.

Il traffico di rete è sottoposto alle regole del firewall configurate quando si instrada il traffico di rete al firewall come gateway predefinito della subnet.

Per questo articolo viene creata una singola rete virtuale semplificata con tre subnet per semplificare la distribuzione. Per le distribuzioni di produzione è consigliabile un modello hub e spoke, in cui il firewall si trova nella propria rete virtuale. I server del carico di lavoro si trovano nelle reti virtuali associate all'interno della stessa area con una o più subnet.

  • AzureFirewallSubnet: in questa subnet si trova il firewall.
  • Workload-SN: in questa subnet si trova il server del carico di lavoro. Il traffico di rete di questa subnet passa attraverso il firewall.
  • AzureBastionSubnet : la subnet usata per Azure Bastion, usata per connettersi al server del carico di lavoro.

Per altre informazioni su Azure Bastion, vedere Che cos'è Azure Bastion?

Importante

La tariffa oraria inizia dal momento in cui viene distribuito Bastion, a prescindere dall'utilizzo dei dati in uscita. Per altre informazioni, vedere Prezzi e SKU. Se si distribuisce Bastion nel corso di un'esercitazione o di un test, è consigliabile eliminare questa risorsa dopo averla usata.

Diagramma che mostra un'infrastruttura di rete firewall.

In questo articolo vengono illustrate le operazioni seguenti:

  • Configurare un ambiente di rete di test
  • Distribuire un firewall
  • Creare una route predefinita
  • Configurare una regola dell'applicazione per consentire l'accesso a www.google.com
  • Configurare una regola di rete per consentire l'accesso a server DNS esterni
  • Testare il firewall

Se si preferisce, è possibile completare questa procedura usando il portale di Azure.

Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.

Prerequisiti

Questa procedura richiede l'esecuzione locale di PowerShell. È necessario aver installato il modulo di Azure PowerShell. Eseguire Get-Module -ListAvailable Az per trovare la versione. Se è necessario eseguire l'aggiornamento, vedere Installare e configurare Azure PowerShell. Dopo avere verificato la versione di PowerShell, eseguire Connect-AzAccount per creare una connessione ad Azure.

Configurare la rete

In primo luogo, creare un gruppo di risorse per contenere le risorse necessarie per distribuire il firewall. Creare quindi una rete virtuale, le subnet e i server di test.

Creare un gruppo di risorse

Il gruppo di risorse contiene tutte le risorse per la distribuzione.

New-AzResourceGroup -Name Test-FW-RG -Location "East US"

Creare una rete virtuale e un host di Azure Bastion

Questa rete virtuale ha tre subnet:

Nota

La dimensione della subnet AzureFirewallSubnet è /26. Per altre informazioni sulle dimensioni delle subnet, vedere le domande frequenti su Firewall di Azure.

$Bastionsub = New-AzVirtualNetworkSubnetConfig -Name AzureBastionSubnet -AddressPrefix 10.0.0.0/27
$FWsub = New-AzVirtualNetworkSubnetConfig -Name AzureFirewallSubnet -AddressPrefix 10.0.1.0/26
$Worksub = New-AzVirtualNetworkSubnetConfig -Name Workload-SN -AddressPrefix 10.0.2.0/24

Creare ora la rete virtuale:

$testVnet = New-AzVirtualNetwork -Name Test-FW-VN -ResourceGroupName Test-FW-RG `
-Location "East US" -AddressPrefix 10.0.0.0/16 -Subnet $Bastionsub, $FWsub, $Worksub

Creare un indirizzo IP pubblico per l'host Azure Bastion

$publicip = New-AzPublicIpAddress -ResourceGroupName Test-FW-RG -Location "East US" `
   -Name Bastion-pip -AllocationMethod static -Sku standard

Creare l'host Azure Bastion

New-AzBastion -ResourceGroupName Test-FW-RG -Name Bastion-01 -PublicIpAddress $publicip -VirtualNetwork $testVnet

Creare una macchina virtuale

Creare ora la macchina virtuale del carico di lavoro e inserirla nella subnet appropriata. Quando richiesto, digitare il nome utente e la password per la macchina virtuale.

Creare una macchina virtuale del carico di lavoro. Quando richiesto, digitare il nome utente e la password per la macchina virtuale.

#Create the NIC
$wsn = Get-AzVirtualNetworkSubnetConfig -Name  Workload-SN -VirtualNetwork $testvnet
$NIC01 = New-AzNetworkInterface -Name Srv-Work -ResourceGroupName Test-FW-RG -Location "East us" -Subnet $wsn

#Define the virtual machine
$SecurePassword = ConvertTo-SecureString "<choose a password>" -AsPlainText -Force
$Credential = New-Object System.Management.Automation.PSCredential ("<choose a user name>", $SecurePassword);
$VirtualMachine = New-AzVMConfig -VMName Srv-Work -VMSize "Standard_DS2"
$VirtualMachine = Set-AzVMOperatingSystem -VM $VirtualMachine -Windows -ComputerName Srv-Work -ProvisionVMAgent -EnableAutoUpdate -Credential $Credential
$VirtualMachine = Add-AzVMNetworkInterface -VM $VirtualMachine -Id $NIC01.Id
$VirtualMachine = Set-AzVMSourceImage -VM $VirtualMachine -PublisherName 'MicrosoftWindowsServer' -Offer 'WindowsServer' -Skus '2019-Datacenter' -Version latest

#Create the virtual machine
New-AzVM -ResourceGroupName Test-FW-RG -Location "East US" -VM $VirtualMachine -Verbose

Nota

Azure fornisce un IP di accesso in uscita predefinito per le macchine virtuali a cui non è stato assegnato un indirizzo IP pubblico o che si trovano nel pool back-end di un servizio del bilanciamento del carico di base di Azure. Il meccanismo dell'IP di accesso in uscita predefinito fornisce un IP in uscita non configurabile.

L'IP di accesso in uscita predefinito è disabilitato quando si verifica uno degli eventi seguenti:

  • Alla macchina virtuale viene assegnato un indirizzo IP pubblico.
  • La macchina virtuale è posizionata nel pool back-end di un servizio di bilanciamento del carico standard, con o senza regole in uscita.
  • Una risorsa gateway NAT di Azure viene assegnata alla subnet della macchina virtuale.

Le macchine virtuali create usando set di scalabilità di macchine virtuali in modalità di orchestrazione flessibile non hanno l'accesso in uscita predefinito.

Per altre informazioni sulle connessioni in uscita in Azure, vedere Accesso in uscita predefinito in Azure e Uso di Source Network Address Translation (SNAT) per le connessioni in uscita.

Distribuire il firewall

Distribuire ora il firewall nella rete virtuale.

# Get a Public IP for the firewall
$FWpip = New-AzPublicIpAddress -Name "fw-pip" -ResourceGroupName Test-FW-RG `
  -Location "East US" -AllocationMethod Static -Sku Standard
# Create the firewall
$Azfw = New-AzFirewall -Name Test-FW01 -ResourceGroupName Test-FW-RG -Location "East US" -VirtualNetwork $testVnet -PublicIpAddress $FWpip

#Save the firewall private IP address for future use

$AzfwPrivateIP = $Azfw.IpConfigurations.privateipaddress
$AzfwPrivateIP

Annotare l'indirizzo IP privato. Sarà necessario più avanti per la creazione della route predefinita.

Creare una route predefinita

Creare una tabella con propagazione della route BGP disabilitata

$routeTableDG = New-AzRouteTable `
  -Name Firewall-rt-table `
  -ResourceGroupName Test-FW-RG `
  -location "East US" `
  -DisableBgpRoutePropagation

#Create a route
 Add-AzRouteConfig `
  -Name "DG-Route" `
  -RouteTable $routeTableDG `
  -AddressPrefix 0.0.0.0/0 `
  -NextHopType "VirtualAppliance" `
  -NextHopIpAddress $AzfwPrivateIP `
 | Set-AzRouteTable

#Associate the route table to the subnet

Set-AzVirtualNetworkSubnetConfig `
  -VirtualNetwork $testVnet `
  -Name Workload-SN `
  -AddressPrefix 10.0.2.0/24 `
  -RouteTable $routeTableDG | Set-AzVirtualNetwork

Configurare una regola di applicazione

La regola dell'applicazione consente l'accesso in uscita alle www.google.com.

$AppRule1 = New-AzFirewallApplicationRule -Name Allow-Google -SourceAddress 10.0.2.0/24 `
  -Protocol http, https -TargetFqdn www.google.com

$AppRuleCollection = New-AzFirewallApplicationRuleCollection -Name App-Coll01 `
  -Priority 200 -ActionType Allow -Rule $AppRule1

$Azfw.ApplicationRuleCollections.Add($AppRuleCollection)

Set-AzFirewall -AzureFirewall $Azfw

Firewall di Azure include una raccolta di regole predefinite per i nomi di dominio completi dell'infrastruttura consentiti per impostazione predefinita. Questi nomi di dominio completi sono specifici per la piattaforma e non possono essere usati per altri scopi. Per altre informazioni, vedere Infrastructure FQDNs (FQDN dell'infrastruttura).

Configurare una regola di rete

La regola di rete consente l'accesso in uscita a due indirizzi IP sulla porta 53 (DNS).

$NetRule1 = New-AzFirewallNetworkRule -Name "Allow-DNS" -Protocol UDP -SourceAddress 10.0.2.0/24 `
   -DestinationAddress 209.244.0.3,209.244.0.4 -DestinationPort 53

$NetRuleCollection = New-AzFirewallNetworkRuleCollection -Name RCNet01 -Priority 200 `
   -Rule $NetRule1 -ActionType "Allow"

$Azfw.NetworkRuleCollections.Add($NetRuleCollection)

Set-AzFirewall -AzureFirewall $Azfw

Modificare l'indirizzo DNS primario e secondario per l'interfaccia di rete Srv-Work

A scopo di test in questa procedura, configurare gli indirizzi DNS primari e secondari del server. Questo non è un requisito generale di Firewall di Azure.

$NIC01.DnsSettings.DnsServers.Add("209.244.0.3")
$NIC01.DnsSettings.DnsServers.Add("209.244.0.4")
$NIC01 | Set-AzNetworkInterface

Testare il firewall

A questo punto testare il firewall per verificare che funzioni come previsto.

  1. Connettersi alla macchina virtuale Srv-Work usando Bastion e accedere.

    Connettersi con Bastion.

  2. In Srv-Work aprire una finestra di PowerShell ed eseguire i comandi seguenti:

    nslookup www.google.com
    nslookup www.microsoft.com
    

    Entrambi i comandi devono restituire risposte, che mostrano che le query DNS stanno passando attraverso il firewall.

  3. Eseguire i comandi seguenti:

    Invoke-WebRequest -Uri https://www.google.com
    Invoke-WebRequest -Uri https://www.google.com
    
    Invoke-WebRequest -Uri https://www.microsoft.com
    Invoke-WebRequest -Uri https://www.microsoft.com
    

    Le www.google.com richieste devono avere esito positivo e le www.microsoft.com richieste devono avere esito negativo. Ciò dimostra che le regole del firewall funzionano come previsto.

A questo punto si è verificato che le regole del firewall funzionano:

  • È possibile risolvere i nomi DNS con il server DNS esterno configurato.
  • È possibile passare al nome di dominio completo consentito ma non agli altri.

Pulire le risorse

È possibile mantenere le risorse del firewall per l'esercitazione successiva o, se non sono più necessarie, eliminare il gruppo di risorse Test-FW-RG per eliminare tutte le risorse correlate al firewall:

Remove-AzResourceGroup -Name Test-FW-RG

Passaggi successivi