Filtrare il traffico di rete con un gruppo di sicurezza di rete usando PowerShell

È possibile filtrare il traffico di rete in ingresso e in uscita da una subnet di rete virtuale con un gruppo di sicurezza di rete. I gruppi di sicurezza di rete contengono regole di sicurezza per filtrare il traffico di rete in base a indirizzo IP, porta e protocollo. Le regole di sicurezza vengono applicate alle risorse distribuite in una subnet. In questo articolo vengono illustrate le operazioni seguenti:

  • Creare un gruppo di sicurezza di rete e le regole di sicurezza
  • Creare una rete virtuale e associare un gruppo di sicurezza di rete a una subnet
  • Distribuire le macchine virtuali in una subnet
  • Testare i filtri del traffico

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

Azure Cloud Shell

Azure Cloud Shell è un ambiente di shell interattivo ospitato in Azure e usato tramite il browser. È possibile usare Bash o PowerShell con Cloud Shell per usare i servizi di Azure. È possibile usare i comandi preinstallati di Cloud Shell per eseguire il codice in questo articolo, senza dover installare alcun elemento nell'ambiente locale.

Per avviare Azure Cloud Shell:

Opzione Esempio/Collegamento
Selezionare Prova nell'angolo superiore destro di un codice o di un blocco di comandi. Selezionando Prova non viene copiato automaticamente il codice o il comando in Cloud Shell. Screenshot that shows an example of Try It for Azure Cloud Shell.
Passare a https://shell.azure.com o selezionare il pulsante Avvia Cloud Shell per aprire Cloud Shell nel browser. Button to launch Azure Cloud Shell.
Selezionare il pulsante Cloud Shell nella barra dei menu nell'angolo in alto a destra del portale di Azure. Screenshot that shows the Cloud Shell button in the Azure portal

Per usare Azure Cloud Shell:

  1. Avviare Cloud Shell.

  2. Selezionare il pulsante Copia in un blocco di codice (o blocco di comandi) per copiare il codice o il comando.

  3. Incollare il codice o il comando nella sessione di Cloud Shell selezionando CTRL+MAIUSC+V in Windows e Linux oppure selezionando CMD+MAIUSC+V in macOS.

  4. Selezionare INVIO per eseguire il codice o il comando.

Se si sceglie di installare e usare PowerShell in locale, per questo articolo è necessario il modulo Azure PowerShell 1.0.0 o versione successiva. Eseguire Get-Module -ListAvailable Az per trovare la versione installata. Se è necessario eseguire l'aggiornamento, vedere Installare e configurare Azure PowerShell. Se si esegue PowerShell in locale, è anche necessario eseguire Connect-AzAccount per creare una connessione con Azure.

Creare un gruppo di sicurezza di rete

Un gruppo di sicurezza di rete contiene regole di sicurezza. Le regole di sicurezza specificano un'origine e una destinazione. Le origini e le destinazioni possono essere gruppi di sicurezza delle applicazioni.

Creare gruppi di sicurezza delle applicazioni

Creare prima di tutto un gruppo di risorse per tutte le risorse create in questo articolo con New-AzResourceGroup. L'esempio seguente crea un gruppo di risorse nella località eastus:

New-AzResourceGroup -ResourceGroupName myResourceGroup -Location EastUS

Creare un gruppo di sicurezza delle applicazioni con New-AzApplicationSecurityGroup. Un gruppo di sicurezza delle applicazioni consente di raggruppare i server con requisiti di filtro delle porte simili. L'esempio seguente crea due gruppi di sicurezza dell'applicazione.

$webAsg = New-AzApplicationSecurityGroup `
  -ResourceGroupName myResourceGroup `
  -Name myAsgWebServers `
  -Location eastus

$mgmtAsg = New-AzApplicationSecurityGroup `
  -ResourceGroupName myResourceGroup `
  -Name myAsgMgmtServers `
  -Location eastus

Creare regole di sicurezza

Creare una regola di sicurezza con New-AzNetworkSecurityRuleConfig. L'esempio seguente crea una regola che consente il traffico in ingresso proveniente da Internet al gruppo di sicurezza delle applicazioni myWebServers sulle porte 80 e 443:

$webRule = New-AzNetworkSecurityRuleConfig `
  -Name "Allow-Web-All" `
  -Access Allow `
  -Protocol Tcp `
  -Direction Inbound `
  -Priority 100 `
  -SourceAddressPrefix Internet `
  -SourcePortRange * `
  -DestinationApplicationSecurityGroupId $webAsg.id `
  -DestinationPortRange 80,443

The following example creates a rule that allows traffic inbound from the internet to the *myMgmtServers* application security group over port 3389:

$mgmtRule = New-AzNetworkSecurityRuleConfig `
  -Name "Allow-RDP-All" `
  -Access Allow `
  -Protocol Tcp `
  -Direction Inbound `
  -Priority 110 `
  -SourceAddressPrefix Internet `
  -SourcePortRange * `
  -DestinationApplicationSecurityGroupId $mgmtAsg.id `
  -DestinationPortRange 3389

In questo articolo RDP (porta 3389) è esposto a Internet per la VM myAsgMgmtServers. Per gli ambienti di produzione, anziché esporre la porta 3389 a Internet, è consigliabile connettersi alle risorse di Azure da gestire con una connessione di rete VPN o privata.

Creare un gruppo di sicurezza di rete

Creare un gruppo di sicurezza di rete con New-AzNetworkSecurityGroup. L'esempio seguente crea un gruppo di sicurezza di rete denominato myNsg:

$nsg = New-AzNetworkSecurityGroup `
  -ResourceGroupName myResourceGroup `
  -Location eastus `
  -Name myNsg `
  -SecurityRules $webRule,$mgmtRule

Creare una rete virtuale

Creare una rete virtuale con New-AzVirtualNetwork. L'esempio seguente crea una rete virtuale denominata myVirtualNetwork:

$virtualNetwork = New-AzVirtualNetwork `
  -ResourceGroupName myResourceGroup `
  -Location EastUS `
  -Name myVirtualNetwork `
  -AddressPrefix 10.0.0.0/16

Creare una configurazione della subnet con New-AzVirtualNetworkSubnetConfig e quindi scrivere la configurazione della subnet nella rete virtuale con Set-AzVirtualNetwork. L'esempio seguente aggiunge una subnet denominata mySubnet alla rete virtuale e vi associa il gruppo di sicurezza di rete myNsg:

Add-AzVirtualNetworkSubnetConfig `
  -Name mySubnet `
  -VirtualNetwork $virtualNetwork `
  -AddressPrefix "10.0.2.0/24" `
  -NetworkSecurityGroup $nsg
$virtualNetwork | Set-AzVirtualNetwork

Creare macchine virtuali

Prima di creare le macchine virtuali, recuperare l'oggetto rete virtuale con la subnet con Get-AzVirtualNetwork:

$virtualNetwork = Get-AzVirtualNetwork `
 -Name myVirtualNetwork `
 -Resourcegroupname myResourceGroup

Creare un indirizzo IP pubblico per ogni macchina virtuale con New-AzPublicIpAddress:

$publicIpWeb = New-AzPublicIpAddress `
  -AllocationMethod Dynamic `
  -ResourceGroupName myResourceGroup `
  -Location eastus `
  -Name myVmWeb

$publicIpMgmt = New-AzPublicIpAddress `
  -AllocationMethod Dynamic `
  -ResourceGroupName myResourceGroup `
  -Location eastus `
  -Name myVmMgmt

Creare due interfacce di rete con New-AzNetworkInterface e assegnare un indirizzo IP pubblico all'interfaccia di rete. L'esempio seguente crea un'interfaccia di rete, vi associa l'indirizzo IP pubblico myVmWeb e lo rende un membro del gruppo di sicurezza dell'applicazione myAsgWebServers:

$webNic = New-AzNetworkInterface `
  -Location eastus `
  -Name myVmWeb `
  -ResourceGroupName myResourceGroup `
  -SubnetId $virtualNetwork.Subnets[0].Id `
  -ApplicationSecurityGroupId $webAsg.Id `
  -PublicIpAddressId $publicIpWeb.Id

L'esempio seguente crea un'interfaccia di rete, vi associa l'indirizzo IP pubblico myVmMgmt e lo rende un membro del gruppo di sicurezza dell'applicazione myAsgMgmtServers:

$mgmtNic = New-AzNetworkInterface `
  -Location eastus `
  -Name myVmMgmt `
  -ResourceGroupName myResourceGroup `
  -SubnetId $virtualNetwork.Subnets[0].Id `
  -ApplicationSecurityGroupId $mgmtAsg.Id `
  -PublicIpAddressId $publicIpMgmt.Id

Creare due VM nella rete virtuale per convalidare il filtro del traffico in un passaggio successivo.

Creare una configurazione di macchina virtuale con New-AzVMConfig e quindi creare la macchina virtuale con New-AzVM. L'esempio seguente crea una VM che fungerà da server Web. L'opzione -AsJob crea la macchina virtuale in background, quindi è possibile continuare con il passaggio successivo:

# Create user object
$cred = Get-Credential -Message "Enter a username and password for the virtual machine."

$webVmConfig = New-AzVMConfig `
  -VMName myVmWeb `
  -VMSize Standard_DS1_V2 | `
Set-AzVMOperatingSystem -Windows `
  -ComputerName myVmWeb `
  -Credential $cred | `
Set-AzVMSourceImage `
  -PublisherName MicrosoftWindowsServer `
  -Offer WindowsServer `
  -Skus 2016-Datacenter `
  -Version latest | `
Add-AzVMNetworkInterface `
  -Id $webNic.Id
New-AzVM `
  -ResourceGroupName myResourceGroup `
  -Location eastus `
  -VM $webVmConfig `
  -AsJob

Creare una VM che funge da server di gestione:

# Create user object
$cred = Get-Credential -Message "Enter a username and password for the virtual machine."

# Create the web server virtual machine configuration and virtual machine.
$mgmtVmConfig = New-AzVMConfig `
  -VMName myVmMgmt `
  -VMSize Standard_DS1_V2 | `
Set-AzVMOperatingSystem -Windows `
  -ComputerName myVmMgmt `
  -Credential $cred | `
Set-AzVMSourceImage `
  -PublisherName MicrosoftWindowsServer `
  -Offer WindowsServer `
  -Skus 2016-Datacenter `
  -Version latest | `
Add-AzVMNetworkInterface `
  -Id $mgmtNic.Id
New-AzVM `
  -ResourceGroupName myResourceGroup `
  -Location eastus `
  -VM $mgmtVmConfig

La creazione della macchina virtuale richiede alcuni minuti. Prima di continuare con i passaggi successivi, attendere che Azure finisca di creare la VM.

Testare i filtri del traffico

Usare Get-AzPublicIpAddress per restituire l'indirizzo IP pubblico di una macchina virtuale. L'esempio seguente restituisce l'indirizzo IP pubblico della VM myVmMgmt:

Get-AzPublicIpAddress `
  -Name myVmMgmt `
  -ResourceGroupName myResourceGroup `
  | Select IpAddress

Usare il comando seguente per creare una sessione di Desktop remoto con la macchina virtuale myVmMgmt dal computer locale. Sostituire <publicIpAddress> con l'indirizzo IP restituito dal comando precedente.

mstsc /v:<publicIpAddress>

Aprire il file RDP scaricato. Quando richiesto, selezionare Connetti.

Immettere il nome utente e la password specificati durante la creazione della macchina virtuale (potrebbe essere necessario selezionare Altre opzioni, quindi Usa un account diverso per specificare le credenziali immesse quando è stata creata la macchina virtuale), quindi scegliere OK. Durante il processo di accesso, è possibile che venga visualizzato un avviso relativo al certificato. Selezionare per procedere con la connessione.

La connessione ha esito positivo, perché nella porta 3389 è consentito il traffico in ingresso proveniente da Internet al gruppo di sicurezza dell'applicazione myAsgMgmtServers in cui si trova l'interfaccia di rete collegata alla VM myVmMgmt.

Usare il comando seguente per creare una connessione Desktop remoto alla VM myVmWeb, dalla VM myVmMgmt, con il comando seguente, da PowerShell:

mstsc /v:myvmWeb

La connessione ha esito positivo perché una regola di sicurezza predefinita in ciascun gruppo di sicurezza di rete consente il traffico su tutte le porte tra tutti gli indirizzi IP all'interno di una rete virtuale. Non è possibile creare una connessione Desktop remoto alla VM myVmWeb da Internet perché la regola di sicurezza per il gruppo myAsgWebServers non consente il traffico in ingresso da Internet sulla porta 3389.

Usare il comando seguente per installare Microsoft IIS nella VM myVmWeb da PowerShell:

Install-WindowsFeature -name Web-Server -IncludeManagementTools

Al termine dell'installazione di IIS, disconnettersi dalla VM myVmWeb, rimanendo nella connessione Desktop remoto della VM myVmMgmt. Per visualizzare la schermata iniziale di IIS, aprire un browser Internet e passare a http://myVmWeb.

Disconnettersi dalla VM myVmMgmt.

Nel computer immettere il comando seguente da PowerShell per recuperare l'indirizzo IP pubblico del server myVmWeb:

Get-AzPublicIpAddress `
  -Name myVmWeb `
  -ResourceGroupName myResourceGroup `
  | Select IpAddress

Per verificare che sia possibile accedere al server Web myVmWeb dall'esterno di Azure, aprire un browser Internet nel computer e passare a http://<public-ip-address-from-previous-step>. La connessione ha esito positivo, perché nella porta 80 è consentito il traffico in ingresso proveniente da Internet al gruppo di sicurezza dell'applicazione myAsgWebServers in cui si trova l'interfaccia di rete collegata alla VM myVmWeb.

Pulire le risorse

Quando il gruppo di risorse e tutte le risorse in esso contenute non sono più necessari, è possibile usare Remove-AzResourceGroup per rimuoverli:

Remove-AzResourceGroup -Name myResourceGroup -Force

Passaggi successivi

In questo articolo è stato creato un gruppo di sicurezza di rete, che è stato associato a una subnet di rete virtuale. Per altre informazioni sui gruppi di sicurezza di rete, vedere Panoramica dei gruppi di sicurezza di rete e Gestire un gruppo di sicurezza di rete.

Per impostazione predefinita, Azure instrada il traffico tra subnet. È anche possibile ad esempio scegliere di instradare il traffico tra subnet tramite una VM che funge da firewall. Per altre informazioni, vedere Creare una tabella di route.