在 Azure VM 中禁用来宾 OS 防火墙
本文提供了有关你怀疑来宾操作系统防火墙正在筛选虚拟机 (VM) 的部分或完整流量的情况的参考。 如果故意对导致 RDP 连接失败的防火墙进行更改,则可能会发生这种情况。
解决方案
本文中所述的过程旨在用作解决方法,以便你可以专注于解决实际问题,即如何正确设置防火墙规则。 启用 Windows 防火墙组件是 Microsoft 最佳做法。 如何配置防火墙规则取决于对所需 VM 的访问级别。
联机解决方案
如果 VM 处于联机状态,并且可以在同一虚拟网络上的另一个 VM 上访问,则可以使用其他 VM 进行这些缓解。
缓解 1:自定义脚本扩展或运行命令功能
如果 Azure 代理正常工作,则可以使用自定义脚本扩展或运行命令功能, (资源管理器 仅) VM 远程运行以下脚本。
注意
如果防火墙是在本地设置的,请运行以下脚本:
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\DomainProfile' -name "EnableFirewall" -Value 0 Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\PublicProfile' -name "EnableFirewall" -Value 0 Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\Standardprofile' -name "EnableFirewall" -Value 0 Restart-Service -Name mpssvc
如果防火墙是通过 Active Directory 策略设置的,则可以使用运行以下脚本进行临时访问。
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Policies\Microsoft\WindowsFirewall\DomainProfile' -name "EnableFirewall" -Value 0 Set-ItemProperty -Path 'HKLM:\SOFTWARE\Policies\Microsoft\WindowsFirewall\PublicProfile' -name "EnableFirewall" -Value 0 Set-ItemProperty -Path 'HKLM:\SOFTWARE\Policies\Microsoft\WindowsFirewall\StandardProfile' -name "EnableFirewall" -Value 0 Restart-Service -Name mpssvc
但是,一旦再次应用该策略,就会被踢出远程会话。 此问题的永久修复是修改在此计算机上应用的策略。
缓解措施 2:远程 PowerShell
连接到与使用 RDP 连接无法访问的 VM 位于同一虚拟网络上的 VM。
打开 PowerShell 控制台窗口。
运行以下命令:
Enter-PSSession (New-PSSession -ComputerName "<HOSTNAME>" -Credential (Get-Credential) -SessionOption (New-PSSessionOption -SkipCACheck -SkipCNCheck)) netsh advfirewall set allprofiles state off Restart-Service -Name mpssvc exit
注意
如果防火墙是通过 组策略 对象设置的,则此方法可能不起作用,因为此命令仅更改本地注册表项。 如果策略已到位,它将覆盖此更改。
缓解措施 3:PSTools 命令
在 VM 故障排除中,下载 PSTools。
打开 CMD 实例,然后通过其 DIP 访问 VM。
运行以下命令:
psexec \\<DIP> -u <username> cmd netsh advfirewall set allprofiles state off psservice restart mpssvc
缓解措施 4:远程注册表
按照以下步骤使用远程注册表。
在故障排除 VM 上,启动注册表编辑器,然后转到 “文件>连接网络注册表”。
打开 TARGET MACHINE\SYSTEM 分支,并指定以下值:
<TARGET MACHINE>\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\DomainProfile\EnableFirewall --> 0 <TARGET MACHINE>\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\PublicProfile\EnableFirewall --> 0 <TARGET MACHINE>\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\EnableFirewall --> 0
重启服务。 由于无法使用远程注册表执行此操作,因此必须使用远程服务控制台。
打开 Services.msc 的实例。
单击“ 服务” (“”本地) ”。
选择“ 连接到另一台计算机”。
输入问题 VM 的专用 IP 地址 (DIP) 。
重启本地防火墙策略。
再次尝试从本地计算机通过 RDP 连接到 VM。
脱机解决方案
如果出现无法通过任何方法访问 VM 的情况,自定义脚本扩展将失败,并且必须直接通过系统磁盘在 OFFLINE 模式下工作。 为此,可执行以下步骤:
启动到恢复 VM 的远程桌面连接。
确保在磁盘管理控制台中将磁盘标记为联机。 记下分配给附加系统磁盘的驱动器号。
在进行任何更改之前,请创建 \windows\system32\config 文件夹的副本,以防需要回滚更改。
在故障排除 VM 上,启动注册表编辑器 (regedit.exe) 。
对于此故障排除过程,我们将配置单元装载为 BROKENSYSTEM 和 BROKENSOFTWARE。
突出显示HKEY_LOCAL_MACHINE键,然后从菜单中选择“文件 > 加载配置单元”。
在附加的系统磁盘上找到 \windows\system32\config\SYSTEM 文件。
打开提升的 PowerShell 实例,然后运行以下命令:
# Load the hives - If your attached disk is not F, replace the letter assignment here reg load HKLM\BROKENSYSTEM f:\windows\system32\config\SYSTEM reg load HKLM\BROKENSOFTWARE f:\windows\system32\config\SOFTWARE # Disable the firewall on the local policy $ControlSet = (get-ItemProperty -Path 'HKLM:\BROKENSYSTEM\Select' -name "Current").Current $key = 'HKLM:\BROKENSYSTEM\ControlSet00'+$ControlSet+'\services\SharedAccess\Parameters\FirewallPolicy\DomainProfile' Set-ItemProperty -Path $key -name 'EnableFirewall' -Value 0 -Type Dword -force $key = 'HKLM:\BROKENSYSTEM\ControlSet00'+$ControlSet+'\services\SharedAccess\Parameters\FirewallPolicy\PublicProfile' Set-ItemProperty -Path $key -name 'EnableFirewall' -Value 0 -Type Dword -force $key = 'HKLM:\BROKENSYSTEM\ControlSet00'+$ControlSet+'\services\SharedAccess\Parameters\FirewallPolicy\StandardProfile' Set-ItemProperty -Path $key -name 'EnableFirewall' -Value 0 -Type Dword -force # To ensure the firewall is not set through AD policy, check if the following registry entries exist and if they do, then check if the following entries exist: $key = 'HKLM:\BROKENSOFTWARE\Policies\Microsoft\WindowsFirewall\DomainProfile' Set-ItemProperty -Path $key -name 'EnableFirewall' -Value 0 -Type Dword -force $key = 'HKLM:\BROKENSOFTWARE\Policies\Microsoft\WindowsFirewall\PublicProfile' Set-ItemProperty -Path $key -name 'EnableFirewall' -Value 0 -Type Dword -force $key = 'HKLM:\BROKENSOFTWARE\Policies\Microsoft\WindowsFirewall\StandardProfile' Set-ItemProperty -Path $key -name 'EnableFirewall' -Value 0 -Type Dword -force # Unload the hives reg unload HKLM\BROKENSYSTEM reg unload HKLM\BROKENSOFTWARE
检查问题是否已解决。
联系我们寻求帮助
如果你有任何疑问或需要帮助,请创建支持请求或联系 Azure 社区支持。 还可以向 Azure 反馈社区提交产品反馈。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈