เพิ่มความปลอดภัยให้กับ FTP ด้วย SSH


เพิ่มความปลอดภัยให้กับ FTP ด้วย SSH

เพิ่มความปลอดภัยให้กับ FTP ด้วย SSH

FTP (File Transfer Protocol) นิยมใ้ช้งานสำหรับการถ่ายโอนไฟล์ระหว่าง machine  แต่ก็รู้กันดีว่าเป็นระบบที่ไม่มีความปลอดภัย มีเรื่องหลักที่เกี่ยวพันกับ FTP สองประการคือ ประการแรก ทั้งรหัสผ่านและข้อมูลของคุณที่วิ่งอยู่บนเครือข่ายเป็น clear text ซึ่งหมายความว่าคนอื่นสามารถใ้ช้เครื่องมือสำหรับการดักจับทราฟฟิกของเครือข่ายมาอ่านได้ ประการที่สอง Server ที่รับทรากฟิกของ FTP โดยตรงจะมีการเปิดพอร์ตของตัวเองที่อาจจะถูกโจมตีได้  ตัวอย่างเช่น  หลังจากที่มีการดักจับทราฟฟิกเครือข่ายของเราและถูกขโมยรหัสผ่านไปได้ ผู้บุกรุกสามารถใช้ FTP ในการอ่านไฟล์ต่าง ๆ บน Server ได้  หรือติดตั้งไฟล์ใหม่ที่มีอันตรายไว้บน Server

SSH ซึ่งย่อมาจาก Secure SHell เป็นโปรแกรมที่ถูกออกแบบเพื่อให้การเข้าถึง Server มีความปลอดภัย  โดยจะมีการเข้ารหัสการ authenticate (password) และข้อมูลก่อนที่จะส่งไปบนเครือข่าย และ SSH ยังถูกออกแบบให้ยากต่อการโจมตี  ซึ่งเราสามารถคอนฟิกให้ SSH จัดให้มีระบบ secure data channel ที่เรียกกันว่า tunnel และทำให้เราสามารถรันบริการที่ไม่ปลอดภัยอย่าง FTP ให้มีความปลอดภัยได้

การนำ SSH เพื่อทำให้เกิด secure version of FTP จะถูกเรียกว่า SFTP  และในฝั่งของ client ก็สามารถใช้ SFTP client เช่น WinSCP แต่แอพพลิเคชันบางอย่า่งเช่น web authoring software ที่มี FTP อยู่ในตัว (built-in FTP) อย่างเช่น Macromedia Dreamweaver หรืออื่น ๆ อาจจะไม่เข้ากันกับ SFTP ซึ่งในสถานะการณ์แบบนี้ การใช้ SSH เพื่อสร้างความปลอดภัยให้กับทราฟฟิก FTP อาจจะเป็นสิ่งไม่พึงปรารถนา

บริการ FTP จะไม่เหมือนกับบริการอื่น ๆ เช่นบริการที่สนับสนุนอีเมล์อย่า่ง POP, IMAP หรือ SMTP กล่าวคือ FTP จะใช้ช่องทาง (channel) สองช่องที่แน่นอน ซึ่งทำให้ยากมากขึ้นที่จะทำให้ปลอดภัยด้วย SSH อย่างไรก็ตาม ในบางสถานะการณ์ มีโอกาสเป็นไปได้ที่จะป้องกัน FTP link อย่างเต็มรูปแบบ  ในสถานะการณ์แบบนี้เป็นการป้องกันทั้งช่องควบคุม (control channel) ซึ่งเป็นตัวขนส่ง (carrier) รหัสผ่านและส่วนควบคุม และช่องข้อมูล (data channel)  ในการที่จะใช้วิธีดังกล่าวนี้ได้ จะต้องมีการจัดทำีคอนฟิกของ FTP Server ใหม่ (reconfigure) และต้องเป็นการใช้ FTP transfer เป็นแบบ Passive mode (เมื่อมีการใช้ SSH)

วิธีการทำ
FTP มีโหมดในการถ่ายโอนอยู่สองโหมด คือ Active mode และ Passive mode ซึ่งเป็นไปไม่ได้ที่จะป้องกันการเชื่อมต่อแบบ Active FTP ด้วย SSH แต่เป็นไปได้ที่จะป้องการการเชื่อมต่อแบบ Passive FTP ด้วยการบังคับพอร์ตที่ FTP ใช้  และทำการ Forwarding พอร์ตที่เป็นไปได้ทั้งหมด ด้วยการใช้ SSH ซึ่งโดยปกติ passive mode จะมีการทำงานเป็นดังรูป

ในกรณีนี้ ช่องควบคุม (control channel) จะถูกสร้างขึ้นมาอันดับแรกจาก client ไปยัง Server จากนั้น Server จะ response กลับไปยัง Client  ด้วยการบอกหมายเลขพอร์ตที่ใช้สำหรับ data channel   โดย control port และ data port (PASV) ทั้งหมด จะถูกเปิดที่ Firewall ของ Server ซึ่งเป็นการเปิดโอกาสสำหรับการโจมตี Server มากขึ้น และแน่นอนล่ะ ไม่มี channel ไหนที่มีการเข้ารหัส

วิธีการเพิ่มความปลอดภัยทำได้ด้วยการแทนที่ของเดิมคือ  ในขั้นแรกต้องสร้าง secure link ระหว่าง remote workstation กับ Server ด้วยการใช้ SSH   ซึ่งท่อ (tunnel) ที่ทะลุผ่านกันของ Link นี้ใช้ส่ง FTP traffic  ดังนั้น FTP data channel จะเชื่อมต่อกับพอร์ดใดพอร์ตหนึ่งจากช่วงของพอร์ตที่เป็นไปได้  ซี่ง SSH tunnels จะต้องถูกจัดหาสำหรับช่องของพอร์ตทั้งหมดที่เป็นไปได้  ซึ่งแน่นอนล่ะ  จะสามารถปฏิบัติจริงได้เฉพาะในกณีที่ช่วงของพอร์ตที่อนุญาตขนาดเล็กเท่านั้น ซึ่งหมายความว่าในกรณีที่ Server ต้องบริการ users พร้อมกันจำนวนมากจะไม่สามารถทำได้

การใช้ประโยชน์จากวิธีการที่กล่าวมานี้ จะใช้ได้เมื่อ SSH port มีการเปิดที่ Firewall เท่านั้นโดยไม่มีการใช้ FTP port  ซึ่งทั้ง control channel และ data channel จะมีการการเข้ารหัส (encrypted) อย่างเต็มรูปแบบ

ตัวอย่าง
Server จะต้องรันทั้ง FTP และ SSH daemon ตัวอย่างนี้สมมุติว่าเป็นการใช้ vsftp และ OpenSSH ในกรณีที่ใช้โปรแกรมอื่น ๆ ก็ต้องมีการปรับปรุงตามคำแนะนำที่จะกล่าวถึงต่อไปนี้  สมมุติว่า Server มีชื่อภายในเป็น "popeye" และมีชื่อสำหรับการ Access จาก Internet เป็น www.spinach.com เราจะต้องทำการคอนฟิก FTP Server (/etc/vsftp.conf หรือ /etc/vsftpd/vsftpd.conf) ดังนี้

  • กำหนดค่า pasv_enable=YES เพื่อสนับสนุน passive transfer
  • จำกัดพอร์ตที่ใช้สำหรับ data channel ให้อยู่ในช่วงขนาดเล็ก เช่น 2534-2536 ด้วยการกำหนดค่า pasv_min_port=2534 และ pasv_max_port=2536
  • กำหนดให้เครื่อง client ใช้ 127.0.0.1 เป็น address ที่ใช้สำหรับการส่ง data (pasv_assress=127.0.0.1

โดยที่เครื่อง Workstation จะต้องมีทั้ง FTP client และ SSH client  ซึ่งโปรแกรม FTP client  อาจจะมีให้เลือกใช้กันมากมาย  แต่จะต้องสนับสนุนการทำงานแบบ passive transfer mode ในตัวอย่างนี้ สมมุติว่า Workstation ใช้ OS ที่เป็น Windows และใช้ SSH client เป็นโปรแกรม PuTTY

ในส่วนของ SSH client จะต้องทำการ Forward พอร์ตทั้งหมดที่เป็น pasv data port (2534-2536) ไปยัง Server (L2534 popeye:2534, ..., L2536 popeye:2536) โดย popeye เป็น local host name นอกจากนั้นจะต้องคอนฟิก SSH ให้ forward พอร์ต 21 ซึ่งเป็น control channel (L21 popeye:21) ที่สำคัญอย่างหนึ่งคือควรจะใช้ true local hostname (popeye) มากกว่าการใช้ localhost เมื่อทำการสร้างการเชื่อมต่อดังกล่าวนี้ (ไม่รู้ว่าทำไมเหมือนกัน)

ตอนนี้  ที่ remote workstation ให้ใช้ SSH client สร้างการเชื่อมต่อระหว่าง workstation กับ www.spinach.com ซึ่งการเชื่อมต่อดังกล่าวต้องคอนฟิก firewall ให้ทำการฟอร์เวิร์ดทราฟฟิก SSH ไปยัง popeye

สุดท้าย  เริ่มต้นเชื่อมต่อ FTP ไปยัง Server ที่รัน SSH ที่ผ่านการคอนฟิกเรียบร้อยแล้ว กล่าวคือกำหนดให้ FTP client เชื่อมต่อ localhost (127.0.0.1) โดยใช้ passive mode

เมื่อปฏิบัติตามที่กล่าวมา จะมีลำดับเหตุการณ์เกิดขึ้นดังต่อไปนี้  ลำดับแรก FTP client เชื่อมต่อกับ localhost:21 ซึ่ง localhost หมายถึงของเครื่อง workstation ดังนั้น FTP จะเชื่อมต่อกับพอร์ต 21 ของ Workstation แล้ว SSH จะฟอร์เวิร์ดการเชื่อมต่อนี้ไปยัง Server โดยจะเชื่อมต่อกับ FTP daemon เป็นรูปแบบ control channel จากนั้น FTP client จะร้องขอการเชื่อมต่อแบบ passive mode แล้ว Server ก็จะ respond ด้วยการบอก client ให้ใช้ 127.0.0.1:253x (x เป็น 4,3,6) โดยแอดเดรส 127.0.0.1 เป็น address ของ workstation ดังนั้น FTP จะชี้ data port ไปยังพอร์ต 253x ของ Workstation ซึ่ง SSH ฟอร์เวิร์ดไปยัง Server และการเชื่อมต่อก็ถูกสร้างขึ้น

ในการที่จะให้ทำงานได้นั้น FTP Server จะถอดรหัส (hard codes) แอดเดรสที่ใช้สำหรับ passive transfer to 127.0.0.1(localhost loopback address) ซึ่งจะเป็นการป้องกันการเชื่อมต่อFTP ไปยัง Server ของคุณที่อาจจะเกิดขึ้นบน server's local network อย่างไรก็ตาม การเชื่อมต่อดังกล่าวนี้สามารถสร้างขึ้นได้ด้วยการใช้ active mode แทน

ปรับปรุงตัวอย่าง
หมายเลขพอร์ตที่ใช้ (2534-2536) จากตัวอย่างที่ผ่านมา สามารถที่จะเปลี่ยนค่าเป็นอย่างอื่นได้ โดยควรจะหลีกเลี่ยงการใช้พอร์ตที่ต่ำกว่า 1024

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

ชื่อที่เป็น popeye และ www.spanach.com ก็ต้องปรับเปลี่ยนให้เหมาะสมกับของคุณ แต่ชื่อที่เป็น localhost และ loopback address (127.0.0.1) ไม่ควรจะเปลี่ยนแปลง

ทรัพยากรเพิ่มเติม
SSH เป็นเครื่องมือที่มีความยืดหยุ่นและมีประโยชน์มาก มันถูกออกแบบมาสำหรับ remote shell ที่ปลอดภัย แต่สามารถใช้สำหรับ secure remote access for mail (POP,IMAP,SMTP), file access, synchronization, and versioning (SFTP, RSync, CVS), windowing (X windows, VNC) etc. คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับเรื่องดังกล่าวได้จากหนังสือที่เกี่ยวกับ SSH เช่นหนังสือตามรูปที่แสดงเป็นต้น  สำหรับข้อมูลเพิ่มเติมสำหรับการคอนฟิก PuTTY ดูได้ ที่นี่

ขอบคุณข้อมูลจาก ITWIZARD

หมายเลขบันทึก: 107664เขียนเมื่อ 30 มิถุนายน 2007 18:50 น. ()แก้ไขเมื่อ 11 กุมภาพันธ์ 2012 19:15 น. ()สัญญาอนุญาต: จำนวนที่อ่านจำนวนที่อ่าน:


ความเห็น (0)

ไม่มีความเห็น

พบปัญหาการใช้งานกรุณาแจ้ง LINE ID @gotoknow
ClassStart
ระบบจัดการการเรียนการสอนผ่านอินเทอร์เน็ต
ทั้งเว็บทั้งแอปใช้งานฟรี
ClassStart Books
โครงการหนังสือจากคลาสสตาร์ท