Nel corso dell'articolo Guida: come aprire le porte su Windows Firewall abbiamo visto come aprire le porte TCP/UDP su Windows Firewall tramite interfaccia grafica. Nel seguente approfondimento vedremo invece come raggiungere il medesimo risultato tramite la linea di comando: una comodità enorme per automatizzare la procedura tramite scripting e, magari, configurare molteplici computer aziendali rapidamente!
» Leggi anche: Guida a PsExec - Lanciare comandi su PC di rete senza installare nulla
I comandi presentati sono compatibili con Windows 10, Windows 8.1 e Windows 7.
La trattazione è quindi incentrata su Windows. Per aprire le porte sul firewall da linea di comando in ambiente Linux, gli approfondimenti da consultare sono:
- Con Ubuntu: Guida rapida a ufw - Come attivare/configurare il firewall su Ubuntu Desktop/Server da linea di comando: aprire le porte, bloccare le connessioni e gli indirizzi IP
- Con CentOS: Aprire le porte sul firewall di Linux CentOS - guida rapida a firewalld
Passo 1: Aprire il Prompt dei comandi di Amministratore
Per poter modificare la configurazione di Windows Firewall è necessario agire tramite il Prompt dei comandi di Amministratore. Per aprirlo:
Passo 2: Disabilitare il blocco indiscriminato delle connessioni
Per prima cosa, dobbiamo disabilitare l'eventuale blocco indiscriminato delle connessioni in ingresso: un'opzione che ignora qualsiasi regola e chiude senza possibilità di appello tutte le porte. I tre comandi da impartire sono:
netsh advfirewall set domainprofile firewallpolicy blockinbound,allowoutbound
netsh advfirewall set privateprofile firewallpolicy blockinbound,allowoutbound
netsh advfirewall set publicprofile firewallpolicy blockinbound,allowoutbound
Il risultato, visto da interfaccia grafica, è il seguente:
Metodo 1: "Sbloccare" tutte le porte di un programma su Windows Firewall tramite linea di comando
A questo punto, possiamo sbloccare le connessioni in ingresso rivolte alle porte aperte da un determinato eseguibile tramite questo comando:
netsh advfirewall firewall add rule name="Zane - Server FTP" dir=in action=allow program="C:\Program Files (x86)\FileZilla Server\FileZilla Server.exe" enable=yes profile="domain,private"
Dove:
-
netsh
: è il nome del programma per la configurazione di Windows Firewall da linea di comando -
advfirewall firewall add rule
: sono i parametri che indicano la volontà di creare una nuova regola -
name="Zane - Server FTP"
: è il nome a piacere da assegnare alla regola. Consiglio l'uso di un prefisso personalizzato per distinguere le regole create da noi nelle varie liste -
dir=in
: la regola riguarda le connessioni in ingresso -
action=allow
: il traffico deve essere permesso -
program="C:\Program Files (x86)\FileZilla Server\FileZilla Server.exe"
: indica quale eseguibile "sbloccare". In questo caso, abbiamo sbloccato un server FTP -
enable=yes
: la regola è attiva -
profile="domain,private"
: per quali profili attivare la regola. I valori possibili sonodomain
,private
e/opublic
(separati da virgole). Omettendo del tutto il parametro, si attiva la regola su tutti i profili
Per maggiori dettagli sul significato dei vari parametri, si veda la trattazione dedicata all'apertura delle porte su Windows Firewall da interfaccia grafica.
Il risultato, visualizzato da interfaccia grafica, è il seguente:
Metodo 2: Aprire determinate porte su Windows Firewall tramite linea di comando
In alternativa, possiamo aprire determinate porte TCP/UDP da linea di comando senza sbloccare interi eseguibili:
netsh advfirewall firewall add rule name="Zane - Server FTP" dir=in action=allow protocol=TCP localport="21,2121,2122" enable=yes profile="domain,private"
Rispetto all'esempio precedente, abbiamo semplicemente eliminato il parametro program=
sostituendolo con:
-
protocol=TCP
: indichiamo se vogliamo aprire una portaTCP
oppureUDP
(a meno di casi specifici, molto probabilmente si tratta diTCP
). -
localport="21,2121,2122"
: è l'elenco separato da virgole di porte che desideriamo sbloccare. Per aprire un intervallo contiguo di porte (dalla 80 alla 85, ad esempio), scriveremo invece80-85
. Possiamo combinare le due "modalità" scrivendo21,2121,2122,80-85
.
Il risultato, visualizzato da interfaccia grafica, è il seguente:
Metodo 3: Abilitare determinati gruppi di servizio
Se invece desideriamo sbloccare determinati gruppi di servizio (un insieme articolato di regole predefinite relative ad un determinato servizio di Windows), bisogna impiegare l'argomento group=
seguito dal nome del gruppo da abilitare.
Per quanto riguarda la condivisione di file e stampanti in rete locale (LAN), ad esempio, useremo:
netsh advfirewall firewall set rule group="Condivisione file e stampanti" new enable=Yes
Per Desktop remoto:
netsh advfirewall firewall set rule group="Desktop remoto" new enable=Yes
Per scoprire il nome del servizio, fare riferimento alla sezione Consenti app o funzionalità attraverso Windows Firewall
dell'interfaccia grafica
Da notare che le regole per i servizi non accettano il parametro profile
(si riceve l'errore Per aggiornare le regole specificate da un gruppo, è possibile utilizzare solo il parametro enable.
): il comando abilita quindi la connessione su qualsiasi profilo, compreso quello pubblico. In queste discussioni [Technet, ServerFault] sono proposte alcune (scomode) soluzioni.
Accettare la connessione solo da determinati indirizzi IP
Un parametro opzionale molto utile è remoteip=
: consente di configurare Windows Firewall di modo che accetti connessioni all'eseguibile/porta in questione solamente quando la richiesta proviene da un determinato indirizzo IP "fidato".
Ad esempio: per accettare la connessione alle porte 80-81,8080-8085
da tutti gli indirizzi IP compresi fra 192.168.0.1
e 192.168.0.10
, oltre che dagli specifici 192.168.0.25
e 192.168.0.30
useremo:
netsh advfirewall firewall add rule name="Zane - Server HTTP solo sviluppatori" dir=in action=allow protocol=TCP localport="80-81,8080-8085" enable=yes profile="domain,private" remoteip="192.168.0.1-192.168.0.10,192.168.0.25,192.168.0.30"
Gli indirizzi IP possono essere locali (LAN) oppure Internet.
Graficamente, il risultato è questo:
Se invece vogliamo accettare la connessione da tutti e soli i sistemi che fanno parte della rete locale (LAN), modificheremo il valore del parametro in questo modo:
remoteip="localsubnet"
eliminare una regola di Windows Firewall da linea di comando
Per eliminare una qualsiasi regola di Windows Firewall da linea di comando basta usare l'argomento delete
seguito dal nome della regola. Ad esempio:
netsh advfirewall firewall delete rule name="Zane - Server FTP"
In alternativa, possiamo usare name="all"
e specificare i criteri della regola da eliminare.
Resettare Windows firewall da linea di comando
Per eliminare in un colpo solo l'intera configurazione personalizzata e ripristinare la situazione "pulita" originale basta impartire:
netsh advfirewall reset
Verificare che la porta sia aperta e accettare connessioni via Internet
Per verificare che la porta sia stata effettivamente aperta, le tecniche di diagnosi dei problemi e un'importante osservazione circa l'apertura delle porte su Internet, si vedano i paragrafi finali del seguente articolo:
» Leggi: Guida: come aprire le porte su Windows Firewall
Riferimenti e maggiori informazioni
Per la preparazione di questo articolo ho fatto riferimento principalmente a queste fonti, che includono anche la lista completa delle opzioni ed i comandi per modificare regole preesistenti:
-
KB947709 - Come utilizzare il contesto "netsh advfirewall firewall" anziché...
-
TechNet DD734783 - Netsh AdvFirewall Firewall Commands