ลดความยุ่งยากในการใช้คลาวด์ พูดคุยกับเจ้าหน้าที่

Home เปลี่ยน Port Remote Desktop (RDP) บน Windows Server

เปลี่ยน Port Remote Desktop (RDP) บน Windows Server

Remote Desktop (RDP) บน Windows Server ใช้พอร์ต TCP 3389 เป็นค่าเริ่มต้น ซึ่งเป็นพอร์ตที่บอตบนอินเทอร์เน็ตสแกนหาอยู่ตลอดเวลา เมื่อเปิด Event Viewer ของเซิร์ฟเวอร์ที่เปิด 3389 สู่สาธารณะ มักจะเห็นการพยายามล็อกอินที่ล้มเหลว (Event ID 4625) จำนวนมากทุกวัน การย้าย RDP ไปใช้พอร์ตอื่นช่วยลดการสแกนแบบอัตโนมัติและทำให้ Log สะอาดขึ้นได้มาก

อย่างไรก็ตาม การเปลี่ยนพอร์ตไม่ใช่มาตรการรักษาความปลอดภัยหลัก เป็นเพียงการลดสัญญาณรบกวน ควรใช้ร่วมกับรหัสผ่านที่แข็งแรง การเปิด Network Level Authentication (NLA) และถ้าเป็นไปได้ ให้จำกัดให้เชื่อมต่อได้เฉพาะ IP ของสำนักงาน บทความนี้อธิบายวิธีเปลี่ยนพอร์ตอย่างปลอดภัยโดยไม่ทำให้ตัวเองเข้าเซิร์ฟเวอร์ไม่ได้

สิ่งที่ต้องเตรียม

  • Windows Server 2019 หรือ 2022 ที่เข้าใช้งานผ่าน RDP ได้อยู่แล้ว
  • บัญชีที่อยู่ในกลุ่ม Administrators
  • ช่องทางสำรองในการเข้าเครื่อง เช่น Console ผ่านหน้าเว็บ (ดู การ Remote เข้า Console Server ผ่าน Web UI) เผื่อกรณีเชื่อมต่อพอร์ตใหม่ไม่ได้
  • หมายเลขพอร์ตใหม่ที่จะใช้ แนะนำให้เลือกในช่วง 1024-65535 ที่ไม่มีโปรแกรมอื่นใช้อยู่ เช่น 3390 หรือ 43389 หลีกเลี่ยงพอร์ตที่บริการอื่นใช้กันทั่วไป เช่น 8080, 8443, 5985

หมายเหตุ: ลำดับขั้นตอนในบทความนี้สำคัญมาก ต้องเปิด Firewall สำหรับพอร์ตใหม่ ก่อน เปลี่ยนพอร์ตและรีสตาร์ตบริการ ถ้าสลับลำดับ จะถูกตัดการเชื่อมต่อและเข้าพอร์ตใหม่ไม่ได้ ต้องไปแก้ผ่าน Console แทน

ขั้นตอนที่ 1: ตรวจสอบพอร์ตปัจจุบันและพอร์ตที่จะใช้

เปิด Windows PowerShell แบบ Run as Administrator แล้วดูพอร์ต RDP ปัจจุบัน

Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name PortNumber

ผลลัพธ์จะมีบรรทัด PortNumber : 3389 จากนั้นตรวจว่าพอร์ตใหม่ (ตัวอย่างนี้ใช้ 3390) ยังไม่มีโปรแกรมใดใช้อยู่

Get-NetTCPConnection -LocalPort 3390 -ErrorAction SilentlyContinue

ถ้าคำสั่งไม่แสดงอะไรเลย แปลว่าพอร์ตว่าง ใช้ได้

ขั้นตอนที่ 2: เปิด Windows Firewall สำหรับพอร์ตใหม่

RDP ใช้ทั้ง TCP และ UDP (UDP ช่วยให้ภาพลื่นขึ้นบนเครือข่ายที่ช้า) ให้สร้างกฎรับเข้าทั้งสองโปรโตคอล

New-NetFirewallRule -DisplayName "RDP TCP 3390" -Direction Inbound -Protocol TCP -LocalPort 3390 -Action Allow
New-NetFirewallRule -DisplayName "RDP UDP 3390" -Direction Inbound -Protocol UDP -LocalPort 3390 -Action Allow

แต่ละคำสั่งจะแสดงรายละเอียดกฎที่สร้าง โดยมี Enabled : True และ Action : Allow

ถ้าต้องการจำกัดให้เชื่อมต่อได้เฉพาะ IP ของสำนักงาน ให้เพิ่มพารามิเตอร์ -RemoteAddress เช่น

New-NetFirewallRule -DisplayName "RDP TCP 3390 Office" -Direction Inbound -Protocol TCP -LocalPort 3390 -RemoteAddress 203.0.113.10 -Action Allow

หากเซิร์ฟเวอร์มี Security Group หรือ Firewall ภายนอกจากฝั่งผู้ให้บริการ ให้เปิดพอร์ตนั้นเพิ่มด้วย รายละเอียดการจัดการกฎ Firewall ดูเพิ่มได้ที่ เปิด Port บน Windows Defender Firewall

ขั้นตอนที่ 3: เปลี่ยนพอร์ตใน Registry

ค่าพอร์ตของ RDP เก็บอยู่ใน Registry ที่ HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp ค่า PortNumber (ชนิด DWORD) แก้ได้ด้วย PowerShell

Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name PortNumber -Value 3390

คำสั่งนี้ไม่แสดงผลลัพธ์ถ้าสำเร็จ ตรวจซ้ำด้วยคำสั่งในขั้นตอนที่ 1 ควรเห็น PortNumber : 3390

ถ้าถนัดใช้หน้าจอ ให้เปิด regedit ไปที่ Key ข้างต้น ดับเบิลคลิก PortNumber เลือก Decimal ก่อน แล้วพิมพ์ 3390 จากนั้นกด OK (ถ้าลืมเลือก Decimal ค่าจะถูกตีความเป็นเลขฐานสิบหก และได้พอร์ตผิด)

ขั้นตอนที่ 4: รีสตาร์ตบริการ Remote Desktop

พอร์ตใหม่จะมีผลหลังรีสตาร์ตบริการ Remote Desktop Services (TermService) หรือรีบูตเครื่อง การรีสตาร์ตบริการจะตัดการเชื่อมต่อ RDP ปัจจุบันทันที ให้ตรวจอีกครั้งว่าทำขั้นตอนที่ 2 แล้ว จากนั้นรัน

Restart-Service -Name TermService -Force

หน้าต่าง RDP จะหลุด ซึ่งเป็นเรื่องปกติ ถ้าไม่สะดวกรีสตาร์ตบริการ ใช้ Restart-Computer แทนได้

ขั้นตอนที่ 5: เชื่อมต่อด้วยพอร์ตใหม่

ที่เครื่องของคุณ เปิด Remote Desktop Connection (mstsc) แล้วใส่ที่อยู่ในรูปแบบ IP:พอร์ต เช่น

mstsc /v:203.0.113.25:3390

บน macOS ที่ใช้แอป Windows App (ชื่อเดิม Microsoft Remote Desktop) ให้ใส่ 203.0.113.25:3390 ในช่อง PC name ได้เช่นกัน

ขั้นตอนที่ 6: ปิดกฎ Firewall ของพอร์ตเดิม

เมื่อเข้าพอร์ตใหม่ได้แล้ว จึงค่อยปิดกฎเดิมของ 3389 เพื่อไม่ให้มีช่องที่ไม่ได้ใช้เปิดค้างไว้ กฎที่ Windows สร้างมาให้อยู่ในกลุ่ม Remote Desktop

Get-NetFirewallRule -DisplayGroup "Remote Desktop" | Select-Object DisplayName, Enabled
Disable-NetFirewallRule -DisplayGroup "Remote Desktop"

ข้อควรรู้: ถ้าภายหลังมีการเปิด Remote Desktop ใหม่ผ่าน Server Manager หรือ Settings ระบบอาจเปิดกฎกลุ่มนี้กลับมา ให้ตรวจซ้ำหลังเปลี่ยนการตั้งค่า

ตรวจสอบผลลัพธ์

  1. บนเซิร์ฟเวอร์ ตรวจว่ามีบริการรอรับการเชื่อมต่อที่พอร์ตใหม่
    Get-NetTCPConnection -LocalPort 3390 -State Listen
    ควรเห็นอย่างน้อยหนึ่งบรรทัดที่มี LocalPort 3390 และสถานะ Listen
  2. จากเครื่อง Windows ภายนอก ทดสอบว่าพอร์ตเข้าถึงได้
    Test-NetConnection -ComputerName 203.0.113.25 -Port 3390
    บรรทัด TcpTestSucceeded : True แปลว่าเข้าถึงได้
  3. ทดสอบว่าพอร์ต 3389 ไม่ตอบแล้ว ผลของคำสั่งเดียวกันกับพอร์ต 3389 ควรเป็น False

ปัญหาที่พบบ่อย

เชื่อมต่อพอร์ตใหม่ไม่ได้หลังรีสตาร์ตบริการ

สาเหตุที่พบมากที่สุดคือยังไม่ได้เปิด Firewall ของ Windows หรือ Firewall ภายนอกจากฝั่งผู้ให้บริการ ให้เข้าผ่าน Console แล้วตรวจกฎด้วย Get-NetFirewallRule -DisplayName "RDP*" หรือถ้าต้องการย้อนกลับชั่วคราว ให้ตั้ง PortNumber กลับเป็น 3389 เปิดกลุ่มกฎ Enable-NetFirewallRule -DisplayGroup "Remote Desktop" แล้วรีสตาร์ต TermService

ตั้งค่าใน regedit แล้วได้พอร์ตแปลก

เกิดจากใส่ค่าในโหมด Hexadecimal เช่นพิมพ์ 3390 ในโหมด Hex จะได้พอร์ต 13200 ให้แก้ใหม่โดยเลือก Decimal หรือใช้คำสั่ง PowerShell ในขั้นตอนที่ 3

เชื่อมต่อได้จากบางเครือข่ายเท่านั้น

เครือข่ายองค์กรบางแห่งอนุญาตให้ออกได้เฉพาะพอร์ตมาตรฐาน ถ้าจากออฟฟิศเข้าไม่ได้แต่จากเน็ตมือถือเข้าได้ ให้ตรวจกับผู้ดูแลเครือข่ายฝั่งออฟฟิศ หรือเลือกพอร์ตที่เครือข่ายนั้นอนุญาต

ยังเห็นการพยายามล็อกอินล้มเหลวจำนวนมาก

บอตบางตัวสแกนทุกพอร์ต การเปลี่ยนพอร์ตจึงลดได้แต่ไม่หมด ทางแก้ที่ได้ผลกว่าคือจำกัด -RemoteAddress ในกฎ Firewall ให้เหลือเฉพาะ IP ที่ใช้งานจริง และตั้ง Account Lockout Policy ใน Local Security Policy (secpol.msc) ที่ Account Policies > Account Lockout Policy

หากทำตามขั้นตอนแล้วยังเชื่อมต่อไม่ได้ หรือไม่แน่ใจว่าควรใช้พอร์ตใด ติดต่อทีมงาน THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/

ผู้ให้บริการคลาวด์ไทย
เพื่อธุรกิจของคนไทย

"มุ่งมั่น" และ "มั่นคง"
พร้อมรับมือทุกการเติบโต
Trust Cloud
คลาว์ที่ปลอดภัย
คือรากฐานที่มั่นคง
cloud security