คำตอบสั้น ๆ: เปลี่ยนพอร์ต Remote Desktop จาก 3389 เป็นพอร์ตอื่นบน Windows Server อย่างปลอดภัย โดยเปิด Firewall ก่อนและทดสอบการเชื่อมต่อใหม่ไม่ให้ตัวเองถูกล็อกออกจากเครื่อง
คู่มือนี้อธิบาย Windows Server ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย
Remote Desktop (RDP) บน Windows Server ใช้พอร์ต TCP 3389 เป็นค่าเริ่มต้น ซึ่งเป็นพอร์ตที่บอตบนอินเทอร์เน็ตสแกนหาอยู่ตลอดเวลา เมื่อเปิด Event Viewer ของเซิร์ฟเวอร์ที่เปิด 3389 สู่สาธารณะ มักจะเห็นการพยายามล็อกอินที่ล้มเหลว (Event ID 4625) จำนวนมากทุกวัน การย้าย RDP ไปใช้พอร์ตอื่นช่วยลดการสแกนแบบอัตโนมัติและทำให้ Log สะอาดขึ้นได้มาก
อย่างไรก็ตาม การเปลี่ยนพอร์ตไม่ใช่มาตรการรักษาความปลอดภัยหลัก เป็นเพียงการลดสัญญาณรบกวน ควรใช้ร่วมกับรหัสผ่านที่แข็งแรง การเปิด Network Level Authentication (NLA) และถ้าเป็นไปได้ ให้จำกัดให้เชื่อมต่อได้เฉพาะ IP ของสำนักงาน บทความนี้อธิบายวิธีเปลี่ยนพอร์ตอย่างปลอดภัยโดยไม่ทำให้ตัวเองเข้าเซิร์ฟเวอร์ไม่ได้
สิ่งที่ต้องเตรียม (Windows Server)
- Windows Server 2019 หรือ 2022 ที่เข้าใช้งานผ่าน RDP ได้อยู่แล้ว
- บัญชีที่อยู่ในกลุ่ม Administrators
- ช่องทางสำรองในการเข้าเครื่อง เช่น Console ผ่านหน้าเว็บ (ดู การ Remote เข้า Console Server ผ่าน Web UI) เผื่อกรณีเชื่อมต่อพอร์ตใหม่ไม่ได้
- หมายเลขพอร์ตใหม่ที่จะใช้ แนะนำให้เลือกในช่วง 1024-65535 ที่ไม่มีโปรแกรมอื่นใช้อยู่ เช่น 3390 หรือ 43389 หลีกเลี่ยงพอร์ตที่บริการอื่นใช้กันทั่วไป เช่น 8080, 8443, 5985
หมายเหตุ: ลำดับขั้นตอนในบทความนี้สำคัญมาก ต้องเปิด Firewall สำหรับพอร์ตใหม่ ก่อน เปลี่ยนพอร์ตและรีสตาร์ตบริการ ถ้าสลับลำดับ จะถูกตัดการเชื่อมต่อและเข้าพอร์ตใหม่ไม่ได้ ต้องไปแก้ผ่าน Console แทน
ขั้นตอนที่ 1: ตรวจสอบพอร์ตปัจจุบันและพอร์ตที่จะใช้ (Windows Server)
เปิด 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 แทนได้