Android

วิธีการตั้งค่า ssh tunneling (การส่งต่อพอร์ต)

How To: Access A WiFi Pineapple Remotely (Relay Server Setup & SSH Tunneling)

How To: Access A WiFi Pineapple Remotely (Relay Server Setup & SSH Tunneling)

สารบัญ:

Anonim

SSH tunneling หรือการส่งต่อพอร์ต SSH เป็นวิธีการสร้างการเชื่อมต่อ SSH ที่เข้ารหัสระหว่างไคลเอนต์และเครื่องเซิร์ฟเวอร์ผ่านพอร์ตบริการที่สามารถถ่ายทอด

การส่งต่อ SSH มีประโยชน์สำหรับการถ่ายโอนข้อมูลเครือข่ายของบริการที่ใช้โปรโตคอลที่ไม่ได้เข้ารหัสเช่น VNC หรือ FTP การเข้าถึงเนื้อหาที่ จำกัด ทางภูมิศาสตร์หรือการข้ามไฟร์วอลล์กลาง โดยทั่วไปคุณสามารถส่งต่อพอร์ต TCP ใด ๆ และสร้างอุโมงค์การรับส่งข้อมูลผ่านการเชื่อมต่อ SSH ที่ปลอดภัย

การส่งต่อพอร์ต SSH มีสามประเภท:

  • การส่งต่อพอร์ตท้องถิ่น - ส่งต่อการเชื่อมต่อจากโฮสต์ไคลเอนต์ไปยังโฮสต์เซิร์ฟเวอร์ SSH แล้วไปยังพอร์ตโฮสต์ปลายทางลบการส่งต่อพอร์ต - ส่งต่อพอร์ตจากโฮสต์เซิร์ฟเวอร์ไปยังโฮสต์ไคลเอนต์จากนั้นไปยังพอร์ตโฮสต์ปลายทางการส่งต่อพอร์ตแบบไดนามิก - สร้างพร็อกซีเซิร์ฟเวอร์ SOCKS ซึ่งอนุญาตการสื่อสารข้ามช่วงพอร์ต

เราจะพูดถึงวิธีการตั้งค่าอุโมงค์ SSH ที่เข้ารหัสในพื้นที่ระยะไกลและแบบไดนามิก

การส่งต่อพอร์ตท้องถิ่น

การส่งต่อพอร์ตบนเครื่องช่วยให้คุณสามารถส่งต่อพอร์ตบนเครื่องโลคัล (ไคลเอ็นต์ ssh) ไปยังพอร์ตบนเครื่องระยะไกล (เซิร์ฟเวอร์ sshs) ซึ่งจะส่งต่อไปยังพอร์ตบนเครื่องปลายทาง

ในการส่งต่อไคลเอ็นต์ SSH ประเภทนี้จะรับฟังพอร์ตที่กำหนดและทำการเชื่อมต่อกับพอร์ตนั้นไปยังพอร์ตที่ระบุบนเซิร์ฟเวอร์ SSH ระยะไกลซึ่งจะเชื่อมต่อกับพอร์ตในเครื่องปลายทาง เครื่องปลายทางสามารถเป็นเซิร์ฟเวอร์ SSH ระยะไกลหรือเครื่องอื่น ๆ

การส่งต่อพอร์ตท้องถิ่นส่วนใหญ่จะใช้ในการเชื่อมต่อกับบริการระยะไกลบนเครือข่ายภายในเช่นฐานข้อมูลหรือเซิร์ฟเวอร์ VNC

ใน Linux, macOS และระบบ Unix อื่น ๆ เพื่อสร้างการส่งต่อพอร์ตโลคัลผ่านตัวเลือก -L ไปยังไคลเอ็นต์ ssh :

ssh -L LOCAL_PORT:DESTINATION:DESTINATION_PORT SSH_SERVER

ตัวเลือกที่ใช้มีดังนี้:

  • LOCAL_PORT - IP ของเครื่องโลคัลและหมายเลขพอร์ต เมื่อ LOCAL_IP ถูกละไว้ไคลเอ็นต์ ssh ผูกบน localhost DESTINATION:DESTINATION_PORT - IP หรือชื่อโฮสต์และพอร์ตของเครื่องปลายทาง SERVER_IP - ผู้ใช้ SSH ระยะไกลและที่อยู่ IP ของเซิร์ฟเวอร์

คุณสามารถใช้หมายเลขพอร์ตที่มากกว่า 1024 เป็น LOCAL_PORT หมายเลขพอร์ตที่น้อยกว่า 1024 เป็นพอร์ตพิเศษและสามารถใช้ได้โดยรูทเท่านั้น หากเซิร์ฟเวอร์ SSH ของคุณกำลังรับฟังพอร์ตอื่นที่ไม่ใช่ 22 (ค่าดีฟอลต์) ให้ใช้ตัวเลือก -p

ชื่อโฮสต์ปลายทางต้องสามารถแก้ไขได้จากเซิร์ฟเวอร์ SSH

สมมติว่าคุณมีเซิร์ฟเวอร์ฐานข้อมูล MySQL ที่ทำงานบนเครื่อง db001.host บนเครือข่ายภายใน (ส่วนตัว) บนพอร์ต 3306 ซึ่งสามารถเข้าถึงได้จากเครื่อง pub001.host และคุณต้องการเชื่อมต่อโดยใช้เครื่องไคลเอนต์ mysql ในเครื่องกับเซิร์ฟเวอร์ฐานข้อมูล ในการทำเช่นนั้นคุณสามารถส่งต่อการเชื่อมต่อดังนี้:

ssh -L 3336:db001.host:3306 [email protected]

เมื่อคุณเรียกใช้คำสั่งคุณจะได้รับแจ้งให้ป้อนรหัสผ่านผู้ใช้ SSH ระยะไกล หลังจากป้อนแล้วคุณจะเข้าสู่เซิร์ฟเวอร์ระยะไกลและอุโมงค์ SSH จะถูกสร้างขึ้น เป็นความคิดที่ดีที่จะตั้งค่าการรับรองความถูกต้องโดยใช้คีย์ SSH และเชื่อมต่อกับเซิร์ฟเวอร์โดยไม่ต้องป้อนรหัสผ่าน

ตอนนี้ถ้าคุณชี้ไคลเอนต์ฐานข้อมูลเครื่องภายในเครื่องไปที่ 127.0.0.1:3336 การเชื่อมต่อจะถูกส่งต่อไปยังเซิร์ฟเวอร์ db001.host:3306 MySQL ผ่านเครื่อง pub001.host ซึ่งจะทำหน้าที่เป็นเซิร์ฟเวอร์ระดับกลาง

คุณสามารถส่งต่อหลายพอร์ตไปยังหลายปลายทางในคำสั่ง ssh เดียว ตัวอย่างเช่นคุณมีเซิร์ฟเวอร์ฐานข้อมูล MySQL ตัวอื่นที่ทำงานบนเครื่อง db002.host และคุณต้องการเชื่อมต่อกับเซิร์ฟเวอร์ทั้งสองจากไคลเอนต์ในพื้นที่ของคุณที่คุณจะเรียกใช้:

ssh -L 3336:db001.host:3306 3337:db002.host:3306 [email protected]

หากต้องการเชื่อมต่อกับเซิร์ฟเวอร์ที่สองคุณจะต้องใช้ 127.0.0.1:3337

เมื่อโฮสต์ปลายทางเหมือนกับเซิร์ฟเวอร์ SSH แทนที่จะระบุ IP โฮสต์ปลายทางหรือชื่อโฮสต์คุณสามารถใช้ localhost

สมมติว่าคุณต้องเชื่อมต่อกับเครื่องระยะไกลผ่าน VNC ซึ่งทำงานบนเซิร์ฟเวอร์เดียวกันและไม่สามารถเข้าถึงได้จากภายนอก คำสั่งที่คุณจะใช้คือ:

ssh -L 5901:127.0.0.1:5901 -N -f [email protected]

ตัวเลือก -f บอกให้คำสั่ง ssh ทำงานในพื้นหลังและ -N จะไม่ดำเนินการคำสั่งระยะไกล เราใช้ localhost เพราะ VNC และเซิร์ฟเวอร์ SSH กำลังทำงานบนโฮสต์เดียวกัน

การส่งต่อพอร์ตระยะไกล

การส่งต่อพอร์ตระยะไกลเป็นสิ่งที่ตรงกันข้ามกับการส่งต่อพอร์ตท้องถิ่น อนุญาตให้คุณส่งต่อพอร์ตบนเครื่องรีโมต (เซิร์ฟเวอร์ ssh) ไปยังพอร์ตบนเครื่องโลคัล (ไคลเอ็นต์ sshs) ซึ่งจะถูกส่งต่อไปยังพอร์ตบนเครื่องปลายทาง

ในการส่งต่อเซิร์ฟเวอร์ SSH ประเภทนี้จะรับฟังพอร์ตที่กำหนดและทำการเชื่อมต่อกับพอร์ตนั้นไปยังพอร์ตที่ระบุบนไคลเอนต์ SSH ในพื้นที่ซึ่งจะเชื่อมต่อกับพอร์ตบนเครื่องปลายทาง เครื่องปลายทางสามารถเป็นเครื่องท้องถิ่นหรือเครื่องอื่น ๆ

ใน Linux, macOS และระบบ Unix อื่น ๆ เพื่อสร้างการส่งต่อพอร์ตระยะไกลผ่านตัวเลือก -R ไปยังไคลเอ็นต์ ssh :

ssh -R REMOTE_PORT:DESTINATION:DESTINATION_PORT SSH_SERVER

ตัวเลือกที่ใช้มีดังนี้:

  • REMOTE_PORT - IP และหมายเลขพอร์ตบนเซิร์ฟเวอร์ SSH ระยะไกล REMOTE ว่างเปล่าหมายความว่าเซิร์ฟเวอร์ SSH ระยะไกลจะเชื่อมโยงกับทุกอินเตอร์เฟส DESTINATION:DESTINATION_PORT - IP หรือชื่อโฮสต์และพอร์ตของเครื่องปลายทาง SERVER_IP - ผู้ใช้ SSH ระยะไกลและที่อยู่ IP ของเซิร์ฟเวอร์

การส่งต่อพอร์ตท้องถิ่นส่วนใหญ่จะใช้เพื่อให้การเข้าถึงบริการภายในให้กับใครบางคนจากภายนอก

สมมติว่าคุณกำลังพัฒนาเว็บแอปพลิเคชันในเครื่องของคุณและคุณต้องการแสดงตัวอย่างให้กับนักพัฒนาของคุณ คุณไม่มี IP สาธารณะดังนั้นผู้พัฒนารายอื่นจึงไม่สามารถเข้าถึงแอปพลิเคชันผ่านอินเทอร์เน็ต

ssh -L 8080:127.0.0.1:3000 -N -f [email protected]

คำสั่งด้านบนจะทำให้เซิร์ฟเวอร์ ssh ฟังพอร์ต 8080 และรับส่งข้อมูลทั้งหมดจากพอร์ตนี้ไปยังเครื่องท้องถิ่นของคุณที่พอร์ต 3000

ตอนนี้ผู้พัฒนาเพื่อนของคุณสามารถพิมพ์ the_ssh_server_ip:8080 ในเบราว์เซอร์ของเขา / เธอและดูตัวอย่างแอปพลิเคชันที่ยอดเยี่ยม

การส่งต่อพอร์ตแบบไดนามิก

การส่งต่อพอร์ตแบบไดนามิกช่วยให้คุณสร้างซ็อกเก็ตบนเครื่องโลคัล (ssh ไคลเอ็นต์) ซึ่งทำหน้าที่เป็นพร็อกซีเซิร์ฟเวอร์ SOCKS เมื่อไคลเอ็นต์เชื่อมต่อกับพอร์ตนี้การเชื่อมต่อจะถูกส่งต่อไปยังเครื่องระยะไกล (เซิร์ฟเวอร์ ssh) ซึ่งจะถูกส่งต่อไปยังพอร์ตแบบไดนามิกบนเครื่องปลายทาง

ด้วยวิธีนี้แอปพลิเคชันทั้งหมดที่ใช้พร็อกซี SOCKS จะเชื่อมต่อกับเซิร์ฟเวอร์ SSH และเซิร์ฟเวอร์จะส่งต่อการรับส่งข้อมูลทั้งหมดไปยังปลายทางที่แท้จริง

ใน Linux, macOS และระบบ Unix อื่น ๆ เพื่อสร้างการส่งต่อพอร์ตแบบไดนามิก (SOCKS) ผ่านตัวเลือก -D ไปยังไคลเอ็นต์ ssh :

ssh -D LOCAL_PORT SSH_SERVER

ตัวเลือกที่ใช้มีดังนี้:

  • LOCAL_PORT - IP ของเครื่องโลคัลและหมายเลขพอร์ต เมื่อ LOCAL_IP ถูกละไว้ไคลเอ็นต์ ssh ผูกบน localhost SERVER_IP - ผู้ใช้ SSH ระยะไกลและที่อยู่ IP ของเซิร์ฟเวอร์

ตัวอย่างทั่วไปของการส่งต่อพอร์ตแบบไดนามิกคือการส่งสัญญาณปริมาณการใช้เว็บเบราว์เซอร์ผ่านเซิร์ฟเวอร์ SSH

คำสั่งต่อไปนี้จะสร้างอุโมงค์ SOCKS บนพอร์ต 9090 :

ssh -D 9090 -N -f [email protected]

เมื่อสร้าง tunneling แล้วคุณสามารถกำหนดค่าแอปพลิเคชันของคุณเพื่อใช้งานได้ บทความนี้จะอธิบายวิธีกำหนดค่าเบราว์เซอร์ Firefox และ Google Chrome ให้ใช้พร็อกซี SOCKS

การส่งต่อพอร์ตจะต้องมีการกำหนดค่าแยกต่างหากสำหรับแต่ละแอปพลิเคชันที่คุณต้องการใช้ช่องทางการรับส่งข้อมูลที่คิด

ตั้งค่า SSH Tunneling ใน Windows

ผู้ใช้ Windows สามารถสร้างอุโมงค์ SSH โดยใช้ PuTTY SSH ไคลเอ็นต์ คุณสามารถดาวน์โหลด PuTTY ได้ที่นี่

  1. เรียกใช้ Putty และป้อนที่อยู่ IP ของเซิร์ฟเวอร์ SSH ในฟิลด์ Host name (or IP address)

    หน้าต่างใหม่ที่ขอชื่อผู้ใช้และรหัสผ่านของคุณจะปรากฏขึ้น เมื่อคุณป้อนชื่อผู้ใช้และรหัสผ่านคุณจะเข้าสู่เซิร์ฟเวอร์ของคุณและอุโมงค์ SSH จะเริ่มขึ้น

    การตั้งค่าการตรวจสอบกุญแจสาธารณะจะช่วยให้คุณเชื่อมต่อกับเซิร์ฟเวอร์ของคุณโดยไม่ต้องป้อนรหัสผ่าน

ข้อสรุป

เราได้แสดงวิธีการตั้งค่าอุโมงค์ SSH และส่งต่อการจราจรผ่านการเชื่อมต่อ SSH ที่ปลอดภัย เพื่อความสะดวกในการใช้งานคุณสามารถกำหนดอุโมงค์ SSH ในไฟล์กำหนดค่า SSH ของคุณหรือสร้างนามแฝง Bash ที่จะตั้งค่าอุโมงค์ SSH

ความปลอดภัยของ ssh