명령 줄에서 Windows 방화벽의 원격 데스크톱 사용


12

참고 : # command-line 태그는 배치 파일 전용을 의미하지는 않습니다. PowerShell 스크립트 또는 자유롭게 사용할 수있는 유틸리티를 사용할 수 있습니다.이 스크립트는 명령 줄에서 시작하여 무인 작업을 완료 할 수 있습니다.


tl; dr

Windows Vista에서 인터페이스 (표시) 언어의 Windows 10으로 방화벽 규칙을 정확하게 표시하여 방화벽 규칙을 정확하게 변환하는 방법은 무엇입니까?

정교

이 질문은 # 786383 과 유사 하지만 동일하지 않습니다.

기본적으로 답변이 나에게 좋지 않기 때문에 :

  1. set rule group="remote desktop" new enable=Yes공용 네트워크를 위해 포트 3389를 열면 피하고 싶습니다. 또한 Windows 언어마다 그룹 이름이 다르지만 보편적 인 솔루션이 필요합니다.
  2. netsh firewall set service type = remotedesktop mode = enable 나에게도 효과가 없다 : win7 이후로 더 이상 사용되지 않으며 현재 네트워크에만 rdp를 허용합니다 (공개 네트워크에 있다면 3389는 공용 네트워크에 대해 열리고 나중에 개인 네트워크에서 작동하지 않습니다).

GUI를 통해 RDP를 사용하도록 설정하기 전에 RDP의 프로토콜 당 하나의 규칙 만 있습니다. 그러나 GUI를 통해 RDP를 활성화하면 개인 및 도메인 네트워크에 대해서만 포트가 열리고 규칙이 분할됩니다. 활성화 한 후에는 Windows 8+에서 4 개의 규칙이 있고 Windows XP, Vista 및 7에서 2 개의 규칙 (UDP 없음)이 있습니다.

현재 사용중인 해결 방법은 내 규칙을 추가하는 것입니다.

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

그러나 표준 스크립트와 달리 사용자가 수정할 수 있고 다른 스크립트와 함께 작업 할 그룹이 없으며 GUI를 통해 RDP를 끌 때 자동으로 비활성화되지 않기 때문에 좋지 않습니다.

스크린 샷

GUI를 통해 RDP를 처음 활성화하기 전에 방화벽 규칙 * **

GUI를 통해 RDP를 활성화 할 때와 같은 규칙 (내가 가져오고 싶은 상태) :

그리고 GUI에서 RDP를 비활성화 한 후 :


누군가가 묻기 전까지는 Windows 명령 행 유틸리티를 사용하여이 싸움의 전체 이야기를 이야기하지는 않겠습니다. 다음은 러시아어로 그 이야기는 .


1
도메인 및 개인 프로필에 대해서만 포트 3389에서 UDP / TCP를 활성화하는 2 개의 내장 방화벽 규칙을 원한다고 요약하면 맞습니까?
Nathan Rice

거의. 먼저, 내장 규칙을 수정하려고합니다. 둘째, 도메인 및 개인 네트워크에서 3389를 활성화하는 기본 제공 규칙을 원합니다. 그러나 여기 까다로운 부분이 있습니다 (그렇지 않으면 이미 대답했을 것입니다). 먼저 TCP에 대해 이야기합시다. 기본적으로 {Public} 및 {Doman, Private} 네트워크에는 별도의 규칙이 없습니다. {All} 네트워크에는 하나의 규칙이 있습니다. 그러나 GUI를 통해 RDP를 사용하도록 설정하면 {Public}과 {Doman, Private}의 두 가지 규칙이 나타납니다. UDP와 동일합니다. 또한 스크린 샷을 추가했는데 약간의 설명이있을 수도 있습니다.
LogicDaemon

답변:


8
netsh firewall set service type = remotedesktop mode = enable

또는

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

나는 그것을 시도했다. netsh firewall는 더 이상 사용되지 않으며 (win7부터) Win10에서 작동하지 않으며 현재 네트워크에 대해서만 rdp를 허용합니다 (공용 네트워크에있는 경우 rdp는 공용 네트워크에 허용되며 이후 개인 네트워크에서는 작동하지 않음). 이것은 원래 이야기에서 언급되었지만, 나는 그것이 언급 할 가치가 없다고 생각했습니다. 나는 그 결함을 고칠 것이다.
LogicDaemon

실제로 더 이상 사용되지 않지만 netsh firewallWindows 10 (Pro에서 테스트 됨)에서 계속 작동합니다.
나는

2
@Twisty 확인했는데 버전 1607 (빌드 14393.693)에서 실제로 작동합니다. 이전 의견을 쓰고있을 때, 현재 버전 (아직 출시되지 않았 음)에서 테스트했는데 작동하지 않았습니다.
LogicDaemon

3

질문을 올바르게 이해하면 원하는 것을 얻을 수 있습니다. 이것은 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")}

규칙을 필터링하고 언어에 관계없이 올바른 규칙 이름을 가져옵니다. 포트 3389를 필터링하고 "도메인 및 개인 네트워크"와 관련된 규칙을 찾아서이를 수행합니다. Profiles -eq 3개인 및 도메인 네트워크의 비트 맵 마스크입니다. 여기에서 참조를 볼 수 있습니다.

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

1 (도메인 네트워크) + 2 (개인 네트워크) = 3

나머지를 알아 낸 MSDN 링크는 다음과 같습니다.

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

그리고 다른 객체에 대한 속성과 메소드가 무엇인지 알아 낸 방법은 다음과 같습니다.

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}

이유는 확실하지 않지만 i.imgur.com/A0OmzZ8.png 같은 속성이 없다고 말합니다 . RDP가 GUI를 통해 처음으로 활성화 될 때까지 그러한 규칙이 없으며 모든 네트워크 (공용, 개인, 도메인)에 대한 단일 규칙 이 있기 때문입니다 . 그러나 GUI를 통해 활성화하면이 규칙이 분리됩니다! 또한 오타가 있습니다)}
LogicDaemon

Windows 8에서는 오류가 없지만 i.imgur.com/te0J1Q9.png 는 전혀 수행되지 않습니다 . : 방화벽 규칙은 처음 GUI를 통해 RDP를 사용하기 전에 볼 i.imgur.com/sEIE0me.png을 , GUI를 통해 비활성화 한 후 활성화 및 후 : i.imgur.com/PjnFOh1.png를 . 같은 규칙 RDP는 GUI (상태가 내가 싶어)을 통해 활성화 된 경우 : i.imgur.com/c3ywfHy.png
LogicDaemon

0

PowerShell 솔루션을 찾고 있다면 다음을 사용할 수 있습니다.

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

0

다음 cmd 명령 ..

netsh firewall set service type = remotedesktop mode = enable

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

원격 데스크톱을 활성화하기에 충분하지 않습니다.

작동시키기 위해 이것을 추가해야했습니다 (클라이언트 : Windows 10).

netsh advfirewall firewall add rule name="Open Remote Desktop" protocol=TCP dir=in localport=3389 action=allow
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.