Abilitare o disabilitare RDP (Remote Desktop Protocol) sulle workstation utilizzando PowerShell

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 per abilitare o disabilitare RDP 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 per abilitare o disabilitare RDP, 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) e per abilitare o disabilitare 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 per abilitare o disabilitare RDP

<#
.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

Ottieni l’accesso

Analisi dettagliata

  • Parametri: Lo script per abilitare o disabilitare RDP 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 per abilitare o disabilitare RDP viene eseguito con privilegi di amministratore.
  • Processo: Questo è il cuore dello script per abilitare o disabilitare RDP. 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 per abilitare o disabilitare RDP, 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 per abilitare o disabilitare RDP 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 per abilitare o disabilitare RDP in base alle esigenze specifiche.

Domande frequenti

  • Questo script per abilitare o disabilitare RDP può essere eseguito sui server?
    No, lo script controlla specificamente se il computer è una workstation prima di essere eseguito.
  • Cosa succede se lo script per abilitare o disabilitare RDP 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 per abilitare o disabilitare RDP 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.

Passi successivi

La creazione di un team IT efficiente ed efficace richiede una soluzione centralizzata che funga da principale strumento per la fornitura di servizi. NinjaOne consente ai team IT di monitorare, gestire, proteggere e supportare tutti i dispositivi, ovunque essi si trovino, senza la necessità di una complessa infrastruttura locale.

Per saperne di più su NinjaOne Endpoint Management, fai un tour dal vivo, o inizia la tua prova gratuita della piattaforma NinjaOne.

Categorie:

Ti potrebbe interessare anche

Guarda una demo×
×

Guarda NinjaOne in azione!

Inviando questo modulo, accetto La politica sulla privacy di NinjaOne.

Termini e condizioni NinjaOne

Cliccando sul pulsante “Accetto” qui sotto, dichiari di accettare i seguenti termini legali e le nostre condizioni d’uso:

  • Diritti di proprietà: NinjaOne possiede e continuerà a possedere tutti i diritti, i titoli e gli interessi relativi allo script (compreso il copyright). NinjaOne ti concede una licenza limitata per l’utilizzo dello script in conformità con i presenti termini legali.
  • Limitazione d’uso: Puoi utilizzare lo script solo per legittimi scopi personali o aziendali interni e non puoi condividere lo script con altri soggetti.
  • Divieto di ripubblicazione: In nessun caso ti è consentito ripubblicare lo script in una libreria di script appartenente o sotto il controllo di un altro fornitore di software.
  • Esclusione di garanzia: Lo script viene fornito “così com’è” e “come disponibile”, senza garanzie di alcun tipo. NinjaOne non promette né garantisce che lo script sia privo di difetti o che soddisfi le tue esigenze o aspettative specifiche.
  • Assunzione del rischio: L’uso che farai dello script è da intendersi a tuo rischio. Riconosci che l’utilizzo dello script comporta alcuni rischi intrinseci, che comprendi e sei pronto ad assumerti.
  • Rinuncia e liberatoria: Non riterrai NinjaOne responsabile di eventuali conseguenze negative o indesiderate derivanti dall’uso dello script e rinuncerai a qualsiasi diritto legale o di equità e a qualsiasi rivalsa nei confronti di NinjaOne in relazione all’uso dello script.
  • EULA: Se sei un cliente NinjaOne, l’uso dello script è soggetto al Contratto di licenza con l’utente finale (EULA) applicabile.