ข้อมูลไม่เพียงพอที่จะมีคำตอบที่สมบูรณ์ แต่คุณต้องจำไว้เสมอว่า FTP ไม่ใช่โปรโตคอลธรรมดา ในกรณีที่ง่ายที่สุด คล่องแคล่ว FTP ทำงานดังนี้:
- คุณทำการเชื่อมต่อการควบคุมกับพอร์ต 21 (เซิร์ฟเวอร์ FTP) ซึ่งผ่าน
- คุณรับรองความถูกต้อง
- คุณบอกเซิร์ฟเวอร์ที่จะทำการเชื่อมต่อ (IP และพอร์ต)
- คุณสั่งให้เซิร์ฟเวอร์เริ่มการถ่ายโอน
- เดอะ เซิร์ฟเวอร์ ทำให้ อื่น การเชื่อมต่อกับ IP และพอร์ตที่คุณบอกและส่งหรือรับข้อมูล
โดยปกติในขั้นตอนที่ 3 คุณจะแจ้งให้เซิร์ฟเวอร์ทราบ IP ของคุณและพอร์ตที่ไคลเอ็นต์ FTP ของคุณกำลังฟัง ดังนั้นการเชื่อมต่ออื่นในขั้นตอนที่ 5 จึงถูกสร้างขึ้น ในทิศทางตรงกันข้ามจากเซิร์ฟเวอร์ถึงคุณ
จะเป็นอย่างไรเมื่อมีไฟร์วอลล์อยู่ระหว่างนั้น สมมติว่าคุณเปิดใช้งานการรับแพ็คเก็ตบนพอร์ต 21 (หรืออะไรก็ตามที่คุณใช้) บนเซิร์ฟเวอร์ คุณสามารถสร้างการเชื่อมต่อการควบคุม ทีนี้ แล้วการเชื่อมต่อข้อมูลย้อนกลับที่เซิร์ฟเวอร์ทำล่ะ? จะเปิดใช้งานได้อย่างไร
มีสองกรณี: คุณอนุญาตพอร์ต (หรือบางช่วง) แบบคงที่และกำหนดค่าไคลเอ็นต์ FTP ของคุณให้ใช้พอร์ตนั้นเสมอ หรือคุณมีไฟร์วอลล์ที่ชาญฉลาดมาก แอบฟัง ในการเชื่อมต่อการควบคุม แยก IP และพอร์ตและสร้างกฎชั่วคราวแบบไดนามิกที่อนุญาตการเชื่อมต่อย้อนกลับ สิ่งนี้เรียกว่า แอลจี ซึ่งย่อมาจาก เกตเวย์ระดับแอปพลิเคชัน.
ไฟร์วอลล์รู้ได้อย่างไรว่าการเชื่อมต่อใดที่จะดักฟัง มันรู้ว่า FTP ทำงานผ่าน TCP/21 ดังนั้นจึงมองหาการรับส่งข้อมูลบนพอร์ตนั้น จะทำอย่างไรถ้าคุณเปลี่ยนพอร์ตควบคุม คุณอาจเดาได้ว่า: ALG จะไม่ทำงานไฟร์วอลล์จะไม่เพิ่มกฎไดนามิกเพิ่มเติม ดังนั้นความพยายามในการเชื่อมต่อข้อมูลย้อนกลับจะไม่สำเร็จ
หวังว่าถ้าคุณกำหนดค่า "ALG" ให้ทำงานกับพอร์ตที่ไม่ใช่ค่าเริ่มต้น ปัญหาจะได้รับการแก้ไข อย่างไรก็ตาม นี่ไม่ใช่กรณีเสมอไป ถามก่อนว่า ที่ ไฟร์วอลล์ที่เรากำลังพูดถึง? โลกสมัยใหม่ใช้ไฟร์วอลล์อย่างหนัก ทั้งสองด้านและระหว่างนั้น และยังมีการใช้ NAT อย่างหนัก (รวมถึง CGN ซึ่งใช้โดย ISP) NAT ใดๆ ก็ต้องการ ALG เช่นกัน โดยจำเป็นต้องสร้างกฎการแปลแบบไดนามิกสำหรับไคลเอ็นต์ซึ่งอยู่เบื้องหลัง NAT และผู้ที่เริ่มธุรกรรม คุณจะประสบความสำเร็จด้วยวิธีนี้ก็ต่อเมื่อคุณสามารถกำหนดค่า ALG ทุกรายการตามเส้นทางที่คุณต้องการได้ ดูว่าฉันจะไปที่ไหน?
มีสอง วิธีแก้ปัญหาทั่วไป. อย่างแรก ง่ายๆ: พึ่งพา ALG ซึ่งกำหนดให้คุณไม่ต้องเปลี่ยนพอร์ตควบคุม FTP เริ่มต้น (พูดตามตรง 20 ปีของการจัดการเซิร์ฟเวอร์และฉันยังไม่เข้าใจประเด็นของการใช้พอร์ตที่ไม่ใช่ค่าเริ่มต้น สิ่งนี้สร้างปัญหามากกว่าแก้ปัญหา) . ประการที่สอง ง่ายเกินไป: ใช้โหมด FTP แบบพาสซีฟ
เดอะ เฉยเมย FTP ทำงานดังนี้:
- คุณทำการเชื่อมต่อกับพอร์ต 21 (เซิร์ฟเวอร์ FTP) ซึ่งผ่าน
- คุณรับรองความถูกต้อง
- คุณเข้าสู่โหมดพาสซีฟ และเซิร์ฟเวอร์ตอบกลับด้วย IP และพอร์ต
- คุณสั่งให้เซิร์ฟเวอร์เริ่มการถ่ายโอน
- คุณ ทำการเชื่อมต่ออื่นกับ IP และพอร์ตที่เซิร์ฟเวอร์แจ้งให้คุณทราบ และรับหรือส่งข้อมูล
โปรดสังเกตว่าขั้นตอนเดียวที่เปลี่ยนแปลงคือ 3 และ 5 ซึ่งหลีกเลี่ยงการเชื่อมต่อแบบย้อนกลับ
สิ่งนี้ช่วยแก้ปัญหาบางส่วนเกี่ยวกับพอร์ตที่ไม่ใช่ค่าเริ่มต้นและ ALG ที่ไม่ได้รับการควบคุม นอกจากนี้ยังช่วยให้สามารถใช้การเข้ารหัสบนการเชื่อมต่อการควบคุม (ซึ่งทำลาย ALGs โดยเนื้อแท้)