Bật Remote Desktop trong Windows Firewall từ dòng lệnh


12

lưu ý: # thẻ dòng lệnh không ngụ ý chỉ tập tin bó, tôi sẽ chấp nhận tập lệnh PowerShell hoặc bất kỳ tiện ích có sẵn miễn phí nào, có thể được bắt đầu từ dòng lệnh và hoàn thành công việc của nó mà không cần giám sát.


tl; dr

Làm thế nào để chuyển đổi chính xác các quy tắc tường lửa thành trạng thái đặt GUI, trên Windows Vista sang Windows 10 của bất kỳ ngôn ngữ giao diện (hiển thị) nào?

Xây dựng

Câu hỏi này tương tự như # 786383 , nhưng nó không giống nhau.

Về cơ bản, vì câu trả lời không tốt cho tôi:

  1. set rule group="remote desktop" new enable=Yesmở cổng 3389 cho các mạng công cộng và tôi muốn tránh điều đó. Ngoài ra, các ngôn ngữ Windows khác nhau có tên nhóm khác nhau, nhưng tôi cần một giải pháp phổ quát.
  2. netsh firewall set service type = remotedesktop mode = enable cũng không hoạt động với tôi: nó không được chấp nhận kể từ win7 và chỉ cho phép truy cập mạng hiện tại (nếu bạn ở chế độ công khai, thì sẽ được mở cho các mạng công cộng và sau đó sẽ không hoạt động trong các mạng riêng).

Lưu ý rằng trước khi RDP được bật thông qua GUI, chỉ có một quy tắc cho mỗi giao thức cho RDP. Nhưng khi RDP được kích hoạt thông qua GUI, cổng chỉ được mở cho mạng riêng và mạng miền và quy tắc được phân chia cho việc này. Sau khi bật, có 4 quy tắc trong Windows 8+ và 2 quy tắc (không có UDP) trong Windows XP, Vista và 7.

Làm việc xung quanh tôi hiện đang sử dụng là thêm các quy tắc của riêng tôi:

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

nhưng điều đó thật tệ, bởi vì (không giống như tiêu chuẩn) chúng có thể được sửa đổi bởi người dùng, không có nhóm (để làm việc với các tập lệnh khác) và không bị tắt tự động khi tắt RDP thông qua GUI.

Ảnh chụp màn hình

Quy tắc tường lửa trước khi bật RDP qua GUI lần đầu tiên * **

Các quy tắc tương tự khi RDP được kích hoạt thông qua GUI (trạng thái tôi muốn nhận):

Và sau khi vô hiệu hóa RDP trong GUI:


Tôi sẽ không kể lại toàn bộ câu chuyện về cuộc chiến này với các tiện ích dòng lệnh windows, cho đến khi có ai đó hỏi. Đây là câu chuyện bằng tiếng Nga .


1
Vì vậy, tôi có đúng không khi tóm tắt rằng bạn muốn 2 quy tắc tường lửa tích hợp cho phép UDP / TCP trên Cổng 3389 chỉ cho các cấu hình Miền và Riêng tư?
Nathan Rice

hầu hết. Đầu tiên, vâng, tôi về việc sửa đổi các quy tắc tích hợp. Thứ hai, vâng, tôi muốn các quy tắc tích hợp để kích hoạt 3389 trên Mạng Miền và Mạng riêng. Nhưng đây là phần khó khăn (nếu không nó đã được trả lời): trước tiên hãy nói về TCP. Theo mặc định, không có quy tắc riêng cho các mạng {Public} và {Doman, Private}. Có một quy tắc cho các mạng {Tất cả}. Nhưng khi RDP được kích hoạt thông qua GUI, sẽ xuất hiện hai quy tắc, một cho {Công khai} và một cho {Doman, Riêng tư}. Tương tự với UDP. Ngoài ra tôi đã thêm ảnh chụp màn hình, cũng có thể làm rõ một chút.
LogicDaemon

Câu trả lời:


8
netsh firewall set service type = remotedesktop mode = enable

hoặc là

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

Tôi đã thử nó. netsh firewallkhông được dùng nữa (kể từ win7), không hoạt động trong Win10 và chỉ cho phép truy cập mạng hiện tại (nếu bạn ở chế độ công khai, thì ndp sẽ được phép cho các mạng công cộng và sau đó sẽ không hoạt động trong các mạng riêng). Điều này được ghi nhận trong câu chuyện gốc, tôi chỉ nghĩ rằng nó không đáng nhắc đến trong câu hỏi. Tôi sẽ sửa lỗi đó.
LogicDaemon

Mặc dù thực sự không dùng nữa, netsh firewallvẫn hoạt động trong Windows 10 (đã thử nghiệm trên Pro).
Tôi nói phục hồi Monica

2
@Twisty Tôi xác nhận, nó hoạt động trong phiên bản 1607 (bản dựng 14393.693). Khi tôi viết bình luận trước, tôi đã thử nó ở phiên bản hiện tại (chưa có bản phát hành nào) và nó không hoạt động.
LogicDaemon

3

Nếu tôi hiểu chính xác câu hỏi này sẽ giúp bạn có được những gì bạn muốn. Đây là 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")}

Điều này sẽ lọc ra các quy tắc và lấy các tên quy tắc chính xác bất khả tri của ngôn ngữ. Nó thực hiện điều này bằng cách lọc trên cổng 3389 và tìm quy tắc được liên kết với "Mạng và miền riêng". Profiles -eq 3là mặt nạ bitmap cho mạng Riêng tư và Miền, bạn có thể xem tài liệu tham khảo tại đây:

https://msdn.microsoft.com/en-us/l Library / windows / desktop / aa366303 (v = vs85) .aspx

Trong đó 1 (Mạng miền) + 2 (Mạng riêng) = 3

Đây là liên kết MSDN nơi tôi tìm ra phần còn lại:

https://msdn.microsoft.com/en-us/l Library / windows / desktop / aa365309 (v = vs85) .aspx

Và đây là cách tôi tìm ra các thuộc tính và phương thức cho các đối tượng khác:

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}

không chắc chắn tại sao, nhưng nó nói rằng không có một tài sản như vậy i.imgur.com/A0OmzZ8.png . Tôi đoán điều này là do cho đến khi RDP được kích hoạt lần thứ nhất thông qua GUI, không có quy tắc nào như vậy, có một quy tắc duy nhất cho tất cả các mạng (công khai, riêng tư, tên miền). Nhưng khi được kích hoạt thông qua GUI, quy tắc này được phân chia! Ngoài ra còn có lỗi đánh máy tại)}
LogicDaemon

trên Windows 8, không có lỗi, nhưng không có gì được thực hiện hoàn toàn i.imgur.com/te0J1Q9.png . Các quy tắc tường lửa nhìn trước khi bật RDP qua GUI lần đầu tiên: i.imgur.com/sEIE0me.png , sau khi bật và sau đó vô hiệu hóa qua GUI: i.imgur.com/PjnFOh1.png . Các quy tắc tương tự khi RDP được bật thông qua GUI (trạng thái tôi muốn nhận): i.imgur.com/c3ywfHy.png
LogicDaemon

0

Nếu bạn đang tìm kiếm giải pháp PowerShell, có thể sử dụng các cách sau:

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

0

Các lệnh cmd sau ..

netsh firewall set service type = remotedesktop mode = enable

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

không đủ để kích hoạt máy tính để bàn từ xa.

Tôi đã phải thêm cái này để làm cho nó hoạt động (Client: Windows 10).

netsh advfirewall firewall add rule name="Open Remote Desktop" protocol=TCP dir=in localport=3389 action=allow
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.