Configurazione del Firewall di Windows

Panoramica

Questo articolo spiega come configurare Windows Defender Firewall (ex Windows Firewall) su Windows Server. Copre la progettazione dei profili (Domain, Private, Public), l’ottimizzazione delle policy di ingresso/uscita, la raccolta e l’analisi dei log, nonché la gestione centralizzata tramite GPO e script per un’operatività pratica.

Convenzioni sulle variabili

Variabile Esempio Descrizione
<<SERVER_NAME>> SRV-CORE01 Nome host del server di destinazione
<<LOG_PATH>> C:\FirewallLogs\pfirewall.log Percorso del file di log del firewall
<<OU_NAME>> Servers Nome dell’OU

Step 1: Comprendere i profili e il piano di applicazione

Windows Defender Firewall è composto da tre profili:

Profilo Uso Ambiente tipico
Domain Reti membri di Active Directory LAN aziendale, VPN
Private Rete isolata e fidata Ambienti di test, reti chiuse
Public Rete non fidata Wi-Fi pubblico, lab/VM

Ogni profilo è configurabile in modo indipendente e commuta automaticamente in base all’identificatore di rete.

Comando di verifica:

# Stato e policy predefinite di ciascun profilo
Get-NetFirewallProfile | Select-Object Name, Enabled, DefaultInboundAction, DefaultOutboundAction

Step 2: Impostare le policy di base (comportamento predefinito)

Per impostazione predefinita, Windows Defender Firewall blocca l’ingresso e consente l’uscita.
Mantenere questo comportamento o introdurre, se necessario, un controllo esplicito dell’uscita.

# Impostare esplicitamente la policy predefinita
Set-NetFirewallProfile -Profile Domain,Private,Public `
  -DefaultInboundAction Block `
  -DefaultOutboundAction Allow `
  -NotifyOnListen True

Nota: In ambienti ad alta sensibilità, usare -DefaultOutboundAction Block e consentire solo il traffico in uscita necessario (es. DNS, NTP, WSUS): approccio “lista bianca”.


Step 3: Operare e gestire le regole del firewall

Elencare e filtrare

# Tutte le regole
Get-NetFirewallRule

# Regole che contengono "RDP" nel nome
Get-NetFirewallRule | Where-Object DisplayName -Like "*RDP*"

# Solo regole abilitate
Get-NetFirewallRule | Where-Object Enabled -eq "True"

Creare nuove regole

# Consenti ingresso RDP (TCP/3389) per il profilo Domain
New-NetFirewallRule -DisplayName "Allow RDP (Domain)" `
  -Direction Inbound -Protocol TCP -LocalPort 3389 `
  -Action Allow -Profile Domain

# Consenti uscita NTP (UDP/123)
New-NetFirewallRule -DisplayName "Allow NTP Outbound" `
  -Direction Outbound -Protocol UDP -LocalPort 123 `
  -Action Allow -Profile Domain,Private,Public

Parametri: esempi e formati

Voce Parametro Esempio Valori/Formato accettati
Direzione -Direction Inbound / Outbound Inbound, Outbound
Azione -Action Allow / Block Allow, Block
Protocollo -Protocol TCP / UDP / ICMPv4 / ICMPv6 / Any Come indicato; ICMP dettagliabile con -IcmpType
Porta locale -LocalPort 80 / 1024-2048 / 80,443,8080 Porta singola, intervallo, lista CSV
Porta remota -RemotePort 53 / 1000-2000 / 53,67,68 Porta singola, intervallo, lista CSV
Indirizzo remoto -RemoteAddress 192.168.1.1 / 192.168.0.0/24 / Any IP singolo, CIDR, intervallo, lista, Any
Indirizzo locale -LocalAddress 10.0.0.1 / 10.0.0.0/16 / Any IP singolo, CIDR, intervallo, lista, parole chiave, Any
Programma -Program C:\Program Files\App\App.exe Percorso completo dell’eseguibile
Servizio -Service W32Time Nome del servizio Windows
Profilo -Profile Domain,Private Combinazione di Domain, Private, Public
Tipo di interfaccia -InterfaceType Ethernet / Wireless / RemoteAccess Tipi supportati

Esempio: consentire HTTP da IP fidato

New-NetFirewallRule -DisplayName "Allow HTTP from Trusted IP" `
  -Direction Inbound -Protocol TCP -LocalPort 80 `
  -RemoteAddress 192.168.1.100 `
  -Action Allow -Profile Domain,Private

Esempio: regola in uscita basata su programma

New-NetFirewallRule -DisplayName "Allow Outbound for App.exe" `
  -Direction Outbound -Program "C:\Program Files\App\App.exe" `
  -Action Allow -Profile Domain,Private,Public

Esempio: regola in ingresso basata su servizio

New-NetFirewallRule -DisplayName "Allow Service XYZ Inbound" `
  -Direction Inbound -Service "W32Time" `
  -Action Allow -Profile Domain,Private

Esempio: bloccare l’uscita su interfaccia Wi-Fi

New-NetFirewallRule -DisplayName "Block Outbound on Wireless" `
  -Direction Outbound -InterfaceType Wireless `
  -Action Block -Profile Public

Modificare, (dis)abilitare e rimuovere regole

# Disabilitare
Disable-NetFirewallRule -DisplayName "Allow RDP (Domain)"

# Abilitare
Enable-NetFirewallRule -DisplayName "Allow RDP (Domain)"

# Modificare (es.: limitare a Domain e Private)
Set-NetFirewallRule -DisplayName "Allow RDP (Domain)" -Profile Domain,Private

# Rimuovere
Remove-NetFirewallRule -DisplayName "Allow RDP (Domain)"

Esportare/Importare l’insieme di regole

# Esportare la policy del firewall
netsh advfirewall export "C:\Backup\FirewallPolicy.wfw"

# Importare la policy del firewall
netsh advfirewall import "C:\Backup\FirewallPolicy.wfw"

Step 4: Logging e audit

Registrare consentiti/negati e monitorare eventuali anomalie.

# Loggare sia Allow che Block, dimensione massima 32 MB
Set-NetFirewallProfile -Profile Domain,Private,Public `
  -LogAllowed True -LogBlocked True `
  -LogFileName "<<LOG_PATH>>" -LogMaxSizeKilobytes 32767

Lettura in tempo reale:

Get-Content "<<LOG_PATH>>" -Tail 20 -Wait

Attenzione: LogAllowed=True aumenta il volume dei log. In produzione, limitarlo ai profili critici (es. Public) e implementare rotazione/archiviazione.
Il limite di -LogMaxSizeKilobytes è 32767 KB; oltre questo valore si ottiene un errore.


Step 5: Gestione centralizzata tramite GPO

I settaggi del firewall possono essere modificati e automatizzati via GPO usando il modulo GroupPolicy.
Cmdlet chiave: Set-GPRegistryValue, Get-GPO, New-GPO, New-GPLink, Set-GPInheritance.

Creare un GPO e applicare il logging del profilo Domain

  1. Creare o recuperare il GPO

    $gpo = New-GPO -Name "Firewall-Policy-Domain"
    

    Per modificare un GPO esistente: Get-GPO -Name "<NOME_GPO>".

  2. Applicare i valori tramite chiavi di Registro del GPO

    # Abilitare il logging per il profilo Domain
    Set-GPRegistryValue -Name $gpo.DisplayName `
      -Key "HKLM\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\DomainProfile" `
      -ValueName "EnableLogging" -Type DWord -Value 1
    
    # Percorso e dimensione del log
    Set-GPRegistryValue -Name $gpo.DisplayName `
      -Key "HKLM\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\DomainProfile\Logging" `
      -ValueName "LogFilePath" -Type String -Value "%systemroot%\system32\logfiles\firewall\pfirewall.log"
    
    Set-GPRegistryValue -Name $gpo.DisplayName `
      -Key "HKLM\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\DomainProfile\Logging" `
      -ValueName "LogFileSize" -Type DWord -Value 32767
    

Queste impostazioni hanno effetto quando il GPO è collegato a un’OU tramite New-GPLink.

Collegare all’OU (New-GPLink)

Passare il DN dell’OU (o del dominio) a -Target.

Import-Module ActiveDirectory

$gpo = Get-GPO -Name "Firewall-Policy-Domain"

# Trovare l’OU per nome e recuperarne il DN
$ou = Get-ADOrganizationalUnit -LDAPFilter '(name=<<OU_NAME>>)' `
      -SearchBase (Get-ADDomain).DistinguishedName -SearchScope Subtree |
      Select-Object -First 1
$ouDn = $ou.DistinguishedName

# Collegare il GPO all’OU (abilitato; Enforced opzionale)
New-GPLink -Name $gpo.DisplayName -Target $ouDn -LinkEnabled Yes -Enforced No

Prerequisiti: moduli ActiveDirectory e GroupPolicy (RSAT) sulla postazione di amministrazione.


Step 6: Verifiche periodiche e troubleshooting

# Regole effettivamente attive
Get-NetFirewallRule | Where-Object {$_.Enabled -eq "True"} |
  Select-Object DisplayName, Direction, Action, Profile

# Test di connettività porta
Test-NetConnection -ComputerName <<SERVER_NAME>> -Port 3389

Conclusione

Windows Defender Firewall offre una solida difesa di rete su Windows Server. Combinando controllo esplicito del traffico in/uscita, analisi dei log e gestione centralizzata/automatizzata via GPO e PowerShell, si ottengono visibilità e sicurezza in linea con l’hardening e adatte all’era dello zero trust.