Leaderboard (728 x 90)

Monday, July 19, 2010

การตั้งค่า firewall สำหรับ Passive FTP Connection (ตอนที่ 1)

FTP เป็นเซอร์วิสที่ทำงานบนโปรโตคอล TCP/IP ในการติดต่อและรับส่งข้อมูลกับ client โดยใช้พอร์ต 2 พอร์ต คือ พอร์ตรับคำสั่ง และพอร์ตข้อมูล โหมดของ FTP สามารถแบ่งออกเป็น 2 โหมด คือ Active Mode และ Passive Mode ซึ่งจะมีการทำงานที่แตกต่างกัน
รูปภาพ
ใน active mode ของ FTP ไคลเอ็นต์จะเชื่อมต่อจากพอร์ตแบบสุ่มที่มีค่าพอร์ตมากกว่า 1023 มาที่พอร์ต 21 ของเซิร์ฟเวอร์ ซึ่งเป็นพอร์ตรับคำสั่ง (พอร์ต N>1023 จากรูปจะสมมติให้ N=1026) แล้วส่งคำสั่งซึ่งจะบอกให้เซิร์ฟเวอร์ทราบหมายเลขพอร์ตที่จะใช้ในการรับส่งข้อมูลกับเครื่องไคลเอ็นต์ (พอร์ต N+1) จากนั้นเซิร์ฟเวอร์จะตอบสนองคำสั่งโดยจะส่ง acknowledge จากพอร์ต 21 กลับไปยังพอร์ต N ของเครื่องไคลเอ็นต์ แล้วจึงทำการเชื่อมต่อจากพอร์ต 20 ซึ่งเป็นพอร์ตข้อมูลของเซิร์ฟเวอร์ไปยังพอร์จ N+1 ของเครื่องไคลเอ็นต์ ในขั้นตอนท้ายสุด ไคลเอ็นต์จะตอบสนองการเชื่อมต่อจากเซิร์ฟเวอร์โดยจะส่ง acknowledge กลับไปยังพอร์ต 20 ของเครื่องเซิร์ฟเวอร์ คำสั่งจากเครื่องไคลเอ็นต์จะส่งไปที่พอร์ต 21 ของเครื่องเซิร์ฟเวอร์ และเซิร์ฟเวอร์จะรับส่งข้อมูลกับเครื่องไคลเอ็นต์ผ่านทางพอร์ต 20

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

เพื่อแก้ปัญหาดังกล่าว จึงมีการพัฒนารูปแบบการเชื่อมต่อของ FTP ขึ้นมาอีกแบบหนึ่งซึ่งเรียกว่า Passive Mode

หลักการทำงานในโหมดนี้ ก็คือ
รูปภาพ
การทำงานในโหมดนี้จะเริ่มจากไคลเอ็นต์เชื่อมต่อจากพอร์ตแบบสุ่ม N>1023 ไปที่พอร์ต 21 ของเครื่องเซิร์ฟเวอร์ และส่งคำสั่ง PASV ไปที่เซิร์ฟเวอร์
เมื่อเซิร์ฟเวอร์ได้รับคำสั่งจะสุ่มพอร์ตสำหรับใช้เป็นพอร์ตข้อมูล สมมติให้เป็นพอร์ต P>1023 จากรูป พอร์ต P=2024 จากนั้นเซิร์ฟเวอร์จะส่งหมายเลขพอร์ต P ดังกล่าวกลับไปที่พอร์ต N ของเครื่องไคลเอ็นต์
เมื่อเครื่องไคลเอ็นต์รับทราบ ไคลเอ็นต์จะเชื่อมต่อจากพอร์ต N+1 ไปที่พอร์ต P ของเครื่องเซิร์ฟเวอร์ จากนั้นเซิร์ฟเวอร์จะส่ง Acknowledge กลับไปยังพอร์ต N+1 ของเครื่องไคลเอ็นต์ คำสั่งจากเครื่องไคลเอ็นต์จะส่งไปที่พอร์ต 21 ของเครื่องเซิร์ฟเวอร์ และเซิร์ฟเวอร์จะรับส่งข้อมูลกับไคลเอ็นต์ผ่่านทางพอร์ต P ที่เซิร์ฟเวอร์สุ่มขึ้นมา

ถึงตรงนี้ ก็คงจะเห็นภาพกันแล้วว่าใน Passive Mode การเชื่อมต่อจะเริ่มจาก client ก่อนเสมอ จึงขจัดปัญหาเรื่องไฟร์วอลล์ในส่วนของไคลเอ็นต์ไป แต่คำถามต่อมาก็คือ แล้วเซิร์ฟเวอร์ล่ะ จะควบคุมนโยบายและกฎเกณฑ์ต่างๆ ของไฟร์วอลล์ได้อย่างไร ในเมื่อพอร์ตที่ใช้เป็นพอร์ตข้อมูลเป็นพอร์ตแบบสุ่มซึ่งมากกว่า 1023 แต่เป็นพอร์ตอะไรก็ได้ จะต้อง allow ทุกพอร์ตที่มีค่ามากกว่า 1023 เลยอย่างนั้นหรือ
คำตอบ คือ ไม่จำเป็นครับ เพราะ FTP Server แต่ละค่าย ก็จะมีวิธีในการกำหนด port range ที่จะใช้ในการสุ่มเป็นพอร์ตข้อมูลในการทำงานแบบ Passive Mode อยู่แล้ว แต่วิธีการก็จะแตกต่างกันไป ตามแต่ละค่าย ทีนี้เราก็แค่ allow เฉพาะพอร์ตที่อยู่ใน port range ที่เรากำหนดไว้เท่านั้น

ตอนต่อไปจะกล่าวถึงวิธีการตั้งค่าไฟร์วอลล์สำหรับการทำงานในโหมด Passive FTP สำหรับ Microsoft FTP Service

No comments:

Post a Comment