कमांड लाइन से विंडोज फ़ायरवॉल में रिमोट डेस्कटॉप को सक्षम करें


10

नोट: # कमांड-लाइन टैग केवल बैच-फाइल नहीं करता है, मैं एक PowerShell स्क्रिप्ट या किसी भी स्वतंत्र रूप से उपलब्ध उपयोगिता को स्वीकार करूंगा, जिसे कमांड लाइन से शुरू किया जा सकता है और इसका काम अनअटेंडेड पूरा कर सकता है।


tl; डॉ

जीयूआई को किसी भी इंटरफेस (प्रदर्शन) भाषा के विंडोज 10 पर विंडोज स्टेट पर, अनासक्त रूप से फ़ायरवॉल नियमों को कैसे बदलना है?

विस्तार से चर्चा करते

यह प्रश्न समान है # 786,383 , लेकिन यह समान नहीं है।

मूल रूप से, क्योंकि उत्तर मेरे लिए अच्छा नहीं है:

  1. set rule group="remote desktop" new enable=Yes सार्वजनिक नेटवर्क के लिए पोर्ट 3389 खोलता है, और मैं इससे बचना चाहता हूं। साथ ही, विभिन्न विंडोज़ भाषाओं में अलग-अलग समूह के नाम हैं, लेकिन मुझे एक सार्वभौमिक समाधान की आवश्यकता है।
  2. netsh firewall set service type = remotedesktop mode = enable मेरे लिए भी काम नहीं कर रहा है: यह win7 के बाद से पदावनत है, और केवल वर्तमान नेटवर्क के लिए rdp की अनुमति देता है (यदि आप सार्वजनिक रूप से हैं, तो 3389 सार्वजनिक नेटवर्क के लिए खोला जाएगा और बाद में निजी नेटवर्क में काम नहीं करेगा)।

ध्यान दें कि RDP GUI के माध्यम से सक्षम होने से पहले, RDP के लिए प्रति प्रोटोकॉल केवल एक नियम है। लेकिन जब आरडीपी को जीयूआई के माध्यम से सक्षम किया जाता है, तो पोर्ट केवल निजी और डोमेन नेटवर्क के लिए खोला जाता है, और इसके लिए नियम अलग हो जाते हैं। सक्षम करने के बाद, विंडोज 8+ में 4 नियम और विंडोज एक्सपी, विस्टा और 7 में 2 नियम (यूडीपी नहीं) हैं।

वर्तमान में मैं जो काम कर रहा हूं उसके आसपास मैं अपने नियम जोड़ रहा हूं:

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 को अक्षम करने के बाद:


मैं विंडोज़ कमांड लाइन उपयोगिताओं के साथ इस लड़ाई की पूरी कहानी को फिर से नहीं लिखूंगा, जब तक कि कोई नहीं पूछता। यहाँ है वह कहानी रूसी में


1
तो क्या मैं यह संक्षेप में सही कर रहा हूं कि आप चाहते हैं कि फायरवॉल नियमों में निर्मित 2 जो केवल डोमेन और निजी प्रोफाइल के लिए पोर्ट 3389 पर यूडीपी / टीसीपी को सक्षम करें?
Nathan Rice

लगभग। पहले, हां, मैं बिल्ट-इन नियमों को संशोधित करने के बारे में हूं। दूसरा, हां, मैं चाहता हूं कि डोमेन और निजी नेटवर्क पर 3389 को सक्षम करने के लिए अंतर्निहित नियम हों। लेकिन यहाँ मुश्किल हिस्सा है (अन्यथा यह पहले से ही जवाब दिया जाएगा): चलो पहले टीसीपी के बारे में कहते हैं। डिफ़ॉल्ट रूप से, {Public} और {Doman, Private} नेटवर्क के लिए कोई अलग नियम नहीं हैं। {All} नेटवर्क के लिए एक नियम है। लेकिन जब RDP को GUI के माध्यम से सक्षम किया जाता है, तो दो नियम दिखाई देते हैं, एक {Public} के लिए और दूसरा {Doman, Private} के लिए। यूडीपी के साथ भी। इसके अलावा, मैंने स्क्रीनशॉट भी जोड़े, थोड़ा स्पष्ट भी कर सकते हैं।
LogicDaemon

जवाबों:


7
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 firewall अभी भी विंडोज 10 (प्रो पर परीक्षण) में काम करता है।
Twisty Impersonator

2
@ टेविस्टी मैं पुष्टि करता हूं, यह वास्तव में संस्करण 1607 (बिल्ड 14393.693) में काम करता है। जब मैं अपनी प्रचलित टिप्पणी लिख रहा था, मैंने इसे वर्तमान संस्करण में परीक्षण किया (अभी तक कोई रिलीज़ नहीं हुआ), और यह काम नहीं किया।
LogicDaemon

3

अगर मैं प्रश्न को सही ढंग से समझूं तो यह आपको वही मिलेगा जो आप चाहते हैं। यह पॉवरशेल है:

$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 । मुझे लगता है कि यह इसलिए है क्योंकि जब तक आरडीपी को जीयूआई के माध्यम से पहली बार सक्षम नहीं किया जाता है, तब तक ऐसा कोई नियम नहीं है सभी नेटवर्क के लिए एकल नियम (सार्वजनिक, निजी, डोमेन)। लेकिन GUI के माध्यम से सक्षम होने पर, यह नियम विभाजित हो जाता है! इसके अलावा टाइपो में है )}
LogicDaemon

विंडोज 8 पर, कोई त्रुटि नहीं है, लेकिन पूरी तरह से कुछ भी नहीं किया गया है i.imgur.com/te0J1Q9.png । पहली बार GUI के माध्यम से RDP को सक्षम करने से पहले फ़ायरवॉल नियम देखें: i.imgur.com/sEIE0me.png , सक्षम करने और फिर GUI के माध्यम से अक्षम करने के बाद: i.imgur.com/PjnFOh1.png । जब RDP GUI (मैं प्राप्त करना चाहता हूं) के माध्यम से RDP सक्षम होने पर समान नियम: i.imgur.com/c3ywfHy.png
LogicDaemon
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.