กำหนดค่า SSH Tunnel (การส่งต่อพอร์ต) บน Windows
คุณสามารถใช้เซิร์ฟเวอร์ OpenSSH ในตัวบน Windows เพื่อส่งต่อพอร์ตผ่านช่องสัญญาณ SSH (ช่องสัญญาณ SSH) การส่งต่อพอร์ตใน SSH ช่วยให้คุณสามารถอุโมงค์ (ส่งต่อ) พอร์ตแอปพลิเคชันจากเครื่องคอมพิวเตอร์ของคุณไปยังเซิร์ฟเวอร์ระยะไกลและในทางกลับกัน การส่งต่อพอร์ตผ่านช่องทาง SSH นั้นใช้กันอย่างแพร่หลายในสภาพแวดล้อม Linux/Unix และตอนนี้คุณสามารถใช้ประโยชน์จากคุณสมบัตินี้ใน Windows ได้เช่นกัน ในตัวอย่างนี้ เราจะแสดงวิธีการทันเนลการรับส่งข้อมูลการเชื่อมต่อ RDP ผ่าน OpenSSH บนโฮสต์ Windows Server
SSH Tunneling คืออะไร
อุโมงค์ SSH ให้การเชื่อมต่อ TCP ที่เข้ารหัสอย่างปลอดภัยระหว่างโลคัลโฮสต์และเซิร์ฟเวอร์ SSH ระยะไกล การส่งต่อพอร์ต SSH ช่วยให้คุณอุโมงค์การเชื่อมต่อจากพอร์ตภายในเครื่องบนเครื่องของคุณไปยังพอร์ต TCP ใดๆ บนเซิร์ฟเวอร์ระยะไกล (หรือในทางกลับกัน) ผ่าน SSH
การส่งต่อพอร์ตในอุโมงค์ SSH ใช้สำหรับ:
บายพาสไฟร์วอลล์
-
การเปิดประตูหลังสู่เครือข่ายส่วนตัว
การแทนที่สถานการณ์ VPN สำหรับการเชื่อมต่อระยะไกลที่ปลอดภัย
ป้องกันการรับส่งข้อมูลของแอปพลิเคชันรุ่นเก่า (โปรโตคอล) ที่ส่งข้อมูลเป็นข้อความธรรมดา (ไม่มีการเข้ารหัส)
คุณสามารถส่งต่อทราฟฟิก/พอร์ต TCP ไปยังอุโมงค์ SSH เท่านั้น (ไม่รองรับโปรโตคอล UDP และ ICMP)
SSH Tunneling ส่วนใหญ่จะใช้ในสถานการณ์เมื่อคุณต้องการเชื่อมต่อกับคอมพิวเตอร์ระยะไกลที่อยู่หลังไฟร์วอลล์ ตัวอย่างเช่น คุณมี Windows Server ที่เปิดเฉพาะพอร์ต SSH (TCP 22) พอร์ตอื่นๆ ทั้งหมดถูกบล็อกโดยไฟร์วอลล์ฮาร์ดแวร์หรือไฟร์วอลล์ Windows Defender งานของคุณคือเชื่อมต่อกับ Windows Server โดยใช้ไคลเอ็นต์ RDP ดูเหมือนจะเป็นงานที่เป็นไปไม่ได้เนื่องจากพอร์ตเดสก์ท็อประยะไกล 3389 ถูกบล็อกโดยไฟร์วอลล์ อย่างไรก็ตาม คุณสามารถเข้าถึงพอร์ตใดก็ได้บนรีโมตโฮสต์ผ่านอุโมงค์ SSH
นี่คือสถานการณ์การใช้งานทั่วไปของ SSH Tunneling:
การส่งต่อ TCP ภายในเครื่อง เป็นการส่งต่อพอร์ตในเครื่องไปยังเซิร์ฟเวอร์ระยะไกล
การส่งต่อ TCP ระยะไกล เป็นการส่งต่อพอร์ตระยะไกลไปยังเครื่องคอมพิวเตอร์
อุโมงค์ SSH สองเท่า - อนุญาตให้เชื่อมต่อคอมพิวเตอร์โดยไม่ต้องจัดสรรที่อยู่ IP สาธารณะหรือหลัง NAT/ไฟร์วอลล์ผ่านเซิร์ฟเวอร์ SSH (หากใช้โซลูชันเซิร์ฟเวอร์ OpenVPN ไม่ได้)
การรักษาความปลอดภัย RDP ด้วย SSH Tunnel (การส่งต่อ TCP ในเครื่อง)
ในโหมดนี้ คุณจะสร้างพอร์ต TCP ภายในเครื่องบนคอมพิวเตอร์ของคุณ การเชื่อมต่อทั้งหมดไปยังพอร์ตนี้จะถูกส่งต่อไปยังพอร์ตที่ระบุบนเซิร์ฟเวอร์ระยะไกลผ่านอุโมงค์ SSH ในตัวอย่างนี้ เราจะสร้างพอร์ตภายในเครื่อง 8888 และการเชื่อมต่อไปยังพอร์ตนั้นจะเปลี่ยนเส้นทางไปยังพอร์ต RDP 3389 บนโฮสต์ Windows ระยะไกล แผนภาพการเชื่อมต่อทั่วไปมีลักษณะดังนี้:
เราต้องการไคลเอ็นต์ SSH สำหรับการส่งต่อพอร์ต คุณสามารถใช้ไคลเอนต์ของบุคคลที่สาม (เช่น Putty) แต่ฉันจะใช้ไคลเอนต์ SSH ในตัวบน Windows เรียกใช้คำสั่งต่อไปนี้ในคอนโซล PowerShell เพื่อติดตั้งไคลเอ็นต์ OpenSSH บน Windows 10/11 หรือ Windows Server 2022/2019:
Get-WindowsCapability -Online | ? Name -like 'OpenSSH.Client*'หากต้องการสร้างอุโมงค์ SSH ด้วยรีโมตโฮสต์ 192.168.1.90 ให้รันคำสั่ง:
ssh -L 8888:192.168.1.90:3389 root@192.168.1.90สตริงการเชื่อมต่อต่อไปนี้ถูกใช้ในตัวอย่างนี้:
LOCAL_PORT:DESTINATION_IP:DESTINATION_PORTและ
USER@DESTINATION_IP(ชื่อผู้ใช้และที่อยู่ของเซิร์ฟเวอร์ SSH ระยะไกล)
หากต้องการให้อุโมงค์ SSH ทำงานในพื้นหลัง ให้เพิ่มพารามิเตอร์ -f
ในการเชื่อมต่อกับเดสก์ท็อประยะไกลผ่านอุโมงค์ SSH คุณต้องเชื่อมต่อกับพอร์ตภายในเครื่อง 8888 ของคอมพิวเตอร์ของคุณโดยใช้ไคลเอนต์ RDP (mstsc.exe):
127.0.0.1:8888
เข้าสู่ระบบคอมพิวเตอร์ระยะไกลและทำงานอย่างปลอดภัยในเซสชัน RDP คุณสามารถใช้ Get-NetTCPConnection cmdlet หรือเครื่องมือ TCPView เพื่อให้แน่ใจว่ามีการสร้างการเชื่อมต่อ RDP ภายในเครื่อง (การเชื่อมต่อ RDP เริ่มต้นโดยเซิร์ฟเวอร์ SSH ที่ทำงานภายในเครื่อง):
Get-NetTCPConnection -State Established|where {$_.localport -eq "3389"}|flคุณสามารถตรวจสอบว่าพอร์ต TCP/3389 บนเซิร์ฟเวอร์ไม่สามารถเข้าถึงได้โดยตรงจากคอมพิวเตอร์ของคุณ คุณสามารถตรวจสอบความพร้อมใช้งานของพอร์ตได้โดยใช้ Test-NetConnection cmdlet:
Test-NetConnection 192.168.1.90 -port 3389TcpTestSucceeded : Falseคอมพิวเตอร์เครื่องอื่นในเครือข่ายท้องถิ่นของคุณยังสามารถใช้ช่องสัญญาณนี้เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ RDP พร้อมกันได้ แม้ว่าจะไม่อนุญาตการเชื่อมต่อโดยตรงก็ตาม (ทั้งผ่าน SSH และผ่าน RDP) ในการทำเช่นนั้น พวกเขาต้องใช้ไคลเอ็นต์ RDP เพื่อเชื่อมต่อกับพอร์ต 8888 บนคอมพิวเตอร์ของคุณ (โดยสร้างช่องสัญญาณ SSH):
mstsc.exe /v 10.10.1.220:8888การรักษาความปลอดภัยการเชื่อมต่อ RDP ด้วยอุโมงค์ SSH อาจเป็นทางเลือก VPN ที่ดีสำหรับการเข้าถึงโฮสต์ Windows สาธารณะ ในกรณีนี้ คุณไม่จำเป็นต้องเปิดพอร์ต RDP/3389 บนโฮสต์ Windows โดยตรง การเปิดเฉพาะพอร์ต SSH/22 ก็เพียงพอแล้ว ซึ่งจะปกป้องคุณจากการโจมตี RDP brute force และการใช้ประโยชน์จากช่องโหว่ RDP 0 วัน
คุณสามารถใช้เครื่องมือ sshpass เพื่อให้รหัสผ่านอัตโนมัติสำหรับการเข้าสู่ระบบ SSH คุณสามารถเรียกใช้เครื่องมือนี้ผ่านระบบย่อย WSL2 สำหรับ Windows
ติดตั้ง sshpass ใน Ubuntu WSL:
$ sudo apt-get -y install ssphassเรียกใช้ไคลเอนต์การเชื่อมต่อเดสก์ท็อประยะไกล (mstsc.exe) และบันทึกการตั้งค่าการเชื่อมต่อไปยังไฟล์ localhost-3389.rdp:
Computer: localhost:8888
User name: remoteusernameในการเชื่อมต่อกับโฮสต์ RDP ระยะไกลโดยอัตโนมัติด้วยรหัสผ่าน SSH ที่บันทึกไว้ ให้ใช้ไฟล์ bat ต่อไปนี้:
start /min wsl sshpass -p "password" ssh -L 8888:192.168.31.90:3389 user@192.168.31.90
powershell sleep 5
start mstsc C:\script\localhost-3389.rdpหรือ (ควร) ตั้งค่าการตรวจสอบคีย์ SSH
จะสร้าง SSH Tunnel บน Windows ด้วย Putty ได้อย่างไร
มาดูวิธีสร้างอุโมงค์ SSH บน Windows โดยใช้ไคลเอ็นต์ SSH Putty ยอดนิยมกัน
เรียกใช้ PuTTY และไปที่ Connection -> SSH -> Tunnels
ระบุหมายเลขพอร์ตในเครื่องใน พอร์ตต้นทาง (ในตัวอย่างคือ 8888)
ระบุที่อยู่ IP ของเซิร์ฟเวอร์ SSH และพอร์ตบนโฮสต์ระยะไกลเพื่อส่งต่อการเชื่อมต่อ:
192.168.31.90:3389เลือกปลายทาง ท้องถิ่น แล้วคลิก เพิ่ม
หากต้องการหลีกเลี่ยงการเปิดเชลล์โฮสต์ระยะไกลเมื่อเชื่อมต่อผ่านอุโมงค์ ให้เปิดใช้งานตัวเลือก อย่าเริ่มเชลล์หรือคำสั่งเลย ในส่วน SSH
กลับไปที่แท็บเซสชัน ระบุชื่อหรือที่อยู่ IP ของโฮสต์ SSH ระยะไกลและหมายเลขพอร์ตการเชื่อมต่อ (22 ตามค่าเริ่มต้น) ระบุชื่อเซสชันในช่องเซสชันที่บันทึกไว้แล้วคลิกบันทึก
ตอนนี้คุณสามารถเริ่มอุโมงค์ SSH ที่บันทึกไว้ใน Putty ได้โดยตรงจากทาสก์บาร์ของ Windows 10
การส่งต่อ TCP ระยะไกล (Reverse SSH) ไปยังเครื่องคอมพิวเตอร์
มีกรณีการใช้งานอุโมงค์ SSH อื่น - การส่งต่อ TCP ระยะไกล คุณสามารถอนุญาตให้เซิร์ฟเวอร์ระยะไกลเข้าถึงพอร์ตภายในเครื่องบนคอมพิวเตอร์ของคุณหรือพอร์ตบนคอมพิวเตอร์เครื่องอื่นบนเครือข่ายภายในของคุณผ่านอุโมงค์ SSH ตัวอย่างเช่น คุณต้องการให้เซิร์ฟเวอร์ภายนอก (192.168.1.90) เข้าถึงไซต์อินทราเน็ตของคุณ (ไม่ได้เผยแพร่บนอินเทอร์เน็ต) หากต้องการสร้างช่องสัญญาณย้อนกลับ ให้ใช้คำสั่งต่อไปนี้:
ssh -R 8080:internalwww:80 user@200.168.1.90ตอนนี้เพื่อเข้าถึงเว็บไซต์ภายในจากเซิร์ฟเวอร์ SSH ระยะไกล เพียงพิมพ์ที่อยู่
http://localhost:8080 ในเบราว์เซอร์
ในทุกเวอร์ชันของ Windows คุณสามารถสร้างกฎการส่งต่อพอร์ตได้โดยใช้
netsh interface portproxyสั่งการ.
ด้วยอุโมงค์ SSH คุณสามารถสร้างห่วงโซ่การส่งต่อพอร์ต คุณสามารถเปิดหรือปิดใช้งาน SSH Tunneling ในไฟล์คอนฟิกูเรชัน OpenSSH (sshd_config) โดยใช้คำสั่งต่อไปนี้:
AllowStreamLocalForwarding yes
AllowTcpForwarding remote
PermitTunnel noคำสั่งการกำหนดค่าเหล่านี้ไม่มีอยู่ใน OpenSSH สำหรับ Windows เวอร์ชันปัจจุบัน







