Punti chiave
- RDP è uno strumento fondamentale per i professionisti IT, poiché consente l’accesso remoto ai computer.
- Lo script PowerShell fornito offre un metodo semplificato per abilitare o disabilitare RDP sulle workstation.
- Vengono eseguite due azioni principali: la modifica delle impostazioni del registro di sistema e l’impostazione delle regole del firewall.
- Lo script richiede i privilegi di amministratore e controlla se il computer è una workstation.
- Se da un lato RDP offre comodità, dall’altro può comportare rischi per la sicurezza se configurato in modo errato.
- Il monitoraggio e l’utilizzo di metodi di autenticazione forti sono consigliati per un utilizzo sicuro di RDP.
- Piattaforme come NinjaOne possono essere utilizzate insieme allo script, e in questo modo diventano una soluzione di gestione IT completa.
Il Remote Desktop Protocol (RDP) è uno strumento essenziale nell’arsenale dei professionisti IT, che consente agli utenti di collegarsi da remoto a un altro computer tramite una connessione di rete. Tuttavia, come ogni strumento potente, RDP richiede una gestione prudente, soprattutto in un periodo in cui stanno aumentando i problemi di sicurezza. Questo blog analizza uno script PowerShell progettato per gestire e configurare le impostazioni di Remote Desktop (RDP) sulle workstation.
Background
PowerShell è diventato rapidamente uno strumento fondamentale per gli amministratori IT grazie alla sua flessibilità e profondità. Lo script fornito sfrutta questo potenziale offrendo un metodo rapido per abilitare o disabilitare RDP per le workstation. Poiché gli ambienti IT diventano sempre più complessi, soluzioni semplificate come questo script sono indispensabili per i provider di servizi gestiti (MSP) e i professionisti IT. Assicurarsi che RDP sia configurato correttamente è fondamentale, poiché qualsiasi configurazione errata potrebbe esporre le vulnerabilità.
Lo script
<# .SYNOPSIS Enables or Disables RDP for workstations only. .DESCRIPTION Enables or Disables RDP for workstations only. .EXAMPLE -Disable Disables RDP for a workstation. .EXAMPLE -Enable Enables RDP for a workstation. .OUTPUTS None .NOTES Minimum OS Architecture Supported: Windows 10, Windows Server 2016 Release Notes: Initial Release By using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https://www.ninjaone.com/terms-of-use. Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms. Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party. Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider. Warranty Disclaimer: The script is provided “as is” and “as available”, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations. Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks. Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script. EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA). #> [CmdletBinding(DefaultParameterSetName = "Disable")] param ( [Parameter(Mandatory = $true, ParameterSetName = "Enable")] [switch] $Enable, [Parameter(Mandatory = $true, ParameterSetName = "Disable")] [switch] $Disable ) begin { function Set-ItemProp { param ( $Path, $Name, $Value, [ValidateSet("DWord", "QWord", "String", "ExpandedString", "Binary", "MultiString", "Unknown")] $PropertyType = "DWord" ) # Do not output errors and continue $ErrorActionPreference = [System.Management.Automation.ActionPreference]::SilentlyContinue if (-not $(Test-Path -Path $Path)) { # Check if path does not exist and create the path New-Item -Path $Path -Force | Out-Null } if ((Get-ItemProperty -Path $Path -Name $Name)) { # Update property and print out what it was changed from and changed to $CurrentValue = Get-ItemProperty -Path $Path -Name $Name try { Set-ItemProperty -Path $Path -Name $Name -Value $Value -Force -Confirm:$false -ErrorAction Stop | Out-Null } catch { Write-Error $_ } Write-Host "$Path$Name changed from $CurrentValue to $Value" } else { # Create property with value try { New-ItemProperty -Path $Path -Name $Name -Value $Value -PropertyType $PropertyType -Force -Confirm:$false -ErrorAction Stop | Out-Null } catch { Write-Error $_ } Write-Host "Set $Path$Name to $Value" } $ErrorActionPreference = [System.Management.Automation.ActionPreference]::Continue } function Test-IsElevated { $id = [System.Security.Principal.WindowsIdentity]::GetCurrent() $p = New-Object System.Security.Principal.WindowsPrincipal($id) $p.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator) } # Registry settings $Path = 'HKLM:\System\CurrentControlSet\Control\Terminal Server' $Name = "fDenyTSConnections" $RegEnable = 0 $RegDisable = 1 $osInfo = Get-CimInstance -ClassName Win32_OperatingSystem $IsWorkstation = if ($osInfo.ProductType -eq 1) { $true } else { $false } } process { if (-not (Test-IsElevated)) { Write-Error -Message "Access Denied. Please run with Administrator privileges." exit 1 } if (-not $IsWorkstation) { # System is a Domain Controller or Server Write-Error "System is a Domain Controller or Server. Skipping." exit 1 } # Registry if ($Disable) { $RegCheck = $null $RegCheck = $(Get-ItemPropertyValue -Path $Path -Name $Name -ErrorAction SilentlyContinue) if ($null -eq $RegCheck) { $RegCheck = 0 } if ($RegDisable -ne $RegCheck) { Set-ItemProp -Path $Path -Name $Name -Value $RegDisable Write-Host "Disabled $Path$Name" } else { Write-Host "$Path$Name already Disabled." } } elseif ($Enable) { $RegCheck = $null $RegCheck = $(Get-ItemPropertyValue -Path $Path -Name $Name -ErrorAction SilentlyContinue) if ($null -eq $RegCheck) { $RegCheck = 0 } if ($RegEnable -ne $RegCheck) { Set-ItemProp -Path $Path -Name $Name -Value $RegEnable Write-Host "Enabled $Path$Name" } else { Write-Host "$Path$Name already Enabled." } } else { Write-Error "Enable or Disable was not specified." exit 1 } # Firewall if ($Disable) { # Disable if was enabled and Disable was used try { Disable-NetFirewallRule -DisplayGroup "Remote Desktop" -ErrorAction Stop } catch { Write-Error $_ Write-Host "Remote Desktop firewall group is missing?" } Write-Host "Disabled Remote Desktop firewall rule groups." } elseif ($Enable) { # Enable if was disabled and Enable was used try { Enable-NetFirewallRule -DisplayGroup "Remote Desktop" -ErrorAction Stop } catch { Write-Error $_ Write-Host "Remote Desktop firewall group is missing?" } Write-Host "Enabled Remote Desktop firewall rule groups." } else { Write-Error "Enable or Disable was not specified." exit 1 } } end {}
Accedi a oltre 700 script nel Dojo di NinjaOne
Analisi dettagliata
- Parametri: Lo script utilizza due parametri, Enable e Disable, che stabiliscono se RDP deve essere attivato o disattivato. Si escludono a vicenda; è possibile utilizzarne solo uno alla volta.
- Funzioni di aiuto: Due funzioni assistono il compito primario:
- Set-ItemProp: Aggiorna o crea le proprietà del registro, gestendo i potenziali errori e informando l’utente.
- Test-IsElevated: Controlla se lo script viene eseguito con privilegi di amministratore.
- Processo: Questo è il cuore dello script. Inizia controllando i diritti di amministratore e se il computer è una workstation. Poi prosegue:
- Modifica le impostazioni del registro per abilitare o disabilitare RDP.
- Regola le impostazioni del firewall per consentire o bloccare il traffico RDP.
Casi d’uso potenziali
Immagina un’azienda di medie dimensioni con più workstation per i suoi dipendenti. Il reparto IT, per motivi di sicurezza, ha disabilitato RDP su tutti i computer. Tuttavia, un consulente esterno ha bisogno di accedere in remoto a una workstation per la diagnostica. Utilizzando questo script, l’amministratore IT può abilitare senza problemi RDP su quella specifica workstation e disabilitarlo una volta terminata l’attività.
Confronti
Sebbene esistano strumenti basati su GUI e altri metodi per gestire RDP, lo script fornito offre i seguenti vantaggi:
- Scalabilità: Può essere eseguito su più postazioni di lavoro tramite uno script o un task scheduler.
- Flessibilità: Facilmente integrabile in flussi di lavoro IT più ampi.
- Trasparenza: Essendo open-source, il team IT può convalidare e modificare lo script alle esigenze specifiche.
Domande frequenti
- Questo script può essere eseguito sui server?
No, lo script controlla specificamente se il computer è una workstation prima di essere eseguito.
- Cosa succede se lo script viene eseguito senza i privilegi di amministratore?
Viene visualizzato un messaggio di errore che richiede all’utente di eseguire l’operazione con i privilegi di amministratore.
Implicazioni
Sebbene l’abilitazione di RDP sia comoda, un RDP esposto può rappresentare un rischio significativo per la sicurezza. I criminali informatici sfruttano spesso RDP mal configurati. È quindi indispensabile bilanciare la convenienza con la sicurezza.
Raccomandazioni
- Disattiva sempre RDP quando non viene utilizzato.
- Monitora i log RDP per individuare eventuali attività sospette.
- Utilizza metodi di autenticazione forti quando è abilitato RDP.
Considerazioni finali
Strumenti come NinjaOne migliorano le operazioni IT, offrendo una piattaforma centralizzata per gestire e monitorare reti, dispositivi e altro ancora. Quando si integrano soluzioni come lo script PowerShell di cui abbiamo parlato in strutture IT più ampie, piattaforme come NinjaOne offrono una supervisione e un’efficienza di valore inestimabile.
Grazie alla comprensione e all’implementazione di script PowerShell come quello descritto, i professionisti IT possono migliorare la loro efficienza e la sicurezza dei loro ambienti di lavoro. La combinazione con strumenti potenti come NinjaOne rende la gestione IT ancora più solida.