web-dev-qa-db-fra.com

Activer le Bureau à distance dans le Pare-feu Windows à partir de la ligne de commande

Remarque: La balise # en ligne de commande n'implique pas un fichier de traitement par lots uniquement. J'accepte un script PowerShell ou tout autre utilitaire disponible gratuitement pouvant être démarré à partir de la ligne de commande et terminer son travail sans surveillance.


tl; dr

comment transformer sans surveillance les règles du pare-feu en un état graphique? Sous Windows Vista, sous Windows 10, quel que soit le langage d’interface (affichage)?

Élaboration

Cette question est similaire à # 786383 , mais ce n'est pas la même chose.

Fondamentalement, parce que la réponse n'est pas bonne pour moi:

  1. set rule group="remote desktop" new enable=Yes ouvre le port 3389 pour les réseaux publics, ce que je veux éviter. En outre, différentes langues Windows ont des noms de groupe différents, mais j'ai besoin d'une solution universelle.
  2. netsh firewall set service type = remotedesktop mode = enable ne fonctionne pas pour moi non plus: il est obsolète depuis win7 et n'autorise le protocole rdp que pour le réseau actuel (si vous êtes en réseau public, 3389 sera ouvert pour les réseaux publics et ne fonctionnera pas par la suite).

Notez qu'avant l'activation de RDP via l'interface graphique, il n'y a qu'une seule règle par protocole pour RDP. Mais lorsque RDP est activé via l'interface graphique, le port n'est ouvert que pour les réseaux privés et de domaine, et les règles sont scindées pour cela. Après activation, il existe 4 règles dans Windows 8+ et 2 règles (sans UDP) dans Windows XP, Vista et 7.

La solution que j'utilise actuellement ajoute mes propres règles:

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

mais c'est mauvais, car (contrairement aux standards), ils peuvent être modifiés par l'utilisateur, ne pas avoir de groupe (pour travailler avec d'autres scripts), et ne sont pas automatiquement désactivés lorsque RDP est désactivé via l'interface graphique.

Captures d'écran

Règles de pare-feu avant d'activer RDP via l'interface graphique pour la première fois ***

Mêmes règles lorsque RDP est activé via une interface graphique (état que je veux obtenir):

Et après avoir désactivé RDP dans l'interface graphique:


Je ne raconterai pas toute l'histoire de ce combat avec les utilitaires de ligne de commande Windows, jusqu'à ce que quelqu'un le demande. Voici cette histoire en russe .

10
LogicDaemon
netsh firewall set service type = remotedesktop mode = enable

ou

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

Si je comprends bien la question, vous obtiendrez ce que vous voulez. C'est 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")}

Cela va filtrer les règles et récupérer les noms de règles corrects agnostiques de la langue. Pour ce faire, il filtre sur le port 3389 et recherche la règle associée à "Réseaux de domaine et privés". Profiles -eq 3 est le masque bitmap pour les réseaux privés et de domaine, vous pouvez voir la référence ici:

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

Où 1 (réseaux de domaine) + 2 (réseaux privés) = 3

Voici le lien MSDN où j'ai compris le reste:

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

Et voici comment j'ai compris quelles étaient les propriétés et les méthodes des autres objets:

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}
3
Nathan Rice