企業管理數百/數千台終端/伺服器時,**手動逐台開啟遠端桌面 (RDP) 並配置防火牆例外** 不僅低效,且極易遺漏、配置漂移。Windows 群組原則結合 **WMI/VBS 腳本** 可在電腦啟動階段 **以 SYSTEM 權限自動啟用 RDP、開放 TCP 3389 防火牆埠**,實現「推送即生效、無需互動、狀態收斂」。本文提供完整腳本、GPO 部署步驟、驗證方法、安全性硬化建議,助你構建自動化遠端管理基線。
' Enable-RDP.vbs
' 功能:啟用遠端桌面連線 + 開放 Windows 防火牆 TCP 3389
' 部署:電腦設定 → 原則 → Windows 設定 → 指令碼 → 啟動 → 新增此腳本
Option Explicit
On Error Resume Next
Const ENABLE_CONNECTIONS = 1
Dim strComputer, objWMIService, colItems, objItem, errResult
Dim oShell
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
' 1. 啟用 Terminal Services 連線 (RDP)
Set colItems = objWMIService.ExecQuery("Select * from Win32_TerminalServiceSetting")
For Each objItem in colItems
errResult = objItem.SetAllowTSConnections(ENABLE_CONNECTIONS)
' errResult = 0 成功,其他參考 MSDN
Next
' 2. 開放 Windows 防火牆 TCP 3389 (適用 Windows Server 2003 / XP / Server 2008 / Vista / 7 / 2008 R2)
Set oShell = CreateObject("WScript.Shell")
' netsh firewall add portopening TCP 3389 "Remote Desktop" (舊版語法,相容性最廣)
oShell.Run "cmd.exe /c netsh firewall add portopening tcp 3389 RemoteDesktop", 0, True
' 新版語法 (Win 7/Server 2008 R2+) 可改用:
' oShell.Run "cmd.exe /c netsh advfirewall firewall add rule name=""Remote Desktop"" dir=in action=allow protocol=TCP localport=3389", 0, True
Set oShell = Nothing
Set objWMIService = Nothing
| 風險 | 對策 (建議同步透過 GPO 部署) |
|---|---|
| 暴力破解 (Brute Force) | 帳號鎖定原則 (閾值 5、鎖定 30 分鐘)、強制複雜密碼、更改預設埠 (非 3389)、啟用 RDP 閘道 (RD Gateway) / VPN 前置 |
| 藍色保鑰 (CVE-2019-0708) 等 RDP 漏洞 | **及時修補系統更新 (WSUS/WUfB/Intune)**、啟用網路層級驗證 (NLA)、限制來源 IP (防火牆規則 Scope)、部署 RDP 閘道 |
| 橫向移動跳板 | 分層管理模型 (Tier 0/1/2)、專用管理工作站 (PAW)、Just Enough Administration (JEA)、特權存取管理 (PAM) |
| 防火牆規則過寬 (全設定檔開放) | 僅在「域/專用」設定檔開放,「公用」設定檔關閉;或用 `netsh advfirewall firewall add rule ... profile=domain,private` |
| 腳本被竄改/惡意植入 |
# Enable-RDP.ps1 (以系統管理員/系統帳號執行)
# 需啟用 PowerShell 腳本執行原則 (GPO: Computer Config → Admin Templates → Windows Components → Windows PowerShell → Turn on Script Execution → Allow local scripts and remote signed)
# 1. 啟用 RDP
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server" -Name "fDenyTSConnections" -Value 0
# 2. 開放防火牆 (新版語法,僅域/專用設定檔)
New-NetFirewallRule -DisplayName "Remote Desktop (GPO Auto)" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 3389 -Profile Domain,Private -Enabled True
# 3. 強制啟用 NLA (網路層級驗證)
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -Name "UserAuthentication" -Value 1
# 4. (可選) 更改 RDP 埠 (需同步修改防火牆規則與客戶端連線)
# Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -Name "PortNumber" -Value 33890
**部署方式同理:** GPO → 啟動腳本 → `powershell.exe -ExecutionPolicy Bypass -File Enable-RDP.ps1`。
**「自動化是為了讓正確的事發生,而不是讓錯誤的事更快發生。」** 群組原則 + 啟動腳本 (VBS/PowerShell) 自動啟用 RDP 並穿透防火牆,是構建企業級遠端管理基線的**標準化、可審計、可收斂**路徑。但**自動啟用只是起點**,必須同步部署 **NLA 強制、埠修改/範圍限制、帳號鎖定、修補管理、特權存取控制、審計日誌** 等纵深防禦措施,才能將遠端桌面從「最大攻擊面」轉化為「受控管理通道」。下次擴充機房、部署新伺服器、重置終端時,記得:**GPO 推送、重啟驗證、審計入庫**,讓遠端管理既高效又安心。