Clear
Lead Graphic Papers

เชื่อมต่ออย่างปลอดภัยด้วย SSH Tunnel

ผู้เขียน: วิศัลย์ ประสงค์สุข
วันที่เผยแพร่: 29 พ.ย. 2554
ปรับปรุงล่าสุด: 29 พ.ย. 2554

Share on Facebook Share on Twitter Share on Google+

การใช้งานอินเทอร์เน็ตจากผู้ให้บริการเครือข่ายไร้สายสาธารณะ (Wi-Fi) หรือจากผู้ให้บริการร้านอินเทอร์เน็ตคาเฟ่ทั่วไป ล้วนแล้วแต่เป็นการเชื่อมต่อบนเครือข่ายที่ไม่ปลอดภัยและมีความเสี่ยงต่อการถูกผู้ไม่หวังดีหรืออาจหมายถึงผู้ให้บริการเองในการลักลอบขโมยข้อมูลการใช้งานของผู้ใช้บนเครือข่ายนั้นๆ เช่น การดักจับข้อมูลรหัสผ่านที่ผู้ใช้ส่งผ่านเครือข่ายไร้สายสาธารณะ เป็นต้น ซึ่งในเวลาต่อมาได้มีการพัฒนารูปแบบการเชื่อมต่อที่มีความสามารถในการทำให้การเข้าใช้งานระบบบนเครือข่ายใดๆ มีการรักษาความปลอดภัยในการรับส่งข้อมูล โดยหนึ่งในวิธีที่ผู้ดูแลระบบสามารถนำมาประยุกต์และปรับใช้ในการทำงาน เพื่อทำให้การรับส่งข้อมูลบนเครือข่ายมีความปลอดภัยคือ การสร้างช่องทางการรับส่งข้อมูลเฉพาะที่เรียกว่า Tunnel ผ่านโพรโทคอล SSH (Secure Shell) ที่มีรูปแบบการสื่อสารที่มีมาตรการรักษาความปลอดภัยของข้อมูลด้วยการเข้ารหัสลับข้อมูล โดย SSH Tunnel มีชื่อเรียกอีกชื่อหนึ่งว่า SSH Port Forward เนื่องจากมีการทำงานลักษณะเดียวกับ Port Forward ซึ่งใช้กำหนดเส้นทางการรับส่งข้อมูลระหว่างเครือข่ายภายนอก (WAN) กับเครือข่ายภายใน (LAN) โดยปกติการใช้งาน Port Forward จะนิยมใช้ในฟังก์ชันการทำงานของอุปกรณ์ Router เพื่อให้เครื่องคอมพิวเตอร์จากเครือข่ายอินเทอร์เน็ต สามารถเชื่อมต่อมายังเครือข่ายภายใน Router ดังกล่าว โดยสามารถระบุช่องทางการเชื่อมต่อแยกแต่ละ Port ได้ดังรูปที่ 1

รูปที่ 1 แสดงให้เห็นถึงเส้นทางการรับส่งข้อมูลเมื่อมีการใช้ฟังก์ชัน Port Forward ในอุปกรณ์ Router

รูปแบบการสร้างการเชื่อมต่อของ SSH Tunnel สามารถทำได้ 2 แบบคือ Local Port Forward และ Remote Port Forward [1] ซึ่งจะกล่าวถึงในหัวข้อถัดไป โดยการใช้งาน SSH Tunnel ผู้ใช้จะต้องติดตั้งโปรแกรม SSH Client ลงในเครื่องคอมพิวเตอร์ ซึ่งในระบบปฏิบัติการลินุกซ์ส่วนใหญ่ จะมีการติดตั้งโปรแกรม OpenSSH-Client มาพร้อมกับระบบอยู่แล้ว ส่วนในระบบปฏิบัติการวินโดวส์ ผู้ใช้สามารถดาวน์โหลดและติดตั้งโปรแกรมชื่อ PuTTY [2] ซึ่งทำงานในลักษณะ SSH Client เช่นกัน แต่ในบทความนี้จะขอแสดงวิธีการทำ SSH Tunnel โดยใช้โปรแกรม OpenSSH-Client

การทำ Local Port Forward และ Remote Port Forward

จำลองระบบดังนี้

เครือข่าย

คอมพิวเตอร์

Web Server

SSH Server

SSH Client

A

Com1

/

/

Com2

/

/

/

B

Com3

/

/

Com4

/

/

หมายเหตุ

1. คอมพิวเตอร์ภายในเครือข่ายเดียวกันสามารถเชื่อมต่อกันได้

2. Com2 และ Com3 เชื่อมต่อกันได้ผ่านอินเทอร์เน็ต

รูปที่ 2 สภาพแวดล้อมของระบบ

1. Local Port Forward

หรือเรียกอีกชื่อหนึ่งว่า Outgoing Tunnels เป็นการกำหนดช่องทางการเชื่อมต่อจากเครือข่ายต้นทางไปยังเครือข่ายปลายทางผ่าน Port ที่กำหนด ใช้เมื่อต้องการให้เครื่องคอมพิวเตอร์ที่อยู่ในเครือข่ายต้นทางสามารถเชื่อมต่อผ่าน Tunnel ไปยังเครื่องคอมพิวเตอร์ที่อยู่ในเครือข่ายปลายทาง โดยเครื่องคอมพิวเตอร์ที่ใช้สร้าง Tunnel หรือเครื่องคอมพิวเตอร์ต้นทาง จะต้องเชื่อมต่อและยืนยันสิทธิ์ผ่านเครื่อง SSH Server ที่เครือข่ายปลายทาง และกำหนดค่า Port ที่จะเชื่อมระหว่างเครือข่ายทั้งสอง ผู้ใช้สามารถทำ Local Port Forward ได้โดยใช้คำสั่งซึ่งมีรูปแบบดังนี้

ssh -L local_listen_port:destination_host:destination_port user@hostname โดยที่

สัญลักษณ์

ความหมาย

-L กำหนดให้เครื่อง SSH Server ทำ Local Port Forward
local_listen_port กำหนดให้เครื่อง SSH Server ทราบว่าหากมีการเชื่อมต่อเข้ามาที่ Port ที่กำหนด ให้ส่งต่อไปยัง destination_port ของเครื่องเป้าหมาย
destination_host กำหนดให้เครื่อง SSH Server ทราบว่าเครื่องคอมพิวเตอร์เครื่องใดเป็นเครื่องเป้าหมายของผู้ใช้
destination_port กำหนดให้เครื่องให้บริการ SSH ทราบว่าผู้ใช้ต้องการส่งต่อการเชื่อมต่อเข้าสู่ Port ใดของเครื่องเป้าหมาย
user@hostname ชื่อผู้ใช้และเครื่อง SSH Server ที่ใช้งาน

ตัวอย่างการใช้งาน Local Port Forward

ในกรณีผู้ใช้อยู่ที่ Com2 ต้องการเข้าถึง Web Server (Port 80) ของเครื่อง Com3 สามารถใช้คำสั่งได้ดังนี้

ssh -L 8080:164.115.4.3:80 user1@164.115.4.3

คำสั่งนี้หมายความว่าให้ใช้สิทธิของ user1 บน SSH Server (Com3) เพื่อส่งต่อการเชื่อมต่อจาก Port 8080 ของเครื่อง Com2 ไปยัง Port 80 ของเครื่อง Com3 สามารถแสดงแบบจำลองการเชื่อมต่อได้ดังรูปที่ 3 ผู้ใช้สามารถเข้าถึงเว็บไซต์ของ Com3 ได้โดยพิมพ์ URL: http://164.115.4.3:8080 ที่เว็บเบราว์เซอร์

รูปที่ 3 แบบจำลองการเชื่อมต่อจากคำสั่ง ssh -L 8080:164.115.4.3:80 user1@164.115.4.3

ในกรณีผู้ใช้อยู่ที่ Com2 ต้องการเข้าถึง Web Server ของเครื่อง Com4 สามารถใช้คำสั่งได้ดังนี้

ssh -L 8080:172.24.1.5:80 user1@164.115.4.3

คำสั่งนี้หมายความว่าให้ใช้สิทธิของ user1 บน SSH Server (Com3) เพื่อส่งต่อการเชื่อมต่อจาก Port 8080 ของเครื่อง Com2 ไปยัง Port 80 ของเครื่อง Com4 สามารถแสดงแบบจำลองการเชื่อมต่อได้ดังรูปที่ 4 ผู้ใช้สามารถเข้าถึงเว็บไซต์ของ Com4 ได้โดยพิมพ์ URL: http://164.115.4.3:8080 ที่เว็บเบราว์เซอร์

รูปที่ 4 แบบจำลองการเชื่อมต่อจากคำสั่ง ssh -L 8080:172.25.1.5:80 user1@164.115.4.3

2. Remote Port Forward

หรือเรียกอีกชื่อหนึ่งว่า Incoming Tunnels มีการทำงานและวัตถุประสงค์ที่ตรงข้ามกับ Local Port Forward กล่าวคือเป็นการกำหนดช่องทางการเชื่อมต่อจากเครือข่ายปลายทางกลับมายังเครือข่ายต้นทางผ่าน Port ที่กำหนด ใช้เมื่อต้องการให้เครื่องคอมพิวเตอร์ที่อยู่ในเครือข่ายปลายทางสามารถเชื่อมต่อผ่าน Tunnel กลับมายังเครื่องคอมพิวเตอร์ที่อยู่ในเครือข่ายต้นทาง โดยเครื่องคอมพิวเตอร์ที่ใช้สร้าง Tunnel หรือเครื่องคอมพิวเตอร์ต้นทาง จะต้องเชื่อมต่อและยืนยันสิทธิ์ผ่านเครื่อง SSH Server ที่เครือข่ายปลายทาง และกำหนดค่า Port ที่จะเชื่อมระหว่างเครือข่ายทั้งสอง ผู้ใช้สามารถทำ Remote Port Forward ได้โดยใช้คำสั่งซี่งมีรูปแบบดังนี้

ssh -R remote_listen_port:destination_host:destination_port user@hostname โดยที่

สัญลักษณ์

ความหมาย

- R กำหนดให้เครื่อง SSH Server ทำ Remote Port Forward
remote_listen_port กำหนดให้เครื่อง SSH Server ทราบว่าหากมีการเชื่อมต่อเข้ามาที่ Port ที่กำหนดให้ส่งต่อไปยัง destination_port ของเครื่องเป้าหมาย
destination_host กำหนดให้เครื่อง SSH Server ทราบว่าเครื่องคอมพิวเตอร์เครื่องใดเป็นเครื่องเป้าหมายของผู้ใช้
destination_port กำหนดให้เครื่อง SSH Server ทราบว่าหากมีการเชื่อมต่อเข้ามาที่ Port นี้ ให้ส่งต่อการเชื่อมต่อไปยัง remote_listen_port
user@hostname ชื่อผู้ใช้และเครื่อง SSH Server ที่ใช้งาน

ตัวอย่างการใช้งาน Remote Port Forward

ในกรณีผู้ใช้ต้องการแสดงหน้าเว็บไซต์ภายใน Web Server ของ Com2 ให้บุคคลภายนอกเครือข่าย A เห็น ผู้ใช้สามารถใช้คำสั่งต่อไปนี้ที่ Com2 ได้

ssh -R 8080:122.248.233.17:80 user1@164.115.4.3

โดยคำสั่งนี้เป็นการบอกให้ SSH Server (Com3) ทราบว่าหากมีการติดต่อเข้ามาที่ Port 8080 ให้ทำการส่งต่อการเชื่อมต่อไปยัง Port 80 ของเครื่อง Com2 สามารถแสดงแบบจำลองการเชื่อมต่อได้ดังรูปที่ 5

รูปที่ 5 แบบจำลองการเชื่อมต่อจากคำสั่ง ssh -R 8080:122.248.233.17:80 user1@164.115.4.3

ในกรณีผู้ใช้ต้องการแสดงหน้าเว็บไซต์ภายใน Web Server ของ Com1 ให้บุคคลภายนอกเครือข่าย A เห็น ผู้ใช้สามารถใช้คำสั่งต่อไปนี้ที่ Com2 ได้

ssh -R 8080:192.168.1.5:80 user1@164.115.4.3

โดยคำสั่งนี้เป็นการบอกให้ SSH Server (Com3) ทราบว่าหากมีการติดต่อเข้ามาที่ Port 8080 ให้ทำการส่งต่อการเชื่อมต่อไปยัง Port 80 ของเครื่อง Com1 สามารถแสดงแบบจำลองการเชื่อมต่อได้ดังรูปที่ 6

รูปที่ 6 แบบจำลองการเชื่อมต่อจากคำสั่ง ssh -R 8080:192.168.1.5:80 user1@164.115.4.3

จะเห็นได้ว่า การเชื่อมต่อผ่าน SSH Tunnel สามารถทำได้ง่ายและทำให้การรับส่งข้อมูลมีความมั่นคงปลอดภัย แต่อย่างไรก็ตามการใช้งาน SSH Tunnel ควรมีการกำหนดการเข้าใช้อย่างระมัดระวัง เนื่องจากการเชื่อมต่อผ่าน SSH ผู้เชื่อมต่อจะได้รับสิทธิของผู้ใช้ในระบบของเครื่องปลายทาง ซึ่งหากสิทธิการใช้งานดังกล่าวถูกกำหนดไว้แบบไม่ระมัดระวัง ก็อาจเกิดความเสียหายต่อระบบได้หากผู้ไม่หวังดีสามารถล่วงรู้ข้อมูลที่ใช้ในการเชื่อมต่อเข้าสู่ SSH Server เช่น หมายเลข IP, Username หรือ Password

อ้างอิง

[1] http://www.debianadmin.com/howto-use-ssh-local-and-remote-port-forwarding.html
[2] http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

Clear