網路與 IP

RDP 連接埠是多少?3389 連接埠怎麼查、怎麼改與放行

RDP 連接埠預設是 TCP 3389,網路允許時再加一條 UDP 3389。檢視用 netstat -ano 或 Get-NetTCPConnection,修改在登錄檔 RDP-Tcp 下的 PortNumber;改之前先讓 Windows 防火牆、雲安全組和機房防火牆放行新連接埠,確認能連再關掉 3389。改連接埠只能減少掃描,還要配合來源白名單和帳戶鎖定。

作者 頂聯產品團隊發布於 7 分鐘閱讀

RDP 連接埠是多少?Windows 遠端桌面預設監聽 TCP 3389;從 RDP 8.0(Windows 8、Windows Server 2012)起,同一個連接埠號上還會監聽 UDP 3389,客戶端和網路都支援時用它傳輸畫面,UDP 不通就只用 TCP,照樣能連。連接埠號儲存在登錄檔 HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp 的 PortNumber 值裡,改它就能換連接埠。真正容易出錯的是放行:遠端桌面的資料包要先透過雲安全組或機房邊界防火牆,再透過 Windows 防火牆,換連接埠時路徑上的每一層都要同步,順序錯了就會把自己關在門外。下面按“檢視、修改、放行、驗證、加固”的順序給出步驟和命令。

RDP 連接埠號是多少:3389 與相關連接埠

場景 連接埠 協議 說明
Windows 遠端桌面(預設) 3389 TCP 必須放行,認證和會話建立都在這條連線上
RDP 的 UDP 傳輸 3389 UDP 可選,不放行也能連,只是在高延遲、有丟包的線路上更容易卡頓
改過連接埠的伺服器 PortNumber 的值 TCP,UDP 一般隨之變化 以 netstat 的實際輸出為準
遠端桌面閘道器(RD Gateway) 443 / 3391 TCP / UDP 客戶端經 HTTPS 連閘道器,閘道器再用 3389 連後端伺服器
Linux 上的 xrdp 3389 TCP 在 /etc/xrdp/xrdp.ini 的 port= 修改
雲平台 VNC、BMC 遠端控制檯 不經過伺服器的 3389 — 遠端桌面連不上時的備用通道

“RDP 協議連接埠號”和“遠端桌面連接埠號”說的是同一件事。需要注意的是,連接埠號是伺服器一側的監聽連接埠;客戶端發起連線時用的是系統隨機分配的臨時連接埠,防火牆只需要按伺服器的連接埠寫規則。

怎麼檢視伺服器當前的 RDP 連接埠

查連接埠要分清兩個值:登錄檔裡配置的連接埠,和服務實際監聽的連接埠。改了登錄檔但還沒重啟服務、新連接埠被別的程式佔用、遠端桌面被關閉,都會讓兩者對不上。

1. 看登錄檔裡配置的連接埠。 用命令提示符查詢:

reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber

輸出類似 PortNumber REG_DWORD 0xd3d。值以十六進位制顯示,0xd3d 換算成十進位制就是 3389。PowerShell 直接給出十進位制:

(Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp').PortNumber

2. 看實際監聽的連接埠。 netstat 列出所有監聽,-ano 分別表示全部連線、數字形式、顯示程序號:

netstat -ano | findstr :3389
  TCP    0.0.0.0:3389           0.0.0.0:0              LISTENING       1172
  TCP    [::]:3389              [::]:0                 LISTENING       1172
  UDP    0.0.0.0:3389           *:*                                    1172
  UDP    [::]:3389              *:*                                    1172

最後一列 1172 是程序號,用 tasklist /svc /fi "PID eq 1172" 可以確認它是承載 TermService 服務的 svchost.exe。UDP 沒有連線狀態,所以 UDP 行不顯示 LISTENING。

如果你不知道連接埠被改成了多少,反過來從服務查連接埠更快:

$svcPid = (Get-CimInstance Win32_Service -Filter "Name='TermService'").ProcessId
Get-NetTCPConnection -State Listen -OwningProcess $svcPid | Select-Object LocalAddress, LocalPort
Get-NetUDPEndpoint -OwningProcess $svcPid | Select-Object LocalAddress, LocalPort

變數不要命名為 $pid,它是 PowerShell 的內建唯讀變數。

3. 確認遠端桌面是開啟的。 登錄檔裡 fDenyTSConnections 為 0 表示允許遠端連線,為 1 時服務不會監聽任何連接埠:

(Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server').fDenyTSConnections

從外部確認則在你的電腦上執行 Test-NetConnection 203.0.113.10 -Port 3389,TcpTestSucceeded : True 表示 TCP 連接埠可達。它測不了 UDP,UDP 3389 是否放行,要連上之後在 mstsc 的連線資訊裡看有沒有啟用 UDP。

修改 RDP 連接埠:五個步驟

改連接埠的原則是先開新門,再關舊門:新連接埠在三處防火牆都放行、確認能連上之後,才撤掉 3389 的規則。

  1. 準備後路。 開啟服務商面板的 VNC 控制檯或伺服器 BMC 的遠端控制檯,確認能看到登入介面。改錯了,只能從這裡進去改回來。
  2. 選一個空閒連接埠。 選 1024–49151 之間的連接埠,避開 Windows 的動態連接埠範圍(預設 49152–65535,可用 netsh int ipv4 show dynamicport tcp 檢視),也避開伺服器上其他程式要用的連接埠。下面兩條命令都沒有輸出,說明 13389 空閒:
Get-NetTCPConnection -LocalPort 13389 -ErrorAction SilentlyContinue
Get-NetUDPEndpoint -LocalPort 13389 -ErrorAction SilentlyContinue
  1. 先放行新連接埠。 Windows 防火牆、雲安全組、機房防火牆三處都加上新連接埠的規則,3389 的規則暫時保留,具體寫法見下一節。
  2. 修改 PortNumber。 用 reg 命令寫入,/d 後面直接寫十進位制數:
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d 13389 /f

用登錄檔編輯器(regedit)手動改時,雙擊 PortNumber 後先把“基數”切換成“十進位制”再輸入。預設是十六進位制,在十六進位制下輸入 13389,實際寫進去的是 0x13389,即十進位制的 78729,超出了 65535,服務就無法按預期監聽。

  1. 重啟服務並用新連接埠連線。 當前遠端會話會立即斷開:
Restart-Service TermService -Force

-Force 會連同依賴它的遠端桌面相關服務一起重啟。等半分鐘左右,在你的電腦上執行 mstsc /v:203.0.113.10:13389 連線;連上之後執行 netstat -ano | findstr :13389 確認 TCP 和 UDP 都已在新連接埠上。最後回到三處防火牆,刪除或禁用 3389 的規則。

三處防火牆同步放行新連接埠

位置 由誰修改 放行內容 容易漏掉的地方
Windows 防火牆 伺服器管理員 入站 TCP 13389,可選 UDP 13389,遠端位址限定為管理網段 系統自帶的“遠端桌面”規則只針對 3389,不會自動跟著變
雲安全組或雲防火牆 雲帳號管理員 入方向 TCP:13389(可選 UDP:13389),源位址填辦公出口 IP 例項繫結了多個安全組;改到了另一個地域或另一台例項的安全組
機房防火牆、邊界 ACL、NAT 對映 機房網路或你自己的防火牆 允許存取伺服器 IP 的 13389;有連接埠對映的改對映 託管在機房的伺服器,上游 ACL 由機房管理,要提前提交變更

Windows 防火牆:新建兩條規則,-RemoteAddress 直接寫上允許的來源,比開放給所有位址再另行限制更省事:

$port  = 13389
$admin = "198.51.100.0/24", "203.0.113.88"
New-NetFirewallRule -DisplayName "RDP-TCP-$port" -Direction Inbound -Protocol TCP -LocalPort $port -RemoteAddress $admin -Action Allow -Profile Any
New-NetFirewallRule -DisplayName "RDP-UDP-$port" -Direction Inbound -Protocol UDP -LocalPort $port -RemoteAddress $admin -Action Allow -Profile Any

-Profile Any 讓規則在域、專用、公用三種網路配置檔案下都生效,避免規則建在“域”配置檔案上、而伺服器網路卡被識別為“公用網路”導致不生效。新連接埠驗證透過後,禁用系統自帶的遠端桌面規則組:

Get-NetFirewallRule -Group "@FirewallAPI.dll,-28752" | Disable-NetFirewallRule

雲安全組:在例項關聯的安全組裡新增入方向規則,協議連接埠填 TCP 13389,源位址填你的辦公出口 IP(單個位址寫成 /32);需要 UDP 時再加一條 UDP 13389。驗證透過後刪除 3389 的規則。

機房防火牆與連接埠對映:伺服器直接配置公網 IP 時,在邊界防火牆上允許“來源辦公網、目的伺服器 IP、TCP 13389”;託管在 IDC 的機器,上游 ACL 通常由機房維護,提前把新連接埠和來源位址告訴機房。伺服器在內網、經 NAT 對映對外時,還有一個選擇:伺服器繼續用 3389,只改外部對映的連接埠。以 Linux 閘道器為例:

# 外部存取閘道器的 13389,轉發到內網伺服器 10.0.0.20 的 3389
# 前提:閘道器已開啟 net.ipv4.ip_forward=1,FORWARD 鏈已放行 ESTABLISHED,RELATED 回包
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 13389 -j DNAT --to-destination 10.0.0.20:3389
iptables -A FORWARD -p tcp -s 198.51.100.0/24 -d 10.0.0.20 --dport 3389 -j ACCEPT

FORWARD 鏈看到的是轉換之後的目的連接埠,所以第二條寫 3389。這樣伺服器上什麼都不用改,也不會因為改錯登錄檔而失聯。

改完連不上怎麼排查

先在你的電腦上執行 Test-NetConnection 203.0.113.10 -Port 13389,再透過 VNC 控制檯登入伺服器檢視監聽,對照下表:

現象 原因 處理
外部測試 False,伺服器上 netstat 能看到新連接埠在監聽 某一層防火牆沒放行,或者規則的來源位址不包含你當前的出口 IP 逐層核對;家庭寬頻的出口 IP 會變,用 curl ifconfig.me 之類的方式確認當前位址
netstat 裡沒有新連接埠 服務沒有重啟,或 PortNumber 沒寫進去 用 reg query 核對數值後重啟 TermService
PortNumber 是一個大於 65535 的數 在 regedit 裡用十六進位制輸入了十進位制數字 切換到十進位制重新輸入
重啟服務後哪個連接埠都沒有監聽 新連接埠被別的程式佔用,或遠端桌面被關閉 查 fDenyTSConnections,換一個空閒連接埠
能連上,但畫面斷續、偶爾凍結 新連接埠只放行了 TCP,UDP 傳輸不可用或被限速 放行 UDP 新連接埠,或接受只用 TCP
mstsc 仍然去連 3389 位址裡沒寫連接埠,或開啟的是舊的 .rdp 檔案 寫成 IP:連接埠,更新 .rdp 檔案

實在連不上,就從 VNC 控制檯把連接埠改回去:

reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d 3389 /f
net stop TermService /y && net start TermService

一切正常後,從外部再確認一次只暴露了新連接埠。nmap 結果裡 3389 顯示 filtered 或 closed、13389 顯示 open,才說明舊門已經關上:

nmap -Pn -p 3389,13389 203.0.113.10

改連接埠之外,必須做的白名單與帳戶鎖定

改連接埠只能擋住專門盯著 3389 的批次爆破。連接埠掃描器會探測全部 65535 個連接埠,nmap -sV 這類服務識別能直接認出某個連接埠上跑的是 RDP(nmap 裡的服務名是 ms-wbt-server),換到 13389 依然會被找到。真正起作用的是下面三件事。

1. 來源白名單。 上一節的 -RemoteAddress 和安全組的源位址,就是白名單。只允許辦公網出口、堡壘機或 VPN 閘道器的位址存取遠端桌面連接埠,其餘來源的包在第一道防火牆就被丟棄,連輸密碼的機會都沒有。這是效果最明顯的一步,比改連接埠重要得多。

2. 帳戶鎖定策略。 連續輸錯密碼若干次就鎖定帳戶一段時間,讓暴力破解慢到沒有意義。先檢視當前策略,鎖定閾值 顯示“從不”表示沒有啟用:

net accounts
net accounts /lockoutthreshold:5 /lockoutwindow:30 /lockoutduration:30

第二條表示:30 分鐘內輸錯 5 次,鎖定 30 分鐘(鎖定觀察視窗不能大於鎖定時長)。加入域的伺服器以域的組策略為準,本地設定會被覆蓋。還要注意兩點:

  • 鎖定策略也會被反過來利用。攻擊者故意輸錯密碼,就能把正常使用者鎖在外面,所以它必須和來源白名單一起用,而不是替代白名單。
  • 內建 Administrator 帳戶在很多 Windows 版本上預設不受鎖定策略約束(較新的系統提供了“允許管理員帳戶鎖定”的策略,以實際策略設定為準)。穩妥的做法是另建一個管理員帳戶用於遠端登入,把內建的 Administrator 改名或禁用,例如 Rename-LocalUser -Name Administrator -NewName ops-admin。

3. 看日誌,確認有沒有人在試。 在安全日誌裡,事件 ID 4625 對應一次登入失敗,4740 對應一次帳戶鎖定。下面統計最近 24 小時失敗次數最多的來源 IP:

Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4625; StartTime=(Get-Date).AddDays(-1)} -ErrorAction SilentlyContinue |
  Group-Object { $_.Properties[19].Value } |
  Sort-Object Count -Descending | Select-Object -First 10 Count, Name

開啟 NLA 時,部分系統版本記錄的失敗事件裡來源位址顯示為“-”,統計結果會集中在這一行,這時要結合安全組或邊界防火牆的日誌判斷來源。開了白名單之後這裡仍然有大量記錄,說明某一層的來源限制沒有生效,回到上一節逐層檢查。此外保持網路級別身份驗證(NLA)開啟、及時安裝安全更新;需要從任意地點存取的,用 VPN、堡壘機或遠端桌面閘道器做統一入口,伺服器的遠端桌面連接埠只對入口開放。

在管理系統裡怎麼落地

改 RDP 連接埠、調整防火牆這類操作,風險都集中在“改完連不上”的那一刻:遠端桌面依賴伺服器自己的網路卡、系統和防火牆,任何一處寫錯,RDP 通道都會一起斷掉。Toplink DCIM 的 IPMI 遠端管理 提供經由 BMC 的 VNC 控制檯,不經過伺服器作業系統的網路,連接埠改錯、防火牆規則寫反時,值班人員可以直接在瀏覽器裡看到伺服器畫面並改回來,整個過程自動錄影,事後能回放核對。租用伺服器的客戶也能在 客戶自助端 開啟 VNC 控制檯,自己處理改連接埠後連不上的問題,不必等工單。

常見問題

改了連接埠後,mstsc 和 .rdp 檔案怎麼寫?

mstsc 的“計算機”欄寫成 IP:連接埠,例如 203.0.113.10:13389;.rdp 檔案裡把 full address 改成同樣的寫法,或者單獨加一行 server port:i:13389。

RDP 連接埠能改成 443 或 80 嗎?

技術上可以,只要該連接埠沒有被其他程式佔用。但伺服器同時跑網站時會衝突,掃描器也一樣會探測這些常用連接埠,安全上沒有額外收益,一般選 1024–49151 之間的一個空閒連接埠即可。

改 RDP 連接埠需要重啟伺服器嗎?

不需要,重啟遠端桌面服務(TermService)就會按新連接埠監聽,但當前的遠端會話會斷開。服務因依賴關係停不下來時,再重啟系統。

想看看在你的機房裡怎麼用?

從一次產品示範開始,梳理你的業務鏈路。

查看價格
服務熱線 400-112-2951

讓我們聊聊你的 IDC 業務

掃碼新增企業微信,預約產品示範或申請試用。

Toplink 企業微信二維碼

長按儲存或使用企業微信 / 微信掃描

也可致電
400-112-2951
Telegram
@TopLink88