วิธีการใช้ SSH Tunneling เพื่อเข้าถึงเซิร์ฟเวอร์ที่ถูก จำกัด และเรียกดูอย่างปลอดภัย
ไคลเอ็นต์ SSH เชื่อมต่อกับเซิร์ฟเวอร์ Secure Shell ซึ่งอนุญาตให้คุณเรียกใช้คำสั่งเทอร์มินัลราวกับว่าคุณกำลังนั่งอยู่หน้าคอมพิวเตอร์เครื่องอื่น แต่ไคลเอนต์ SSH ยังช่วยให้คุณ "อุโมงค์" พอร์ตระหว่างระบบภายในเครื่องของคุณและเซิร์ฟเวอร์ SSH ระยะไกล.
การขุดอุโมงค์ SSH มีสามประเภทที่แตกต่างกันและพวกมันใช้เพื่อจุดประสงค์ที่แตกต่างกัน แต่ละอันเกี่ยวข้องกับการใช้เซิร์ฟเวอร์ SSH เพื่อเปลี่ยนเส้นทางการรับส่งข้อมูลจากพอร์ตเครือข่ายหนึ่งไปยังอีกพอร์ตหนึ่ง การรับส่งข้อมูลจะถูกส่งผ่านการเชื่อมต่อ SSH ที่เข้ารหัสดังนั้นจึงไม่สามารถตรวจสอบหรือแก้ไขได้ในระหว่างการขนส่ง.
คุณสามารถทำได้ด้วย SSH
คำสั่งรวมอยู่ใน Linux, macOS และระบบปฏิบัติการอื่น ๆ ที่คล้าย UNIX บน Windows ซึ่งไม่รวมคำสั่ง ssh ในตัวเราขอแนะนำ PuTTY เครื่องมือฟรีเพื่อเชื่อมต่อกับเซิร์ฟเวอร์ SSH รองรับการขุดอุโมงค์ SSH ด้วย.
การส่งต่อพอร์ตท้องถิ่น: ทำให้ทรัพยากรระยะไกลสามารถเข้าถึงได้บนระบบท้องถิ่นของคุณ
“ การส่งต่อพอร์ตท้องถิ่น” ช่วยให้คุณเข้าถึงทรัพยากรเครือข่ายท้องถิ่นที่ไม่ได้เชื่อมต่ออินเทอร์เน็ต ตัวอย่างเช่นสมมติว่าคุณต้องการเข้าถึงเซิร์ฟเวอร์ฐานข้อมูลที่สำนักงานของคุณจากที่บ้าน เพื่อเหตุผลด้านความปลอดภัยเซิร์ฟเวอร์ฐานข้อมูลนั้นได้รับการกำหนดค่าให้ยอมรับการเชื่อมต่อจากเครือข่ายสำนักงานในท้องถิ่นเท่านั้น แต่ถ้าคุณเข้าถึงเซิร์ฟเวอร์ 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 คือ ผมบ๊อบ
. ในกรณีนั้นคำสั่งของคุณจะเป็นดังนี้:
ssh -L 8888: 192.168.1.111: 1234 [email protected]
หลังจากรันคำสั่งนั้นคุณจะสามารถเข้าถึงเซิร์ฟเวอร์ฐานข้อมูลที่พอร์ต 8888 ที่ localhost ดังนั้นหากเซิร์ฟเวอร์ฐานข้อมูลให้การเข้าถึงเว็บคุณสามารถเสียบ http: // 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> อุโมงค์ เลือกตัวเลือก“ ท้องถิ่น” สำหรับ“ พอร์ตต้นทาง” ให้ป้อนพอร์ตท้องถิ่น สำหรับ“ ปลายทาง” ให้ป้อนที่อยู่ปลายทางและพอร์ตในรูปแบบ remote_address: remote_port.
ตัวอย่างเช่นหากคุณต้องการตั้งค่าอุโมงค์ SSH เดียวกันกับด้านบนคุณจะต้องป้อน 8888
เป็นพอร์ตต้นทางและ localhost: 1234
เป็นปลายทาง คลิก“ เพิ่ม” หลังจากนั้นคลิก“ เปิด” เพื่อเปิดการเชื่อมต่อ SSH คุณจะต้องป้อนที่อยู่และพอร์ตของเซิร์ฟเวอร์ SSH บนหน้าจอ "เซสชัน" หลักก่อนที่จะเชื่อมต่อ.
การส่งต่อพอร์ตระยะไกล: ทำให้ทรัพยากรท้องถิ่นสามารถเข้าถึงได้บนระบบระยะไกล
“ การส่งต่อพอร์ตระยะไกล” เป็นสิ่งที่ตรงกันข้ามกับการส่งต่อภายในและไม่ได้ใช้บ่อย ช่วยให้คุณสามารถสร้างทรัพยากรบนพีซีในพื้นที่ของคุณบนเซิร์ฟเวอร์ SSH ตัวอย่างเช่นสมมติว่าคุณกำลังใช้งานเว็บเซิร์ฟเวอร์บนพีซีท้องถิ่นที่คุณกำลังนั่งอยู่หน้า แต่พีซีของคุณอยู่หลังไฟร์วอลล์ที่ไม่อนุญาตการรับส่งข้อมูลเข้าสู่ซอฟต์แวร์เซิร์ฟเวอร์.
สมมติว่าคุณสามารถเข้าถึงเซิร์ฟเวอร์ SSH ระยะไกลคุณสามารถเชื่อมต่อกับเซิร์ฟเวอร์ SSH นั้นและใช้การส่งต่อพอร์ตระยะไกล ไคลเอ็นต์ SSH ของคุณจะบอกเซิร์ฟเวอร์ให้ส่งต่อพอร์ตที่ระบุพอร์ต 1234-on บนเซิร์ฟเวอร์ 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 ไคลเอ็นต์ SSH จะสร้างพร็อกซี SOCKS ที่คุณสามารถกำหนดค่าแอปพลิเคชันที่จะใช้ ปริมาณการใช้งานทั้งหมดที่ส่งผ่านพร็อกซีจะถูกส่งผ่านเซิร์ฟเวอร์ SSH สิ่งนี้คล้ายกับการส่งต่อโลคัล - ใช้การรับส่งข้อมูลภายในเครื่องที่ส่งไปยังพอร์ตเฉพาะบนพีซีของคุณและส่งผ่านการเชื่อมต่อ SSH ไปยังตำแหน่งที่ตั้งระยะไกล.
ตัวอย่างเช่นสมมติว่าคุณกำลังใช้เครือข่าย 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 คือ ผมบ๊อบ
. คุณต้องการใช้การส่งต่อแบบไดนามิกเพื่อเปิดพร็อกซี 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 เพื่อใช้พร็อกซี SOCKS สิ่งนี้มีประโยชน์อย่างยิ่งเนื่องจาก Firefox สามารถตั้งค่าพร็อกซีของตนเองและไม่จำเป็นต้องใช้การตั้งค่าพร็อกซีทั้งระบบ Firefox จะส่งทราฟฟิกผ่านอุโมงค์ SSH ในขณะที่แอปพลิเคชันอื่นจะใช้การเชื่อมต่ออินเทอร์เน็ตของคุณตามปกติ.
เมื่อทำสิ่งนี้ใน Firefox เลือก“ กำหนดค่าพร็อกซีด้วยตนเอง” ป้อน“ 127.0.0.1” ลงในกล่องโฮสต์ SOCKS และป้อนพอร์ตแบบไดนามิกในช่อง“ พอร์ต” ปล่อยให้ HTTP Proxy, SSL Proxy และ FTP Proxy ว่างเปล่า.
ช่องสัญญาณจะยังคงเปิดใช้งานและเปิดตราบใดที่คุณมีการเชื่อมต่อเซสชัน SSH เปิด เมื่อคุณจบเซสชัน SSH ของคุณและยกเลิกการเชื่อมต่อจากเซิร์ฟเวอร์ช่องสัญญาณจะถูกปิดเช่นกัน เพียงเชื่อมต่อใหม่ด้วยคำสั่งที่เหมาะสม (หรือตัวเลือกที่เหมาะสมใน PuTTY) เพื่อเปิดอุโมงค์อีกครั้ง.