Abilita Desktop remoto in Windows Firewall dalla riga di comando


12

nota: # il tag della riga di comando non implica solo file batch, accetterò uno script PowerShell o qualsiasi utilità disponibile gratuitamente, che può essere avviata dalla riga di comando e terminare il suo lavoro incustodito.


tl; dr

come trasformare incustoditamente le regole del firewall esattamente nello stato della GUI, in Windows Vista in Windows 10 di qualsiasi linguaggio di interfaccia (display)?

Elaborare

Questa domanda è simile a # 786383 , ma non è la stessa.

Fondamentalmente, perché la risposta non è buona per me:

  1. set rule group="remote desktop" new enable=Yesapre la porta 3389 per le reti pubbliche e voglio evitarlo. Inoltre, diverse lingue di Windows hanno nomi di gruppi diversi, ma ho bisogno di una soluzione universale.
  2. netsh firewall set service type = remotedesktop mode = enable non funziona neanche per me: è deprecato da win7 e consente rdp solo per la rete corrente (se sei in uno pubblico, 3389 verrà aperto per le reti pubbliche e non funzionerà successivamente nelle reti private).

Prima di abilitare RDP tramite GUI, esiste una sola regola per protocollo per RDP. Ma quando RDP è abilitato tramite GUI, la porta viene aperta solo per reti private e di dominio e le regole divise per questo. Dopo l'abilitazione, ci sono 4 regole in Windows 8+ e 2 regole (no UDP) in Windows XP, Vista e 7.

La soluzione alternativa che sto attualmente utilizzando è l'aggiunta delle mie regole:

netsh.exe advfirewall firewall add rule name="Remote Desktop - User Mode (TCP-In)" dir=in action=allow program="%%SystemRoot%%\system32\svchost.exe" service="TermService" description="Inbound rule for the Remote Desktop service to allow RDP traffic. [TCP 3389] added by LogicDaemon's script" enable=yes profile=private,domain localport=3389 protocol=tcp
netsh.exe advfirewall firewall add rule name="Remote Desktop - User Mode (UDP-In)" dir=in action=allow program="%%SystemRoot%%\system32\svchost.exe" service="TermService" description="Inbound rule for the Remote Desktop service to allow RDP traffic. [UDP 3389] added by LogicDaemon's script" enable=yes profile=private,domain localport=3389 protocol=udp

ma è un male, perché (a differenza di quelli standard) possono essere modificati dall'utente, non hanno un gruppo (per lavorare con altri script) e non vengono disabilitati automaticamente quando RDP è disattivato tramite la GUI.

Screenshots

Regole del firewall prima di abilitare RDP tramite GUI per la prima volta * **

Stesse regole quando RDP è abilitato tramite GUI (stato che voglio ottenere):

E dopo aver disabilitato RDP nella GUI:


Non rivelerò l'intera storia di questa lotta con le utility della riga di comando di Windows, fino a quando qualcuno non lo chiederà. Ecco quella storia in russo .


1
Quindi ho ragione nel riassumere che vuoi le 2 regole del firewall integrate che abilitano UDP / TCP sulla porta 3389 solo per i profili Dominio e Privato?
Nathan Rice,

quasi. Innanzitutto, sì, sto per modificare le regole integrate. In secondo luogo, sì, voglio regole integrate per abilitare 3389 su reti di dominio e private. Ma qui va la parte difficile (altrimenti sarebbe già una risposta): diciamo prima su TCP. Per impostazione predefinita, non esistono regole separate per le reti {Public} e {Doman, Private}. Esiste una regola per le reti {Tutte}. Ma quando RDP è abilitato tramite GUI, vengono visualizzate due regole, una per {Pubblico} e una per {Doman, Privato}. Lo stesso con UDP. Inoltre ho aggiunto schermate, può anche chiarire un po '.
LogicDaemon

Risposte:


8
netsh firewall set service type = remotedesktop mode = enable

o

REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f

Ci ho provato. netsh firewallè deprecato (da win7), non funziona in Win10 e consente rdp solo per la rete corrente (se ne sei uno pubblico, rdp sarà consentito per le reti pubbliche e successivamente non funzionerà in reti private). Questo è notato nella storia originale, ho solo pensato che non vale la pena menzionare in questione. Risolverò quell'errore.
LogicDaemon il

Sebbene effettivamente deprecato, netsh firewallfunziona ancora in Windows 10 (testato su Pro).
Dico Reintegrare Monica il

2
@Twisty confermo, funziona davvero nella versione 1607 (build 14393.693). Quando ho scritto il mio commento precedente, l'ho testato nella versione corrente (non c'erano ancora versioni) e non ha funzionato.
LogicDaemon

3

Se capisco correttamente la domanda, questo ti darà quello che vuoi. Questo è PowerShell:

$FireWall = New-Object -comObject HNetCfg.FwPolicy2
$EnableRules = $FireWall.rules | Where-Object {$_.LocalPorts -like "*3389*" -and $_.Profiles -eq "3"}
ForEach ($Rule In $EnableRules){($Rule.Enabled = "True")}

Questo filtrerà le regole e afferrerà i nomi delle regole corrette agnostici del linguaggio. Lo fa filtrando sulla porta 3389 e trovando la regola associata a "Dominio e reti private". Profiles -eq 3è la maschera bitmap per reti private e di dominio, puoi vedere il riferimento qui:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa366303(v=vs.85).aspx

Dove 1 (reti di dominio) + 2 (reti private) = 3

Ecco il link MSDN in cui ho capito il resto:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa365309(v=vs.85).aspx

Ed ecco come ho capito quali erano le proprietà e i metodi per gli altri oggetti:

PS C:\> $FireWall | Get-Member


   TypeName: System.__ComObject#{98325047-c671-4174-8d81-defcd3f03186}

Name                                         MemberType            Definition
----                                         ----------            ----------
EnableRuleGroup                              Method                void EnableRuleGroup (int, string, bool)
IsRuleGroupEnabled                           Method                bool IsRuleGroupEnabled (int, string)
RestoreLocalFirewallDefaults                 Method                void RestoreLocalFirewallDefaults ()
BlockAllInboundTraffic                       ParameterizedProperty bool BlockAllInboundTraffic (NET_FW_PROFILE_TYPE2...
DefaultInboundAction                         ParameterizedProperty NET_FW_ACTION_ DefaultInboundAction (NET_FW_PROFI...
DefaultOutboundAction                        ParameterizedProperty NET_FW_ACTION_ DefaultOutboundAction (NET_FW_PROF...
ExcludedInterfaces                           ParameterizedProperty Variant ExcludedInterfaces (NET_FW_PROFILE_TYPE2_...
FirewallEnabled                              ParameterizedProperty bool FirewallEnabled (NET_FW_PROFILE_TYPE2_) {get...
IsRuleGroupCurrentlyEnabled                  ParameterizedProperty bool IsRuleGroupCurrentlyEnabled (string) {get}
NotificationsDisabled                        ParameterizedProperty bool NotificationsDisabled (NET_FW_PROFILE_TYPE2_...
UnicastResponsesToMulticastBroadcastDisabled ParameterizedProperty bool UnicastResponsesToMulticastBroadcastDisabled...
CurrentProfileTypes                          Property              int CurrentProfileTypes () {get}
LocalPolicyModifyState                       Property              NET_FW_MODIFY_STATE_ LocalPolicyModifyState () {g...
Rules                                        Property              INetFwRules Rules () {get}
ServiceRestriction                           Property              INetFwServiceRestriction ServiceRestriction () {g...



PS C:\> $Rules | Get-Member


   TypeName: System.__ComObject#{9c27c8da-189b-4dde-89f7-8b39a316782c}

Name                 MemberType Definition
----                 ---------- ----------
Action               Property   NET_FW_ACTION_ Action () {get} {set}
ApplicationName      Property   string ApplicationName () {get} {set}
Description          Property   string Description () {get} {set}
Direction            Property   NET_FW_RULE_DIRECTION_ Direction () {get} {set}
EdgeTraversal        Property   bool EdgeTraversal () {get} {set}
EdgeTraversalOptions Property   int EdgeTraversalOptions () {get} {set}
Enabled              Property   bool Enabled () {get} {set}
Grouping             Property   string Grouping () {get} {set}
IcmpTypesAndCodes    Property   string IcmpTypesAndCodes () {get} {set}
Interfaces           Property   Variant Interfaces () {get} {set}
InterfaceTypes       Property   string InterfaceTypes () {get} {set}
LocalAddresses       Property   string LocalAddresses () {get} {set}
LocalPorts           Property   string LocalPorts () {get} {set}
Name                 Property   string Name () {get} {set}
Profiles             Property   int Profiles () {get} {set}
Protocol             Property   int Protocol () {get} {set}
RemoteAddresses      Property   string RemoteAddresses () {get} {set}
RemotePorts          Property   string RemotePorts () {get} {set}
serviceName          Property   string serviceName () {get} {set}

non so perché, ma dice che non esiste una proprietà del genere i.imgur.com/A0OmzZ8.png . Immagino che ciò avvenga perché fino alla prima abilitazione di RDP tramite la GUI non esiste una regola del genere, esiste un'unica regola per tutte le reti (pubblica, privata, dominio). Ma quando abilitato tramite GUI, questa regola è divisa! Inoltre c'è un refuso a)}
LogicDaemon

su Windows 8, non si verificano errori, ma non viene fatto nulla del tutto i.imgur.com/te0J1Q9.png . Le regole del firewall richiedono prima di abilitare RDP tramite GUI per la prima volta: i.imgur.com/sEIE0me.png , dopo aver abilitato e quindi disabilitato tramite GUI: i.imgur.com/PjnFOh1.png . Stesse regole quando RDP è abilitato tramite GUI (stato che desidero ottenere): i.imgur.com/c3ywfHy.png
LogicDaemon

0

Se stai cercando la soluzione PowerShell, puoi usare:

Enable-NetFirewallRule -Name "RemoteDesktop-UserMode-In-TCP"
Enable-NetFirewallRule -Name "RemoteDesktop-UserMode-In-UDP"

0

I seguenti comandi cmd ..

netsh firewall set service type = remotedesktop mode = enable

e

REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /

non sono sufficienti per abilitare il desktop remoto.

Ho dovuto aggiungere questo per farlo funzionare (client: Windows 10).

netsh advfirewall firewall add rule name="Open Remote Desktop" protocol=TCP dir=in localport=3389 action=allow
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.