Windows Güvenlik Duvarı'nda Uzak Masaüstü'nü komut satırından etkinleştir


12

Not: # komut satırı etiketi yalnızca toplu iş dosyası anlamına gelmez, bir PowerShell komut dosyasını veya komut satırından başlatılabilen ve işini katılımsız olarak bitirebilen herhangi bir serbestçe kullanılabilir yardımcı programı kabul edeceğim.


tl; Dr.

güvenlik duvarı kurallarını tam olarak GUI tarafından Windows Vista'da herhangi bir arabirim (ekran) dilinin Windows 10'a koyduğu duruma nasıl dönüştürülür?

ayrıntılandırma

Bu soru # 786383'e benzer , ancak aynı değil.

Temel olarak, çünkü cevap benim için iyi değil:

  1. set rule group="remote desktop" new enable=Yesgenel ağlar için 3389 numaralı bağlantı noktasını açar ve bundan kaçınmak isterim. Ayrıca, farklı Windows dillerinin farklı grup adları vardır, ancak evrensel bir çözüme ihtiyacım var.
  2. netsh firewall set service type = remotedesktop mode = enable benim için de çalışmıyor: win7'den beri kullanımdan kaldırıldı ve yalnızca geçerli ağ için rdp'ye izin veriyor (herkese açık bir ağdaysanız, 3389 genel ağlar için açılacak ve daha sonra özel ağlarda çalışmaz).

RDP'nin GUI aracılığıyla etkinleştirilmesinden önce, RDP protokolü başına yalnızca bir kural olduğunu unutmayın. Ancak, RDP GUI aracılığıyla etkinleştirildiğinde, bağlantı noktası yalnızca özel ve etki alanı ağları için açılır ve bunun için kurallar bölünür. Etkinleştirdikten sonra Windows 8+'de 4 kural ve Windows XP, Vista ve 7'de 2 kural (UDP yok) vardır.

Şu anda kullandığım geçici çözüm kendi kurallarımı eklemektir:

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

ancak bu kötüdür, çünkü (standart olanlardan farklı olarak) kullanıcı tarafından değiştirilebilirler, hiçbir gruba sahip değildirler (diğer komut dosyalarıyla çalışmak için) ve RDP GUI aracılığıyla kapatıldığında otomatik olarak devre dışı bırakılmazlar.

Ekran görüntüleri

GUI üzerinden RDP'yi ilk kez etkinleştirmeden önce güvenlik duvarı kuralları * **

RDP GUI (almak istediğim durum) aracılığıyla etkinleştirildiğinde aynı kurallar:

GUI'de RDP'yi devre dışı bıraktıktan sonra:


Birisi sorana kadar bu komutun tüm hikayesini windows komut satırı yardımcı programlarıyla tekrar anlatmayacağım. İşte bu Rusça hikaye .


1
Bu nedenle, yalnızca Etki Alanı ve Özel profiller için 3389 numaralı bağlantı noktasında UDP / TCP'yi etkinleştiren yerleşik güvenlik duvarı kurallarının 2 olmasını istediğinizi özetlemek ister miyim?
Nathan Rice

neredeyse. İlk olarak, evet, yerleşik kuralları değiştirmek üzereyim. İkincisi, evet, Etki Alanı ve Özel ağlarda 3389'u etkinleştirmek için yerleşik kurallar istiyorum. Ama işte zor kısım (aksi takdirde zaten cevaplanacaktır): ilk önce TCP hakkında söyleyelim. Varsayılan olarak, {Genel} ve {Doman, Özel} ağları için ayrı kurallar yoktur. {Tüm} ağlar için bir kural vardır. Ancak, RDP GUI aracılığıyla etkinleştirildiğinde, biri {Genel} ve diğeri {Doman, Özel} için olmak üzere iki kural görünür. UDP ile aynı. Ayrıca ekran görüntüleri ekledim, ayrıca biraz açıklığa kavuşabilir.
LogicDaemon

Yanıtlar:


8
netsh firewall set service type = remotedesktop mode = enable

veya

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

Bunu denedim. netsh firewallkullanımdan kaldırılmıştır (win7'den beri), Win10'da çalışmaz ve yalnızca geçerli ağ için rdp'ye izin verir (herkese açık bir ağdaysanız, genel ağlar için rdp'ye izin verilir ve daha sonra özel ağlarda çalışmaz). Bu orijinal hikayede belirtilmiştir, sadece söz etmeye değmeyeceğini düşündüm. Bu hatayı düzeltirim.
LogicDaemon

Gerçekten kullanımdan kaldırılmış olsa da, netsh firewallhala Windows 10'da çalışıyor (Pro'da test edildi).
Reinstate Monica diyorum

2
@ Twisty onaylıyorum, 1607 sürümünde (14393.693 derlemesi) çalışıyor. Önceki yorumumu yazarken, mevcut sürümde test ettim (henüz yayınlanmadı) ve işe yaramadı.
LogicDaemon

3

Soruyu doğru anlarsam, bu size istediğinizi verecektir. Bu 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")}

Bu, kuralları filtreleyecek ve dilden bağımsız olarak doğru kural adlarını alacaktır. Bunu, 3389 numaralı bağlantı noktasına filtre uygulayarak ve "Etki Alanı ve Özel ağlar" ile ilişkili kuralı bularak yapar. Profiles -eq 3Özel ve Alan adı ağları için bitmap maskesidir, referansı burada görebilirsiniz:

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

1 (Alan ağları) + 2 (Özel ağlar) = 3

İşte geri kalanı anladım MSDN bağlantısı:

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

Ve işte diğer nesneler için özelliklerin ve yöntemlerin ne olduğunu anladım:

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}

neden olduğundan emin değilim, ancak böyle bir özellik yok diyor i.imgur.com/A0OmzZ8.png . Bunun nedeni, RDP'nin GUI aracılığıyla 1. kez etkinleştirilinceye kadar, böyle bir kural olmaması, tüm ağlar (genel, özel, etki alanı) için tek bir kural olmasıdır . Ancak GUI aracılığıyla etkinleştirildiğinde, bu kural bölünür! Ayrıca yazım hatası var)}
LogicDaemon

Windows 8'de hata yok, ancak hiçbir şey tamamen yapılmıyor i.imgur.com/te0J1Q9.png . Güvenlik duvarı kuralları GUI üzerinden RDP'yi ilk kez etkinleştirmeden önce görünür: i.imgur.com/sEIE0me.png , GUI aracılığıyla etkinleştirdikten ve devre dışı bıraktıktan sonra: i.imgur.com/PjnFOh1.png . RDP GUI aracılığıyla etkinleştirildiğinde aynı kurallar (almak istediğim durum): i.imgur.com/c3ywfHy.png
LogicDaemon

0

PowerShell çözümü arıyorsanız, aşağıdakiler kullanılabilir:

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

0

Aşağıdaki cmd komutları ..

netsh firewall set service type = remotedesktop mode = enable

ve

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

uzak masaüstünü etkinleştirmek için yeterli değildir.

Çalışması için bunu eklemek zorunda kaldım (İstemci: Windows 10).

netsh advfirewall firewall add rule name="Open Remote Desktop" protocol=TCP dir=in localport=3389 action=allow
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.