วิธีใช้ SSH Tunneling เพื่อเข้าถึงเซิร์ฟเวอร์ที่ถูก จำกัด และเรียกดูอย่างปลอดภัย

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

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

คุณสามารถทำได้โดยใช้sshคำสั่งที่รวมอยู่ใน Linux, macOS และระบบปฏิบัติการอื่น ๆ ที่คล้ายกับ UNIX บน Windows ซึ่งไม่มีคำสั่ง ssh ในตัวเราขอแนะนำเครื่องมือฟรี PuTTY เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ SSH รองรับ SSH tunneling ด้วย

การส่งต่อพอร์ตภายในเครื่อง: ทำให้ทรัพยากรระยะไกลสามารถเข้าถึงได้บนระบบท้องถิ่นของคุณ

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

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

หากต้องการใช้การส่งต่อภายในให้เชื่อมต่อกับเซิร์ฟเวอร์ SSH ตามปกติ แต่ยังระบุ-Lอาร์กิวเมนต์ด้วย ไวยากรณ์คือ:

ssh -L local_port: remote_address: remote_port [email protected]

ตัวอย่างเช่นสมมติว่าเซิร์ฟเวอร์ฐานข้อมูลที่สำนักงานของคุณอยู่ที่ 192.168.1.111 บนเครือข่ายสำนักงาน คุณมีการเข้าถึงเซิร์ฟเวอร์ SSH สำนักงานที่ssh.youroffice.comและบัญชีผู้ใช้ของคุณบนเซิร์ฟเวอร์ SSH bobคือ ในกรณีนั้นคำสั่งของคุณจะมีลักษณะดังนี้:

ssh -L 8888: 192.168.1.111: 1234 [email protected]

หลังจากเรียกใช้คำสั่งนั้นคุณจะสามารถเข้าถึงเซิร์ฟเวอร์ฐานข้อมูลที่พอร์ต 8888 ที่ localhost ดังนั้นหากเซิร์ฟเวอร์ฐานข้อมูลเสนอการเข้าถึงเว็บคุณสามารถเสียบ // localhost: 8888 เข้ากับเว็บเบราว์เซอร์ของคุณเพื่อเข้าถึงได้ หากคุณมีเครื่องมือบรรทัดคำสั่งที่ต้องการที่อยู่เครือข่ายของฐานข้อมูลให้ชี้ไปที่ localhost: 8888 การรับส่งข้อมูลทั้งหมดที่ส่งไปยังพอร์ต 8888 บนพีซีของคุณจะปรับเป็น 192.168.1.111:1234 บนเครือข่ายสำนักงาน

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

ในกรณีนี้คุณสามารถเรียกใช้คำสั่งดังต่อไปนี้:

ssh -L 8888: localhost: 1234 [email protected]

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

ในการดำเนินการนี้ในแอปพลิเคชัน PuTTY บน Windows ให้เลือกการเชื่อมต่อ> SSH> อุโมงค์ เลือกตัวเลือก "ท้องถิ่น" สำหรับ "พอร์ตต้นทาง" ให้ป้อนพอร์ตภายในเครื่อง สำหรับ“ Destination” ให้ป้อนที่อยู่ปลายทางและพอร์ตในรูปแบบ remote_address: remote_port

ตัวอย่างเช่นหากคุณต้องการตั้งค่าอุโมงค์ SSH เดียวกันกับด้านบนคุณจะต้องป้อน8888เป็นพอร์ตต้นทางและlocalhost:1234เป็นปลายทาง คลิก“ เพิ่ม” หลังจากนั้นคลิก“ เปิด” เพื่อเปิดการเชื่อมต่อ SSH คุณจะต้องป้อนที่อยู่และพอร์ตของเซิร์ฟเวอร์ SSH ในหน้าจอหลัก“ เซสชัน” ก่อนที่จะเชื่อมต่อแน่นอน

การส่งต่อพอร์ตระยะไกล: ทำให้ทรัพยากรในเครื่องสามารถเข้าถึงได้บนระบบระยะไกล

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

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

หากต้องการใช้การส่งต่อระยะไกลให้ใช้sshคำสั่งกับ-Rอาร์กิวเมนต์ ไวยากรณ์ส่วนใหญ่เหมือนกับการส่งต่อภายในเครื่อง:

ssh -R remote_port: local_address: local_port [email protected]

สมมติว่าคุณต้องการให้แอปพลิเคชันเซิร์ฟเวอร์ฟังที่พอร์ต 1234 บนพีซีในพื้นที่ของคุณที่พอร์ต 8888 บนเซิร์ฟเวอร์ SSH ระยะไกล ที่อยู่เซิร์ฟเวอร์ SSH เป็นssh.youroffice.comและชื่อผู้ใช้ของคุณบนเซิร์ฟเวอร์ SSH คือบ๊อบ คุณเรียกใช้คำสั่งต่อไปนี้:

ssh -R 8888: localhost: 1234 [email protected]

จากนั้นใครบางคนสามารถเชื่อมต่อกับเซิร์ฟเวอร์ SSH ที่พอร์ต 8888 และการเชื่อมต่อนั้นจะถูกจูนไปยังแอปพลิเคชันเซิร์ฟเวอร์ที่ทำงานที่พอร์ต 1234 บนเครื่องพีซีที่คุณสร้างการเชื่อมต่อ

หากต้องการทำสิ่งนี้ใน PuTTY บน Windows ให้เลือกการเชื่อมต่อ> SSH> อุโมงค์ เลือกตัวเลือก“ รีโมท” สำหรับ“ พอร์ตต้นทาง” ให้ป้อนพอร์ตระยะไกล สำหรับ“ ปลายทาง” ให้ป้อนที่อยู่ปลายทางและพอร์ตในรูปแบบ local_address: local_port

ตัวอย่างเช่นหากคุณต้องการตั้งค่าตัวอย่างข้างต้นคุณจะต้องป้อน8888เป็นพอร์ตต้นทางและlocalhost:1234เป็นปลายทาง คลิก“ เพิ่ม” หลังจากนั้นคลิก“ เปิด” เพื่อเปิดการเชื่อมต่อ SSH คุณจะต้องป้อนที่อยู่และพอร์ตของเซิร์ฟเวอร์ SSH ในหน้าจอหลัก“ เซสชัน” ก่อนที่จะเชื่อมต่อแน่นอน

จากนั้นผู้คนสามารถเชื่อมต่อกับพอร์ต 8888 บนเซิร์ฟเวอร์ SSH และทราฟฟิกของพวกเขาจะถูกปรับไปที่พอร์ต 1234 ในระบบภายในของคุณ

ตามค่าเริ่มต้นเซิร์ฟเวอร์ SSH ระยะไกลจะรับฟังการเชื่อมต่อจากโฮสต์เดียวกันเท่านั้น กล่าวอีกนัยหนึ่งเฉพาะคนที่อยู่ในระบบเดียวกับเซิร์ฟเวอร์ SSH เท่านั้นที่จะสามารถเชื่อมต่อได้ นี่คือเหตุผลด้านความปลอดภัย คุณจะต้องเปิดใช้งานตัวเลือก“ GatewayPorts” ใน sshd_config บนเซิร์ฟเวอร์ SSH ระยะไกลหากคุณต้องการลบล้างพฤติกรรมนี้

การส่งต่อพอร์ตแบบไดนามิก: ใช้เซิร์ฟเวอร์ SSH ของคุณเป็นพร็อกซี

ที่เกี่ยวข้อง: อะไรคือความแตกต่างระหว่าง VPN และพร็อกซี?

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

ที่เกี่ยวข้อง: เหตุใดการใช้เครือข่าย Wi-Fi สาธารณะอาจเป็นอันตรายได้แม้ว่าจะเข้าถึงเว็บไซต์ที่เข้ารหัสก็ตาม

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

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

ในการใช้การส่งต่อแบบไดนามิกให้รันคำสั่ง ssh ด้วย-Dอาร์กิวเมนต์ดังนี้:

ssh -D local_port [email protected]

ตัวอย่างเช่นสมมติว่าคุณมีการเข้าถึงไปยังเซิร์ฟเวอร์ SSH ที่ssh.yourhome.comและชื่อผู้ใช้ของคุณบนเซิร์ฟเวอร์ SSH bobคือ คุณต้องการใช้การส่งต่อแบบไดนามิกเพื่อเปิดพร็อกซี SOCKS ที่พอร์ต 8888 บนพีซีปัจจุบัน คุณเรียกใช้คำสั่งต่อไปนี้:

ssh -D 8888 [email protected]

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

หากต้องการทำสิ่งนี้ใน PuTTY บน Windows ให้เลือกการเชื่อมต่อ> SSH> อุโมงค์ เลือกตัวเลือก“ ไดนามิก” สำหรับ "พอร์ตต้นทาง" ให้ป้อนพอร์ตภายในเครื่อง

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

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

ที่เกี่ยวข้อง: วิธีกำหนดค่าพร็อกซีเซิร์ฟเวอร์ใน Firefox

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

เมื่อทำสิ่งนี้ใน Firefox ให้เลือก“ การกำหนดค่าพร็อกซีด้วยตนเอง” ป้อน“ 127.0.0.1” ลงในกล่องโฮสต์ SOCKS และป้อนพอร์ตไดนามิกลงในช่อง“ พอร์ต” เว้นช่อง HTTP Proxy, SSL Proxy และ FTP Proxy ว่างไว้

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