Amministrare PC in rete locale con PowerShell via HTTPS

Come amministrare i computer collegati in LAN usando PowerShell e trasferendo i dati in forma crittografata, ricorrendo al protocollo HTTPS.

Nell’articolo Gestire PC in rete locale con PowerShell abbiamo visto che per un amministratore di sistema diventa semplicissimo collegarsi agli altri PC in rete locale e gestirli comodamente dalla propria macchina.
In quell’articolo abbiamo visto come abilitare e utilizzare il servizio Gestione remota Windows (WS-Management) integrato nel sistema operativo con i dati che tra server e client (e viceversa) fluivano però in chiaro, senza l’applicazione di alcun algoritmo crittografico.

Partendo da quanto già appreso, questa volta vediamo come amministrare i PC in rete locale sempre usando PowerShell ma attivando la cifratura dei pacchetti in transito con il protocollo HTTPS.

I passaggi che permettono di collegarsi ai PC della LAN via HTTPS sono addirittura ancora più semplici rispetto a quelli descritti nell’articolo citato in apertura.

Come gestire i computer in rete locale con PowerShell e il protocollo HTTPS: configurazione del sistema server

Ancora una volta, per semplicità chiamiamo “server” il sistema che deve essere amministrato a distanza attraverso la rete locale.

Su questo sistema bisognerà innanzi tutto aprire una finestra di Windows PowerShell con i diritti di amministratore (Windows+X) e digitare quanto segue:

$Cert=New-SelfSignedCertificate -CertStoreLocation Cert:\LocalMachine\My -DnsName $env:computername

Verrà così creato un certificato digitale firmato in proprio che sarà sfruttato in seguito per confermare l'”identità” della macchina server.
Bisognerà quindi provvedere ad esportare la chiave pubblica associata a tale certificato. Per procedere si dovrà scrivere:

md C:\TEMP
Export-Certificate -Cert $Cert -FilePath C:\TEMP\CERT.cer

Il primo comando permette di creare una cartella C:\TEMP: nel caso in cui tale percorso dovesse esistere già, si otterrà il messaggio d’errore “Esiste già un elemento con il nome specifico“. Ignorare l’errore.

Come nell’articolo citato nell’introduzione, basterà a questo punto digitare il comando:

Enable-PSRemoting -Force

Si può eventualmente usare la sintassi Enable-PSRemoting -SkipNetworkProfileCheck -Force per evitare che il server risponda a tentativi di connessione in ingresso allorquando l’interfaccia di rete fosse configurata come Pubblica e non come Privata: Differenza tra rete pubblica e rete privata in Windows 10.

Dal momento che per default il servizio Gestione remota Windows (WS-Management) viene configurato per funzionare su protocollo HTTP – quindi con tutti i pacchetti dati inviati e ricevuti in chiaro -, i comandi seguenti consentiranno di disabilitare l’utilizzo di informazioni non crittografate:

Get-ChildItem WSMan:\Localhost\listener | Where -Property Keys -eq "Transport=HTTP" | Remove-Item -Recurse
Remove-Item -Path WSMan:\Localhost\listener\listener* -Recurse
Set-NetFirewallRule -DisplayName 'Gestione remota Windows (HTTP-In)' -Enabled False -PassThru | Select -Property DisplayName, Profile, Enabled

Dopo aver rimosso tutti i listener esistenti, basterà aggiungerne uno per il solo protocollo HTTPS:

New-Item -Path WSMan:\LocalHost\Listener -Transport HTTPS -Address * -CertificateThumbPrint $Cert.Thumbprint -Force

Con l’utilizzo della variabile $Cert si indica al servizio Gestione remota Windows (WS-Management) di usare il certificato autogenerato in precedenza.

A questo punto, come ultimi passaggi, si devono creare le regole firewall per accettare le connessioni crittografate (sulla porta TCP 5986):

New-NetFirewallRule -DisplayName "Windows Remote Management (HTTPS-In)" -Name "Windows Remote Management (HTTPS-In)" -Profile Any -LocalPort 5986 -Protocol TCP

Configurazione del client

Impostare la macchina che l’amministratore userà per gestire a distanza gli altri sistemi connessi in rete locale è semplicissimo.

È necessario, innanzi tutto, premere la combinazione di tasti Windows+X quindi scegliere Windows PowerShell (amministratore).

Nella finestra di PowerShell si dovranno digitare i seguenti due comandi per configurare e avviare il servizio Gestione remota Windows (WS-Management):

Set-Service WinRM -StartupType 2 -PassThru
Start-Service WinRM -PassThru

Bisognerà quindi importare il file contenente la chiave pubblica del sistema server (copiandolo manualmente da tale macchina). Supponendo di aver memorizzato il file CERT.cer sul desktop di Windows, bisognerà digitare da PowerShell:

Import-Certificate -Filepath "$env.userprofile\Desktop\CERT.cer" -CertStoreLocation "Cert:\LocalMachine\Root"

A questo punto è possibile collegarsi via PowerShell e HTTPS all’altra macchina digitando:

Enter-PSSession -ComputerName NOME-SERVER -UseSSL -Credential NOME-UTENTE

Al posto di NOME-SERVER bisognerà ovviamente digitare il nome del server sostituendo NOME-UTENTE con il nome di un account presente sulla macchina server dotato dei privilegi amministrativi.

Nel caso in cui PowerShell dovesse visualizzare il messaggio “Il certificato SSL è firmato da un’Autorità di certificazione sconosciuta“, per risolvere il problema basterà digitare quanto segue:

$so=New-PSSessionOption -SkipCACheck
Enter-PSSession -ComputerName NOME-SERVER -UseSSL -Credential NOME-UTENTE -SessionOption $so

A questo punto apparirà il prompt della macchina remota e si potrà amministrarla (eseguendo comandi e script, PowerShell compresi) come se si fosse fisicamente seduti dinanzi ad essa.

Disattivare e riattivare la regola firewall in ingresso sui sistemi server

Nel caso in cui, successivamente, si volesse disattivare la gestione delle richieste di amministrazione provenienti dagli altri PC, basterà digitare disattivare la regola firewall in ingresso sulla macchina server:

Disable-NetFirewallRule -DisplayName "Windows Remote Management (HTTPS-In)"

Per riattivarla, basterà eventualmente usare il comando seguente:

Enable-NetFirewallRule -DisplayName "Windows Remote Management (HTTPS-In)"

Disattivare il servizio di gestione remota Windows sulla macchina client

Se in seguito si volesse disabilitare il servizio di gestione remota sulla macchina usata per amministrare altri computer in rete locale, sarà sufficiente aprire una finestra di PowerShell con i diritti amministrativi e usare alcuni semplici comandi:

Stop-Service WinRM -PassThru
Set-Service WinRM -StartupType Disabled -PassThru

Disinstallare il servizio di gestione remota sui server

La completa disinstallazione del servizio di gestione remota sui sistemi server è leggermente più articolata. Di seguito i comandi da impartire dalla finestra di PowerShell aperta con i diritti di amministratore:

Disable-PSRemoting -Force
Remove-Item -Path WSMan:\localhost\listener\listener* -Recurse
Stop-Service WinRM -PassThru
Set-Service WinRM -StartupType Disabled -PassThru
Set-NetFirewallRule -DisplayName 'Gestione remota Windows (HTTP-In)' -Enabled False -PassThru | Select -Property DisplayName, Profile, Enabled
Set-NetFirewallRule -DisplayName 'Windows Remote Management (HTTPS-In)' -Enabled False -PassThru | Select -Property DisplayName, Profile, Enabled
Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\system -Name LocalAccountTokenFilterPolicy -Value 0

Ti consigliamo anche

Link copiato negli appunti