FTP ที่ใช้งานกับพาสซีฟต่างกันอย่างไร


312

บางคนสามารถบอกฉันว่าอะไรคือความแตกต่างระหว่าง Active FTP และ Passive?
อันไหนดีกว่ากัน?

คำตอบ:


474

Active และ passive เป็นสองโหมดที่ FTP สามารถทำงานได้

สำหรับพื้นหลัง FTP จะใช้สองช่องสัญญาณระหว่างไคลเอนต์และเซิร์ฟเวอร์คำสั่งและช่องข้อมูลซึ่งเป็นการแยกการเชื่อมต่อ TCP จริงๆ

ช่องสัญญาณคำสั่งใช้สำหรับคำสั่งและการตอบสนองขณะที่ช่องสัญญาณใช้สำหรับถ่ายโอนไฟล์จริง

การแยกข้อมูลคำสั่งและข้อมูลออกเป็นช่องทางแยกเป็นวิธีที่ดีในการส่งคำสั่งไปยังเซิร์ฟเวอร์โดยไม่ต้องรอให้การถ่ายโอนข้อมูลปัจจุบันเสร็จสิ้น ตาม RFC สิ่งนี้ได้รับคำสั่งสำหรับชุดย่อยของคำสั่งเช่นการเลิกการยกเลิกการถ่ายโอนปัจจุบันและการรับสถานะ


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

ในโหมดแฝงลูกค้าสร้างช่องทางทั้งสอง เรารู้แล้วว่ามันสร้างช่องทางคำสั่งในโหมดใช้งานและมันก็ทำเช่นเดียวกันที่นี่

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

ในส่วนนี้เซิร์ฟเวอร์จะส่งคืนหมายเลขพอร์ตที่เลือกไว้เพื่อฟังเพื่อให้ไคลเอนต์ทราบวิธีเชื่อมต่อกับไคลเอ็นต์

เมื่อลูกค้ารู้ว่ามันสามารถสร้างช่องทางข้อมูลและดำเนินการต่อได้สำเร็จ

รายละเอียดเพิ่มเติมมีอยู่ใน RFC: https://www.ietf.org/rfc/rfc959.txt


1
ฉันไม่คิดว่าคำแถลงรอบพอร์ต Y นั้นถูกต้องในโหมดแอ็คทีฟลูกค้าไม่ได้กำหนดพอร์ต Y เซิร์ฟเวอร์พยายามสุ่มเลือกพอร์ต # และพยายามดูว่าลูกค้าอนุญาตการสื่อสารผ่านพอร์ตที่เลือกหรือไม่ . เหตุผลที่ฉันพูดแบบนี้ก็คือถ้าสิ่งนี้ไม่เป็นความจริง (อาร์กิวเมนต์ของฉัน) แล้วฝั่งไคลเอ็นต์แม้ว่าจะอยู่หลังไฟร์วอลล์ก็สามารถสร้างกฎไฟติดผนังสองกฎหนึ่งสำหรับการเชื่อมต่อขาออกและอีกหนึ่งสำหรับการเชื่อมต่อขาเข้า
arun.raj.mony

1
@ รันลูกค้าไม่จำเป็นต้องควบคุมไฟร์วอลล์ ตัวอย่าง: ในสภาพแวดล้อมขององค์กรโดยทั่วไปจะมีไฟร์วอลล์ระหว่างเครือข่ายทั่วทั้ง บริษัท และโลกภายนอกซึ่งไคลเอนต์ที่ใช้ FTP มีพลังงานเป็นศูนย์
paxdiablo

ในโหมดพาสซีฟทำไมเซิร์ฟเวอร์ส่งพอร์ตสุ่มไปยังไคลเอ็นต์แทนไคลเอ็นต์เชื่อมต่อกับเซิร์ฟเวอร์พอร์ต 20 โดยตรง
เฉินโบ

@paxdiablo ในโหมดพาสซีฟทำไมเซิร์ฟเวอร์ไม่ได้กำหนดพอร์ตสุ่มและส่งไปยังไคลเอนต์สำหรับการเชื่อมต่อข้อมูล? เหตุใดลูกค้าจึงไม่สามารถเปิดช่องสัญญาณข้อมูลโดยตรงจากพอร์ตไคลเอ็นต์ no ถึงพอร์ต no 20 ที่ฝั่งเซิร์ฟเวอร์ได้
Zephyr

1
ฉันถามคำถามที่นี่ตอนนี้networkengineering.stackexchange.com/q/43680/37406
Zephyr

166

ฉันเพิ่งพบคำถามนี้ในที่ทำงานของฉันดังนั้นฉันคิดว่าฉันควรพูดอะไรบางอย่างเพิ่มเติมที่นี่ ฉันจะใช้ภาพเพื่ออธิบายวิธีการทำงานของ FTP เป็นแหล่งข้อมูลเพิ่มเติมสำหรับคำตอบก่อนหน้า

โหมดใช้งาน:

โหมดที่ใช้งาน


โหมดเรื่อย ๆ :

ป้อนคำอธิบายรูปภาพที่นี่


ในการกำหนดค่าโหมดใช้งานเซิร์ฟเวอร์จะพยายามเชื่อมต่อกับพอร์ตฝั่งไคลเอ็นต์แบบสุ่ม โอกาสก็คือพอร์ตนั้นจะไม่เป็นหนึ่งในพอร์ตที่กำหนดไว้ล่วงหน้า ดังนั้นความพยายามในการเชื่อมต่อจะถูกบล็อกโดยไฟร์วอลล์และจะไม่มีการสร้างการเชื่อมต่อ

ป้อนคำอธิบายรูปภาพที่นี่


การกำหนดค่าแบบพาสซีฟจะไม่มีปัญหานี้เนื่องจากไคลเอ็นต์จะเป็นผู้เริ่มการเชื่อมต่อ แน่นอนว่าเป็นไปได้ที่ฝั่งเซิร์ฟเวอร์จะมีไฟร์วอลล์ด้วย อย่างไรก็ตามเนื่องจากเซิร์ฟเวอร์คาดว่าจะได้รับการร้องขอการเชื่อมต่อจำนวนมากเมื่อเทียบกับไคลเอนต์ดังนั้นมันจะเป็นเพียงตรรกะสำหรับผู้ดูแลระบบเซิร์ฟเวอร์เพื่อปรับให้เข้ากับสถานการณ์และเปิดการเลือกพอร์ตเพื่อตอบสนองการกำหนดค่าโหมดแฝง

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

เพื่อลดความเสี่ยงวิธีแก้ปัญหาที่ดีคือการระบุช่วงของพอร์ตบนเซิร์ฟเวอร์ของคุณแล้วอนุญาตเฉพาะช่วงของพอร์ตบนไฟร์วอลล์ของคุณ

สำหรับข้อมูลเพิ่มเติมโปรดอ่านเอกสารอย่างเป็นทางการ


ฉันแค่คาดเดาซึ่งเป็นปัญหาด้านความปลอดภัย หากเซิร์ฟเวอร์ฟังพอร์ตเดียวกัน (20) ก็ไม่สามารถเข้าใจได้ว่าลูกค้ากำลังพูดถึงอะไรดังนั้นจึงเลือกพอร์ตสุ่มและส่งไปยังไคลเอนต์เริ่มที่จะฟังพอร์ตนั้น เมื่อไคลเอนต์เชื่อมต่อกับพอร์ตนั้นเซิร์ฟเวอร์จะทราบว่าเป็นของไคลเอ็นต์ใด แต่มันก็เพียงพอแล้วสำหรับ MITM ในการเชื่อมต่อกับไคลเอนต์เดียวกัน (การโจมตีแบบ mitm ที่นี่นั้นค่อนข้างยุ่งยาก ... )
Daniele Cruciani

2
คำตอบที่ดีโดยเฉพาะอย่างยิ่งข้อมูลเกี่ยวกับปัญหาไฟร์วอลล์
Anh Tuan

14

บทความ Redacted ของฉันในบทความโหมดการเชื่อมต่อ FTP (Active กับ Passive) :

โหมดการเชื่อมต่อ FTP (แอ็คทีฟหรือพาสซีฟ) กำหนดวิธีการเชื่อมต่อข้อมูล ในทั้งสองกรณีไคลเอนต์สร้างการเชื่อมต่อการควบคุม TCP ไปยังพอร์ตคำสั่งเซิร์ฟเวอร์ FTP 21 นี่คือการเชื่อมต่อขาออกมาตรฐานเช่นเดียวกับโปรโตคอลการถ่ายโอนไฟล์อื่น ๆ (SFTP, SCP, WebDAV) หรือแอปพลิเคชันไคลเอนต์ TCP อื่น ๆ (เช่นเว็บเบราว์เซอร์ ) ดังนั้นมักจะไม่มีปัญหาเมื่อเปิดการเชื่อมต่อการควบคุม

โดยที่โปรโตคอล FTP นั้นซับซ้อนกว่าเมื่อเปรียบเทียบกับโปรโตคอลการถ่ายโอนไฟล์อื่นคือการถ่ายโอนไฟล์ ในขณะที่โปรโตคอลอื่นใช้การเชื่อมต่อที่เหมือนกันสำหรับการควบคุมเซสชันและการถ่ายโอนไฟล์ (ข้อมูล) โปรโตคอล FTP ใช้การเชื่อมต่อแยกต่างหากสำหรับการถ่ายโอนไฟล์และรายการไดเรกทอรี

ในโหมดที่ใช้งานไคลเอนต์เริ่มฟังพอร์ตสุ่มสำหรับการเชื่อมต่อข้อมูลขาเข้าจากเซิร์ฟเวอร์ (ไคลเอนต์ส่งคำสั่ง FTP PORTเพื่อแจ้งเซิร์ฟเวอร์ที่พอร์ตนั้นกำลังฟัง) ทุกวันนี้เป็นเรื่องปกติที่ไคลเอนต์อยู่หลังไฟร์วอลล์ (เช่นไฟร์วอลล์ Windows ในตัว) หรือเราเตอร์ NAT (เช่นโมเด็ม ADSL) ไม่สามารถยอมรับการเชื่อมต่อ TCP ขาเข้าได้

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

ในโหมดพาสซีฟไคลเอนต์ใช้การเชื่อมต่อการควบคุมเพื่อส่งPASVคำสั่งไปยังเซิร์ฟเวอร์แล้วรับที่อยู่ IP ของเซิร์ฟเวอร์และหมายเลขพอร์ตเซิร์ฟเวอร์จากเซิร์ฟเวอร์ซึ่งไคลเอนต์นั้นจะใช้เพื่อเปิดการเชื่อมต่อข้อมูลไปยังที่อยู่ IP ของเซิร์ฟเวอร์และเซิร์ฟเวอร์ ได้รับหมายเลขพอร์ตแล้ว

การกำหนดค่าเครือข่ายสำหรับโหมดแฝง

ด้วยโหมดพาสซีฟภาระการตั้งค่าส่วนใหญ่จะอยู่ที่ฝั่งเซิร์ฟเวอร์ ผู้ดูแลเซิร์ฟเวอร์ควรตั้งค่าเซิร์ฟเวอร์ตามที่อธิบายไว้ด้านล่าง

ไฟร์วอลล์และ NAT บนฝั่งเซิร์ฟเวอร์ FTP ต้องได้รับการกำหนดค่าไม่เพียงเพื่ออนุญาต / กำหนดเส้นทางการเชื่อมต่อขาเข้าบนพอร์ต FTP 21 แต่ยังเป็นช่วงของพอร์ตสำหรับการเชื่อมต่อข้อมูลขาเข้า โดยทั่วไปซอฟต์แวร์เซิร์ฟเวอร์ FTP มีตัวเลือกการกำหนดค่าเพื่อตั้งค่าช่วงของพอร์ตเซิร์ฟเวอร์จะใช้ และช่วงเดียวกันนั้นจะต้องเปิด / กำหนดเส้นทางบนไฟร์วอลล์ / NAT

เมื่อเซิร์ฟเวอร์ FTP อยู่หลัง NAT มันจำเป็นต้องรู้ว่ามันเป็นที่อยู่ IP ภายนอกดังนั้นจึงสามารถให้เซิร์ฟเวอร์กับลูกค้าในการตอบสนองต่อPASVคำสั่ง

การกำหนดค่าเครือข่ายสำหรับโหมดแอคทีฟ

ด้วยโหมดแอคทีฟภาระการตั้งค่าส่วนใหญ่จะอยู่ที่ฝั่งไคลเอ็นต์

ไฟร์วอลล์ (เช่นไฟร์วอลล์ Windows) และ NAT (เช่นกฎการกำหนดเส้นทางโมเด็ม ADSL) ในฝั่งไคลเอ็นต์จะต้องได้รับการกำหนดค่าให้อนุญาต / เส้นทางช่วงของพอร์ตสำหรับการเชื่อมต่อข้อมูลขาเข้า เปิดพอร์ตใน Windows ให้ไปที่แผงควบคุม> ระบบและความปลอดภัย> Windows Firewall> การตั้งค่าขั้นสูง> กฎขาเข้า> กฎใหม่ สำหรับการกำหนดเส้นทางพอร์ตบน NAT (ถ้ามี) อ้างอิงเอกสารของมัน

เมื่อมี NAT ในเครือข่ายของคุณไคลเอนต์ FTP จำเป็นต้องรู้ที่อยู่ IP ภายนอกที่ WinSCP ต้องการให้กับเซิร์ฟเวอร์ FTP โดยใช้PORTคำสั่ง เพื่อให้เซิร์ฟเวอร์สามารถเชื่อมต่อกลับไปยังไคลเอนต์ได้อย่างถูกต้องเพื่อเปิดการเชื่อมต่อข้อมูล ไคลเอนต์ FTP บางตัวมีความสามารถในการตรวจจับที่อยู่ IP ภายนอกโดยอัตโนมัติบางตัวต้องกำหนดค่าด้วยตนเอง

ไฟร์วอลล์อัจฉริยะ / NATs

ไฟร์วอลล์ / NATs บางตัวพยายามเปิด / ปิดพอร์ตข้อมูลโดยอัตโนมัติโดยตรวจสอบการเชื่อมต่อการควบคุม FTP และ / หรือแปลที่อยู่ IP การเชื่อมต่อข้อมูลในการรับส่งข้อมูลการควบคุมการเชื่อมต่อ

ด้วยไฟร์วอลล์ / NAT เช่นนั้นการกำหนดค่าข้างต้นจึงไม่จำเป็นสำหรับ FTP ที่ไม่ได้เข้ารหัสแบบธรรมดา แต่สิ่งนี้ไม่สามารถทำงานกับ FTPS ได้เนื่องจากทราฟฟิกการเชื่อมต่อการควบคุมถูกเข้ารหัสและไฟร์วอลล์ / NAT ไม่สามารถตรวจสอบหรือแก้ไขได้


11

โหมดใช้งาน: - เซิร์ฟเวอร์เริ่มการเชื่อมต่อ

โหมดพาสซีฟ: - ไคลเอนต์เริ่มการเชื่อมต่อ


1

โหมดแอคทีฟ - ไคลเอนต์ใช้คำสั่ง PORT ไปยังเซิร์ฟเวอร์เพื่อส่งสัญญาณว่าจะ“ แข็งขัน” ระบุ IP และหมายเลขพอร์ตเพื่อเปิดการเชื่อมต่อข้อมูลกลับไปยังไคลเอนต์

โหมดพาสซีฟ - ไคลเอนต์ออกคำสั่ง PASV เพื่อระบุว่ามันจะรอ“ พาสซีฟ” เพื่อให้เซิร์ฟเวอร์ระบุหมายเลข IP และหมายเลขพอร์ตหลังจากนั้นไคลเอ็นต์จะสร้างการเชื่อมต่อข้อมูลไปยังเซิร์ฟเวอร์

มีคำตอบที่ดีมากมายด้านบน แต่โพสต์บล็อกนี้มีกราฟิกที่เป็นประโยชน์และให้คำอธิบายที่มั่นคง: https://titanftp.com/2018/08/23/what-is-the-difference-between-active-and -passive-ftp /

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.