Punti chiave
- Automatizza gli audit delle porte con PowerShell: usa Get-NetTCPConnection, Get-NetUDPEndpoint e Invoke-Command per analizzare le porte aperte in locale o da remoto ed esportare i log in CSV.
- Centralizza i risultati nel Registro di sistema: salva i dati dell’audit e i timestamp in HKLM:\SOFTWARE\<CompanyName>\PortAudit per il monitoraggio continuo e gli avvisi.
- Applica la sicurezza con le GPO: usa i Criteri di gruppo per standardizzare le regole firewall e includi le scansioni UDP per una visibilità completa della rete.
- Riduci rischi e falsi positivi: esegui gli script con privilegi di amministratore, filtra gli indirizzi di loopback e confronta i risultati con le regole del firewall.
Una porta di rete aperta verso internet e non monitorata è una vulnerabilità che prima o poi verrà sfruttata ed espone i client remoti a rischi inutili. Verificare regolarmente l’esposizione delle porte è fondamentale per applicare le policy di sicurezza e garantire che siano raggiungibili solo i servizi autorizzati.
In questa guida imparerai a usare PowerShell per automatizzare questi controlli su larga scala, ottenendo una visibilità approfondita senza strumenti costosi.
Individua le porte di rete aperte a rischio e proteggi gli endpoint remoti.
📌Strategie di distribuzione consigliate:
Fai clic per scegliere un metodo | 💻 Ideale per singoli utenti | 💻💻💻 Ideale per le aziende enterprise |
| Metodo 1: PowerShell | ✓ | ✓ |
| Metodo 2: Registro di sistema | ✓ | ✓ |
| Metodo di supporto, opzione 1: tramite GPO | ✓ | |
| Metodo di supporto, opzione 2: tramite Get-NetUDPEndpoint | ✓ | ✓ |
Prima di procedere, ti consigliamo di leggere ⚠️ Aspetti a cui prestare attenzione.
Come verificare le porte di rete aperte con un audit in PowerShell
Controllare regolarmente le porte aperte è una pratica fondamentale per mantenere una rete sicura. Ti aiuta a individuare e chiudere le potenziali vulnerabilità prima che un malintenzionato possa usarle contro di te.
📌 Situazione d’uso: esegui questo controllo in alcune situazioni chiave: quando configuri un nuovo computer per verificare che sia sicuro, con cadenza regolare (per esempio ogni mese), dopo l’installazione di nuovo software e quando sospetti un problema di sicurezza, per cercare tracce di un intruso.
📌 Prerequisiti: per verificare se le porte TCP e UDP sono aperte nella tua rete ti servono poche cose:
- Dispositivi Windows recenti (Windows 10/11 o Windows Server).
- Accesso come amministratore su quelle macchine.
- PowerShell Remoting (WinRM) abilitato, oppure uno strumento RMM come NinjaOne, per eseguire i comandi.
Guarda Come verificare le porte di rete aperte sui client remoti con PowerShell e registrare i risultati: un utile riferimento visivo.
Metodo 1: verificare le porte di rete aperte con PowerShell
Il modo più semplice per sapere quali porte sono aperte su una macchina Windows 11 è usare i comandi nativi di PowerShell, che restituiscono dati chiari e immediatamente utilizzabili.
Procedura passo passo:
- Apri PowerShell (amministratore) oppure Terminale Windows (amministratore).
- Esegui questo comando per ottenere tutte le connessioni TCP in ascolto e formattare chiaramente l’output:
| Get-NetTCPConnection -State Listen | Select-Object LocalAddress, LocalPort, OwningProcess, @{Name=”ProcessName”; Expression={(Get-Process -Id $_.OwningProcess).Name}} |
Questo comando filtra solo le porte nello stato Listen e mostra l’indirizzo IP locale, il numero di porta, l’ID del processo (PID) e il nome dell’eseguibile.
- Per ottenere le stesse informazioni sulle porte UDP (che sono senza connessione), usa il cmdlet Get-NetUDPEndpoint:
| Get-NetUDPEndpoint | Select-Object LocalAddress, LocalPort, OwningProcess, @{Name=”ProcessName”; Expression={(Get-Process -Id $_.OwningProcess).Name}} |
- Per conservare i risultati dell’audit a fini di reporting, esporta i dati in un file CSV. Questo comando unisce i risultati TCP e UDP in un unico log:
$Output = @()$Output += Get-NetTCPConnection -State Listen | Select-Object @{Name="Protocol"; Expression={"TCP"}}, LocalAddress, LocalPort, OwningProcess, @{Name="ProcessName"; Expression={(Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).Name}}$Output += Get-NetUDPEndpoint | Select-Object @{Name="Protocol"; Expression={"UDP"}}, LocalAddress, LocalPort, OwningProcess, @{Name="ProcessName"; Expression={(Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).Name}}$Output | Export-Csv -Path "C:\Audit\LocalPortAudit.csv" -NoTypeInformation |
💡Nota: questo comando genera un file chiamato LocalPortAudit.csv nella cartella C:\Audit. La console non mostra alcun output, perché tutti i risultati vengono scritti direttamente nel file CSV.
- Verifica se una porta di rete è aperta su un client remoto usando PowerShell Remoting (WinRM).
Usa il cmdlet Invoke-Command per eseguire l’audit su uno o più PC remoti. Questo esempio controlla un computer chiamato CLIENT-PC-01.
| Invoke-Command -ComputerName CLIENT-PC-01 -ScriptBlock { Get-NetTCPConnection -State Listen | Select-Object LocalAddress, LocalPort, OwningProcess, @{Name=”ProcessName”; Expression={(Get-Process -Id $_.OwningProcess).Name}} } | Export-Csv "\\YourServer\AuditLogs\CLIENT-PC-01-Ports.csv" -NoTypeInformation |
Al termine della procedura avrai un file di log dettagliato (CSV) con tutte le porte TCP e UDP aperte sulla macchina di destinazione, insieme all’applicazione associata e al relativo ID di processo. Questo log è l’elenco di riferimento per le tue analisi.
💡Nota: sostituisci CLIENT-PC-01 con il nome effettivo del computer da controllare e modifica il percorso di esportazione (ad esempio \\YourServer\AuditLogs\...) indicando una cartella esistente e accessibile nel tuo ambiente.
Metodo 2: usare il Registro di sistema per la registrazione dei log e il monitoraggio dello stato
Salvare i risultati dell’audit nel Registro di sistema di Windows crea una traccia permanente e facilmente consultabile dagli strumenti di monitoraggio centralizzato.
Questo metodo scrive i dati principali del tuo audit PowerShell – come il timestamp e il numero di porte aperte – in una posizione dedicata del registro (HKLM). Non configura funzionalità di sistema, ma usa il registro come semplice database di informazioni di stato.
Procedura passo passo:
- Crea una chiave di registro personalizzata. Esegui i seguenti script PowerShell sulla macchina Windows 11 di destinazione: eseguiranno l’audit e salveranno un riepilogo nel Registro di sistema.
Esegui l’audit delle porte:
$OpenTCPPorts = Get-NetTCPConnection -State Listen | Where-Object { $_.LocalAddress -notin @('127.0.0.1', '::1') }$OpenUDPPorts = Get-NetUDPEndpoint | Where-Object { $_.LocalAddress -notin @('127.0.0.1', '::1') }$TotalOpenPorts = $OpenTCPPorts.Count + $OpenUDPPorts.Count |
- Crea una chiave di registro in cui salvare i risultati (il parametro -Force crea le eventuali cartelle padre mancanti):
New-Item -Path "HKLM:\SOFTWARE\YourCompanyName\PortAudit" -Force
💡Nota: prima di eseguire il comando, sostituisci YourCompanyName con un nome significativo per la tua organizzazione.
- Salva i dati:
Set-ItemProperty -Path "HKLM:\SOFTWARE\YourCompanyName\PortAudit" -Name "LastAuditTime" -Value (Get-Date -Format "yyyy-MM-dd HH:mm:ss")Set-ItemProperty -Path "HKLM:\SOFTWARE\YourCompanyName\PortAudit" -Name "OpenPortsCount" -Value $TotalOpenPorts |
- Convalida i dati. Puoi verificare rapidamente che i dati siano stati scritti correttamente usando il Prompt dei comandi:
reg query "HKLM\SOFTWARE\YourCompanyName\PortAudit"
- Integra il tutto con strumenti di monitoraggio come NinjaOne o con un’attività pianificata. Ti aiuterà a verificare se una porta di rete è aperta leggendo il valore OpenPortsCount.
- Un valore superiore a una soglia di riferimento può generare automaticamente un avviso perché un tecnico possa approfondire.
Al termine di questa procedura, i tuoi client remoti avranno una posizione standard nel registro con i risultati dell’ultimo audit. In questo modo il tuo sistema di monitoraggio centrale può raccogliere all’istante queste informazioni di stato da migliaia di macchine.
Metodi di supporto per standardizzare le policy sulle porte aperte
Usa i Criteri di gruppo per controllare in modo proattivo quali porte possono restare aperte, garantendo un livello di sicurezza uniforme su tutti i dispositivi Windows 11.
📌 Situazione d’uso: applica queste impostazioni quando definisci un nuovo baseline di sicurezza o per far rispettare gli standard di conformità in tutta la rete. È una misura preventiva, non solo di rilevamento.
📌 Prerequisiti: prima di procedere, assicurati di avere un dominio Windows Active Directory, Windows 10/11 Pro, Enterprise o Education su tutti i client e le autorizzazioni per creare e gestire i Criteri di gruppo.
Opzione 1: usare una GPO per l’hardening e la standardizzazione delle regole sulle porte aperte
Usa i Criteri di gruppo per definire e applicare in modo proattivo quali porte possono restare aperte, ottenendo una configurazione coerente e sicura su tutta la rete.
📌 Situazione d’uso: questo metodo distribuisce in modo centralizzato le regole del firewall da un domain controller a tutti i client Windows 11, prevalendo su qualsiasi impostazione locale. È efficace perché applica il principio del privilegio minimo, garantendo che solo i servizi approvati possano comunicare.
Procedura passo passo:
- Raggiungi le impostazioni del firewall nella GPO.
- Sul domain controller, apri la Console Gestione Criteri di gruppo (gpmc.msc).
- Crea una nuova GPO o modificane una esistente.
- Vai su Configurazione del computer > Criteri > Impostazioni di Windows > Impostazioni sicurezza > Windows Firewall con sicurezza avanzata > Regole connessioni in entrata.
- Crea e configura le regole.
- Fai clic con il pulsante destro nel riquadro Regole connessioni in entrata e seleziona Nuova regola….
- Usa la procedura guidata per creare regole che:
- Blocchino l’RDP in entrata (porta 3389), a meno che non venga creata una regola specifica che lo consenta da una VLAN di gestione sicura o tramite VPN.
- Neghino l’accesso ai servizi guest e ai protocolli legacy e insicuri come SMBv1.
- Applichino eccezioni basate sulle applicazioni (ad esempio consentendo %ProgramFiles%\YourApp\yourapp.exe) invece di aprire ampi intervalli di porte).
- Usino, quando possibile, l’opzione “Consenti solo se sicura” per limitare le connessioni ai programmi con firma digitale.
Dopo aver collegato questa GPO alla tua unità organizzativa, tutti i computer interessati riceveranno e applicheranno automaticamente queste regole firewall.
I tentativi di accesso non autorizzato sulle porte indicate verranno bloccati immediatamente, riducendo in modo significativo la superficie di attacco. Il tuo ambiente avrà così una configurazione uniforme e sottoposta ad hardening, molto più resistente ai movimenti laterali e agli attacchi.
Opzione 2: uso facoltativo di Get-NetUDPEndpoint per coprire le porte UDP
Un audit completo delle porte deve includere gli endpoint UDP, che possono nascondere rischi di sicurezza trascurati. Questo metodo usa il cmdlet Get-NetUDPEndpoint, che interroga lo stack di rete di Windows per elencare tutti i listener UDP attivi.
📌 Situazione d’uso: includi sempre un audit UDP nei controlli periodici del baseline di sicurezza e in qualsiasi audit completo delle porte, così da avere un quadro esaustivo di tutti i servizi esposti alla rete su un dispositivo Windows 11.
Procedura passo passo:
- Verifica i listener UDP.
Apri una finestra PowerShell con privilegi elevati ed esegui il comando seguente per vedere tutte le porte UDP aperte e i processi che le utilizzano:
| Get-NetUDPEndpoint | Select-Object LocalAddress, LocalPort, OwningProcess, @{Name=”ProcessName”; Expression={(Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).Name}} |
- Unisci i risultati TCP e UDP in un unico report.
Per un audit completo, unisci i risultati delle scansioni TCP e UDP in un unico report. Lo script seguente svolge questa operazione e salva tutte le informazioni in un file CSV.
- Ottieni tutte le porte TCP in ascolto:
$tcp = Get-NetTCPConnection -State Listen | Where-Object { $_.LocalAddress -notin @('127.0.0.1', '::1') } | Select-Object @{Name="Protocol"; Expression={"TCP"}}, LocalAddress, LocalPort, OwningProcess, @{Name="ProcessName"; Expression={(Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).Name}} |
- Ottieni tutti gli endpoint UDP:
$udp = Get-NetUDPEndpoint | Where-Object { $_.LocalAddress -notin @('127.0.0.1', '::1') } | Select-Object @{Name="Protocol"; Expression={"UDP"}}, LocalAddress, LocalPort, OwningProcess, @{Name="ProcessName"; Expression={(Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).Name}} |
- Unisci i risultati ed esportali in un file CSV:
$tcp + $udp | Export-Csv -Path "C:\Audit\Full_Port_Audit_Report.csv" -NoTypeInformation |
Al termine della procedura avrai un unico file di log consolidato che descrive in dettaglio ogni porta TCP e UDP aperta sul sistema.
Questa visione d’insieme è essenziale per un hardening efficace della sicurezza: ti permette di individuare e approfondire qualsiasi listener UDP non autorizzato con la stessa efficacia di uno TCP, rendendo davvero completo il tuo audit delle porte aperte.
⚠️ Aspetti a cui prestare attenzione
Questa sezione illustra le possibili difficoltà da considerare quando segui questa guida.
| Rischi | Possibili conseguenze | Come rimediare |
| 1. WinRM non abilitato o non raggiungibile | L’impossibilità di eseguire comandi PowerShell remoti blocca gli audit automatizzati su tutta la rete. | Abilita PSRemoting tramite GPO oppure esegui Enable-PSRemoting -Force sul client di destinazione. Verifica che il firewall di Windows consenta la porta 5985 (HTTP) o 5986 (HTTPS). |
| 2. Esecuzione degli script senza privilegi elevati | Dati dell’audit incompleti: alcune porte critiche potrebbero non essere rilevate e i processi potrebbero non essere risolti, dando un falso senso di sicurezza. | Esegui sempre PowerShell come amministratore. Per l’esecuzione remota, assicurati che il contesto (ad esempio l’agente RMM) disponga dei privilegi SYSTEM o di amministratore. |
| 3. Regole firewall GPO troppo restrittive | Malfunzionamento dei Criteri di gruppo dovuto al blocco di porte essenziali (RPC, SMB); perdita diffusa di connettività di rete e di accesso amministrativo |
|
| 4. Errori di accesso negato al Registro di sistema | Impossibilità di scrivere i dati di riepilogo dell’audit in HKLM:, con conseguente blocco del monitoraggio e del reporting centralizzati | Assicurati che lo script venga eseguito in un contesto con privilegi sufficienti (ad esempio l’account LocalSystem tramite uno strumento RMM). Verifica manualmente le autorizzazioni sulla chiave di registro. |
| 5. Terminazione di un processo basandosi solo sulla sua porta | Interruzione di un’applicazione o di un servizio di sistema critico, con tempi di inattività e possibile perdita di dati | Riavvia il servizio interrotto o riavvia la macchina. Verifica sempre il nome e la funzione del processo prima di intervenire. |
| 6. Esclusione delle porte UDP dall’audit | Esposizioni di sicurezza critiche non rilevate, perché malware e servizi non autorizzati usano spesso UDP per comunicare ed esfiltrare dati | Ripeti l’audit usando il cmdlet Get-NetUDPEndpoint e includilo in tutti i controlli di baseline futuri. |
Aspetti chiave per ottimizzare la strategia di audit delle porte
Una strategia di audit delle porte efficace richiede una pianificazione accurata, al di là della semplice esecuzione dei comandi.
Scalabilità degli audit remoti
Per sapere quali porte sono aperte in tutta la rete devi automatizzare il processo. Usa Invoke-Command di PowerShell per agire su un elenco di computer, oppure sfrutta uno strumento RMM come NinjaOne per distribuire lo script di audit su tutti gli endpoint contemporaneamente.
In questo modo puoi raccogliere un report centralizzato da centinaia di dispositivi in pochi minuti, rendendo praticabile un audit regolare delle porte aperte.
Ridurre al minimo i falsi positivi
Non tutte le porte aperte sono una vulnerabilità. Gli indirizzi di loopback interni (127.0.0.1, ::1) indicano servizi che comunicano con la macchina locale e spesso sono innocui.
Filtrali nei tuoi script per concentrare il report sulle porte associate agli indirizzi IP fisici della macchina, che sono esposte alla rete e rappresentano un problema di sicurezza più rilevante.
Tenere conto delle discrepanze con il firewall
Una porta aperta su un dispositivo non significa sempre che sia raggiungibile da internet. Un firewall di rete a monte o lo stesso Windows Firewall del dispositivo potrebbero bloccare l’accesso dall’esterno.
L’audit ti dice che cosa è in ascolto: devi correlare questo dato con le regole del firewall per capire che cosa è davvero esposto. Verifica sempre i risultati critici.
Stabilire una cadenza regolare
Un singolo audit è solo una fotografia. Per mantenere la sicurezza nel tempo, esegui questi controlli con cadenza regolare, per esempio ogni mese o in linea con i cicli mensili di patch. Così individui rapidamente eventuali nuovi servizi non autorizzati e puoi verificare che le distribuzioni software recenti non abbiano introdotto esposizioni di rete impreviste.
Individua le porte aperte prima degli attaccanti con il monitoraggio di rete automatizzato di NinjaOne.
Come NinjaOne semplifica l’audit delle porte
NinjaOne si integra direttamente nel tuo flusso di lavoro di audit delle porte per automatizzarlo e semplificarlo.
- Distribuzione semplice degli script: invia script PowerShell personalizzati per verificare quali porte sono aperte su tutti gli endpoint da una dashboard centrale.
- Risultati centralizzati: salva automaticamente i risultati dell’audit, come il numero di porte, in un registro unificato per semplificare reporting e revisione.
- Avvisi proattivi: attiva notifiche immediate se su un dispositivo vengono rilevate porte non autorizzate (ad esempio SMBv1, Telnet).
- Report di conformità: crea report pianificati sullo stato delle porte aperte per le revisioni con i clienti e gli audit di conformità.
- Priorità di intervento: contrassegna automaticamente i dispositivi con esposizioni ad alto rischio, così un tecnico può intervenire subito.
Guida rapida
NinjaOne offre diversi modi per verificare le porte di rete aperte sui client remoti:
1. Script integrato per il monitoraggio delle porte
Esiste uno script integrato chiamato “Search for Listening and Established Ports” che può:
- Generare avvisi sulle porte specificate che risultano in ascolto o stabilite
- Salvare facoltativamente i risultati in un campo personalizzato
2. Funzionalità PowerShell
Puoi creare script PowerShell personalizzati per:
- Usare
netstatper verificare le porte aperte - Registrare i risultati nei log attività o nei campi personalizzati
- Eseguire audit delle porte di rete su più client remoti
3. Funzionalità della Network Management Solution (NMS)
La Network Management Solution (NMS) di NinjaOne offre:
- Controlli sullo stato delle porte
- Monitoraggio di porte specifiche
- Possibilità di creare condizioni sullo stato delle porte nelle policy
Proteggi la rete gestendo le porte aperte
Verificare regolarmente le porte di rete aperte sui client è una difesa fondamentale contro accessi non autorizzati e potenziali violazioni. Questa guida propone metodi pratici per controllare e gestire le porte aperte.
Applicando questi passaggi trasformi rischi sconosciuti in risorse gestite, rafforzando in modo significativo la tua postura di sicurezza e garantendo la conformità in tutto l’ambiente.
Argomenti correlati
