วันอาทิตย์ที่ 8 ตุลาคม พ.ศ. 2560

ความแตกต่างระหว่าง Active mode และ Passive mode บน FTP

             FTP เป็นบริการที่ทำงานบน TCP อย่างเดียว โดยมีการทำงานโดยใช้พอร์ตสองพอร์ตคือ พอร์ตที่ 21 เป็นการเชื่อมต่อในส่วนควบคุม (command port) และพอร์ตที่ 20 เป็นการเชื่อมต่อในส่วนข้อมูล (data port) บางครั้งอาจจะทำให้สับสนได้หากการเชื่อมต่อในส่วนข้อมูลนั้นไม่เป็นพอร์ตที่ 20 ซึ่งจะขึ้นอยู่กับโหมดการทำงาน

             การทำงานแบบ Active mode เครื่องไคลเอนต์จะเชื่อมต่อจากพอร์ตที่ไม่มีสิทธิพิเศษ (unprivileged port) โดยการสุ่มค่าพอร์ตที่มากกว่า 1024(N > 1024) ไปยัง command port(21)ของเครื่องเซิร์ฟเวอร์ จากนั้นเครื่องไคลเอนต์ก็จะเริ่มคอยฟัง (listening) พอร์ต N+1 และส่ง FTP command port(N+1) ไปยังเครื่องเซิร์ฟเวอร์ แล้วเครื่องเซิร์ฟเวอร์ก็จะเชื่อมต่อกลับมายังเครื่องไคลเอนต์ตาม data port ที่ได้กำหนดไว้  โดยที่เครื่องเซิร์ฟเวอร์นั้นจะเป็น Data Port(21)

ซึ่งสามารถแสดงรูปการเชื่อมต่อของ Active mode ดังรูปต่อไปนี้

Step 1: command port ของไคลเอนต์ติดต่อ command port ของเซิร์ฟเวอร์
              และส่ง command PORT 1026
Step 2: เซิร์ฟเวอร์ส่ง ACK กลับไปยัง command port ของไคลเอนต์
Step 3: เซิร์ฟเวอร์เริ่มต้นการเชื่อมต่อ (initiate) โดยใช้ data port ของตัวเอง คือ
              พอร์ตที่ 20 ส่งไปยัง data port ของไคลเอนต์ที่ถูกกำหนดไว้
Step 4: ไคลเอนต์จะทำการส่ง ACK กลับไปยังเซิร์ฟเวอร์

             ปัญหาหลักของ FTP แบบ Active mode จะอยู่ที่ฝั่งไคลเอนต์เนื่องจากจะไม่สร้างการเชื่อมต่อที่แท้จริงไปยัง data port ของเซิร์ฟเวอร์ได้ เมื่อพิจารณาระบบ Firewall ทางด้านไคลเอนต์จะเห็นว่าเป็นการเริ่มต้น (initiate) การเชื่อมต่อจากระบบภายนอกไปยังไคลเอนต์ที่อยู่ภายใน ซึ่งการเชื่อมต่อแบบนี้มักจะถูกบล็อก


             การทำงานแบบ Passive mode เครื่องไคลเอนต์จะเริ่มการเชื่อมต่อทั้งสองไปยังเครื่องเซิร์ฟเวอร์ เพื่อเป็นการแก้ปัญหาการกลั่นกรองการเชื่อมต่อ data port ขาเข้าจากเครื่องเซิร์ฟเวอร์ไปยังเครื่องไคลเอนต์ของตัว Firewall โดยเมื่อมีการเปิดการเชื่อมต่อ FTP เครื่องไคลเอนต์จะเปิด unprivileged port locally ทั้งสองพอร์ตแบบ random(N >1024 และ N + 1)โดยพอร์ตแรกจะติดต่อกับเครื่องเซิร์ฟเวอร์บนพอร์ตที่ 21 ด้วยการส่ง command port ออกมาและอนุญาตให้เครื่องเซิร์ฟเวอร์เชื่อมต่อกลับไปยัง data port ของตัวเอง จากนั้นเครื่องไคลเอนต์ก็จะส่ง PASV command ออกไปด้วย ผลที่ได้คือ เครื่องเซิร์ฟเวอร์จะเปิด random privileged port(P > 1024) และส่ง PORT P command กลับไปยังเครื่องไคลเอนต์แล้วเครื่องไคลเอนต์ก็จะเริ่มต้นการเชื่อมต่อจากพอร์ต N+1 ไปยังพอร์ต P บนเครื่องเซิร์ฟเวอร์เพื่อทำการถ่ายโอนข้อมูล

*Passive FTP (หรือในบางครั้งเราจะเรียกแทนด้วย PASV FTP เนื่องจากมันเป็นส่วนหนึ่งของคำสั่ง FTP PASV ) เป็นรูปแบบหนึ่งของการส่งถ่ายข้อมูลที่มีความปลอดภัยมากขึ้น ด้วยวิธีการถ่ายโอนข้อมูลที่ถูกสร้างขึ้นและนำพาโดยตัวโปรแกรม File Transfer หรือ โปรแกรม FTP

Step 1: ไคลเอนต์ติดต่อกับเซิร์ฟเวอร์บน command port และส่ง
              PASV command
Step 2: เซิร์ฟเวอร์ตอบกลับด้วยพอร์ต 2024 เพื่อแจ้งไคลเอนต์ว่าพอร์ตใดที่
              เซิร์ฟเวอร์กำลัง listening เพื่อทำการเชื่อมต่อข้อมูล
Step 3: ไคลเอนต์เริ่มต้นการเชื่อมต่อข้อมูลจาก data port ของตัวเองไปยัง
              data port ของเซิร์ฟเวอร์ที่ถูกระบุไว้
Step 4: เซิร์ฟเวอร์จะทำการส่ง ACK กลับไปยัง data port ของไคลเอนต์

             การแก้ปัญหาของ FTP แบบ Passive mode จะสามารถแก้ปัญหาทางฝั่งไคลเอนต์ได้ดี แต่ก็ยังเกิดปัญหากับทางฝั่งเซิร์ฟเวอร์อยู่มาก ซึ่งปัญหาที่ใหญ่ที่สุด คือ การเชื่อมต่อรีโมตใดๆจำเป็นต้องได้รับการอนุญาตก่อนจึงจะสามารถเชื่อมต่อไปยัง high numbered port บนเซิร์ฟเวอร์ได้ แต่ถ้าใครใช้ WU-FTP หรือ vsftp จะมีจุดเด่นอย่างหนึ่งคือ WU-FTP และ vsftp จะอนุญาตให้ Administrator ระบุช่วงของ Port ที่ FTP ใช้ได้

*ACKnowledgement รหัสควบคุมที่ตกลงกันไว้ว่า จะต้องส่งไปบอกคอมพิวเตอร์อีกเครื่องหนึ่งว่า พร้อมจะติดต่อกันก่อนส่งข้อมูลไปมาหากัน



ข้อมูลอ้างอิง
http://www.itmanage.info/technology/linux/active_passive_ftp/active_passive_FTP.html

ไม่มีความคิดเห็น:

แสดงความคิดเห็น