एफ़टीपी निष्क्रिय मोड को केवल एक पोर्ट के विपरीत पोर्ट रेंज की आवश्यकता क्यों है?


34

मैं यह समझने के लिए संघर्ष कर रहा हूं कि सभी एफ़टीपी सर्वरों को निष्क्रिय मोड डेटा चैनलों के लिए पोर्ट रेंज के उपयोग की आवश्यकता है क्योंकि सभी आने वाले डेटा चैनल कनेक्शनों के लिए केवल एक डेटा पोर्ट का उपयोग करने का विरोध किया जाता है।

FTP सर्वर पोर्ट 21 पर एक साथ जुड़े कई क्लाइंट्स को संभालते हैं। वेब सर्वर पोर्ट 80 पर एक साथ जुड़े कई क्लाइंट्स संभालते हैं। आदि।

तब एक एफ़टीपी सर्वर सभी आने वाले निष्क्रिय डेटा कनेक्शनों के लिए केवल एक डेटा चैनल पोर्ट का उपयोग नहीं कर सकता है (और अभी भी उस पोर्ट पर एक साथ कनेक्ट किए गए कई क्लाइंट्स को हैंडल करने में सक्षम है, पोर्ट 1024 कह सकते हैं)?

या हो सकता है?

यह क्यों संभव है या अनुशंसित नहीं है, इसके लिए तकनीकी विवरण जानने में मेरी दिलचस्पी है।


1
यह आप के लिए ब्याज की हो सकती है: w3.org/Protocols/rfc959
मैट सिमंस

1
धन्यवाद मैट। हां, मैंने ज्यादातर rfc 959 को पढ़ा है, लेकिन मुझे लगता है कि मैं वास्तव में इस बारे में स्पष्ट जवाब नहीं पा रहा था कि मैं किस बारे में सोच रहा था। करोल पिकाज़क का जवाब उस तरह की जानकारी है जिसकी मुझे तलाश थी।
कर्ट

जवाबों:


20

कई समवर्ती एफ़टीपी सत्रों के संबंध में एक स्पष्ट और तकनीकी व्याख्या जब केवल एक पोर्ट पर डेटा पोर्ट को लॉक किया जाता है, तो मुझे गहराई से जानने में सबसे अधिक दिलचस्पी है। यह कब काम कर सकता है, कब नहीं चलेगा, इसकी सिफारिश क्यों नहीं की जा सकती आदि।

यह एक जंगली अनुमान होगा, जैसा कि मैंने इसे परीक्षण नहीं किया है, आपको इसे अपने लिए आज़माना चाहिए और देखना चाहिए कि क्या कुछ अन्य समस्याएं हैं जो मुझे याद हो सकती हैं।

मुझे लगता है आप निष्क्रिय पोर्ट रेंज को एक सिंगल पोर्ट तक सीमित कर सकते हैं । वास्तव में आप इस प्रश्न में देख सकते हैं कि छोटे बंदरगाह रेंज का उपयोग अभ्यास में किया जाता है । सैद्धांतिक रूप से, कई समवर्ती कनेक्शनों का समर्थन करने के लिए आपको केवल 4 मानों की आवश्यकता होती है: स्थानीय आईपी, स्थानीय पोर्ट, रिमोट आईपी, अद्वितीय होने के लिए रिमोट पोर्ट । यह है कि आप विभिन्न कनेक्शनों के बीच कैसे विचार-विमर्श करते हैं।

यदि आप अपने सर्वर पर पोर्ट को एक सिंगल वैल्यू पर लॉक करते हैं, तो केवल वैरिएबल क्लाइंट द्वारा उपयोग किया जाने वाला पोर्ट है। यह एक समस्या नहीं है, जब तक कि ग्राहक के पास चुनने के लिए नि: शुल्क पंचांग बंदरगाहों का एक बड़ा पर्याप्त पूल है। जब तक यह कुछ भारी NAT कर रहा है, आपको इस बारे में चिंता करने की ज़रूरत नहीं है। अब, चेतावनी दें कि यह विशुद्ध रूप से सैद्धांतिक सामान होगा : यदि आपने अपने सर्वर पर कई पोर्ट का उपयोग किया है, तो आप सक्षम करके समवर्ती समवर्ती कनेक्शन की संख्या को गुणा कर सकते हैंnumber of ports in rangeएक पोर्ट क्लाइंट-साइड प्रति कनेक्शन। लेकिन यह व्यवहार में नहीं होगा, क्योंकि मुझे संदेह है कि एफ़टीपी क्लाइंट का कोई कार्यान्वयन है जो इस का समर्थन करेगा (क्योंकि यह बहुत समझ में नहीं आता है)। इसके अलावा अगर ग्राहक को अपने अल्पकालिक बंदरगाहों को इस तरह से साझा करना है और सिर्फ एक नया नहीं खोल सकता है, तो उससे निपटने के लिए और अधिक गंभीर समस्याएं हैं। तो, इस दृष्टिकोण से आपको एकल पोर्ट का उपयोग करके पूरी तरह से सुरक्षित होना चाहिए।

चलो सोचते है कि एकल पोर्ट पर्याप्त क्यों नहीं हो सकता है

सबसे पहले, मैं एक ऐसी स्थिति के साथ आ सकता हूं जहां वास्तव में छोटी गाड़ी एफ़टीपी सर्वर कार्यान्वयन क्लाइंट डेटा ट्रांसफर की पहचान करने के तरीके के रूप में पूरी तरह से स्थानीय पोर्ट नंबर का उपयोग करता है। एक बार फिर, मुझे नहीं लगता कि कोई भी सभ्य एफ़टीपी ऐसा करेगा।

वास्तविक समस्या ( हाँ, आप एक प्रमुख विषयांतर ;-)) के रूप में ऊपर की उपेक्षा कर सकते हैं निष्क्रिय बंदरगाह रेंज एक गैर-विशेषाधिकारित श्रेणी में है

इसका मतलब यह है कि आपका चयनित पोर्ट नंबर प्रति se आरक्षित नहीं है , और वास्तव में किसी भी उपयोगकर्ता प्रक्रिया ( रूट की आवश्यकता नहीं है) विशेषाधिकारों की ) इसे आपके एफ़टीपी करने से पहले पकड़ सकती है। यदि आपके पास चुनने के लिए बंदरगाहों का एक प्रचुर मात्रा में पूल है, तो आप बस एक यादृच्छिक मुक्त हड़पते हैं। यदि आप केवल एक का उपयोग करने के लिए बाध्य हैं और यह पहले से ही उपयोग किया जाता है, तो आप हस्तांतरण को ठीक से नहीं संभाल पाएंगे।

क्षमा करें, यदि उत्तर थोड़ा सा भी अटपटा लगता है। ईमानदार होने के लिए, मैंने एक कारण खोजने की कड़ी कोशिश की कि आपको एक भी बंदरगाह का उपयोग क्यों नहीं करना चाहिए और, पिछले बिट के अलावा, मैं इसके खिलाफ कोई भी कठोर सबूत नहीं सोच सकता। फिर भी, एक दिलचस्प और चुनौतीपूर्ण सवाल जिसे आप करते हैं।


BTW, मिस्ड पॉइंट और विसंगतियों पर टिप्पणी करने के लिए स्वतंत्र महसूस करें। यहां तक ​​कि अपने आप को, मुझे लगता है जैसे मैं एक सरल उत्तर पर नाइटपैकिंग कर रहा हूं - हां, आप कर सकते हैं। ;-)
करोल जे। पिज़ाक

बहुत बहुत धन्यवाद करोल! यह उस तरह की जानकारी पर हाजिर है, जिसकी मुझे तलाश थी (और वास्तव में कहीं और नहीं मिली थी)। मेरा मुख्य कारण है कि मैंने यह सवाल पूछा है कि मैं जानना चाहता हूं कि क्या विंडोज एज़्योर में एफ़टीपी सर्वर सेट करना सुरक्षित है और निष्क्रिय मोड को केवल 1 पोर्ट तक बंद कर दें (क्योंकि एज़्योर समापन बिंदु को सीमित करता है)। मैंने इसकी कोशिश की है, यह काम करता है, और आपकी जानकारी के साथ मैं भी इसे करने के लिए सुरक्षित महसूस करता हूं। हालाँकि एकमात्र मुद्दा यह है कि एज़्योर लोड बैलेंसर फ़ाइल स्थानांतरण के दौरान 1 मिनट के बाद नियंत्रण कनेक्शन को गिरा देता है (क्योंकि यह निष्क्रिय है), इसलिए मैं इसे ठीक करने के लिए ज़िंदा रखने के साथ टीसीपी सुरंग पर काम कर रहा हूं।
कर्ट

1
मेरा मानना ​​है कि वास्तविक कारण यह है कि डेटा चैनल प्रोटोकॉल की कोई पहचान करने वाली जानकारी नहीं है। सर्वर केवल यह जानता है कि पोर्ट नंबर के आधार पर किस क्लाइंट से फाइल ट्रांसफर की जा रही है।
मोंटेस्टीउर

4

एफ़टीपी दो अलग-अलग कनेक्शनों पर निर्भर करता है, एक नियंत्रण या कमांड स्ट्रीम के लिए, और एक डेटा फ़ाइलों और निर्देशिका लिस्टिंग जैसी अन्य जानकारी के लिए। नियंत्रण स्ट्रीम को पारंपरिक TCP कनेक्शन पर ले जाया जाता है। क्लाइंट एक उच्च unprivileged पोर्ट से बांधता है और FTP सर्वर से कनेक्शन अनुरोध भेजता है, जो 21 पोर्ट के लिए बाध्य है। इस कनेक्शन का उपयोग कमांड पास करने के लिए किया जाता है।

पोर्ट या सक्रिय मोड में, क्लाइंट वें सर्वर को बताता है कि यह किस माध्यमिक, अनप्राइवल पोर्ट पर सुनेगा। सर्वर तब पोर्ट 20 से डेटा कनेक्शन की शुरुआत करता है जो अनपेक्षित पोर्ट को निर्दिष्ट क्लाइंट से करता है।

पैसिव मोड, एक नया तंत्र, क्लाइंट के वेब ब्राउजर होने पर डिफॉल्ट होता है। पोर्ट 20 से बंधा होने के बजाय, सर्वर क्लाइंट को बताता है कि डेटा ट्रांसफर के लिए किस पोर्ट का उपयोग करना है। फिर डेटा को क्लाइंट और सर्वर दोनों के बीच अनपेक्षित पोर्ट पर प्रसारित किया जाता है।

अधिक जानकारी के लिए, कृपया देखें:

http://tools.ietf.org/html/rfc959

संपादित करें

सर्वर को एक विशेष सिंगल पोर्ट पर लॉक करने के रूप में, यह कुछ सर्वरों में संभव हो सकता है। Vsftpd में उदाहरण के लिए, आपके पास निम्न कॉन्फ़िगरेशन विकल्प हैं।

   pasv_max_port
          The maximum port to allocate for PASV style data connections. Can be used to specify a narrow port range to assist firewalling.

          Default: 0 (use any port)

   pasv_min_port
          The minimum port to allocate for PASV style data connections. Can be used to specify a narrow port range to assist firewalling.

          Default: 0 (use any port)

यदि आप दोनों बंदरगाहों को एक ही पर सेट करते हैं, जैसे कि pasv_max_port = 12345, pasv_min_port = 12345, तो आप वह प्राप्त करने में सक्षम हो सकते हैं जो आप बाद में हैं। मुझे संदेह है कि यह आपके द्वारा समर्थित सर्वर के समवर्ती FTP सत्रों की संख्या को सीमित करेगा। कृपया सुनिश्चित करने के लिए परीक्षण करें।


1
आपके जवाब के लिए धन्यवाद। हालाँकि, मुझे यह जानने में दिलचस्पी है कि निष्क्रिय मोड में, ftp सर्वर सभी ग्राहकों को डेटा चैनल के लिए समान पोर्ट (उदाहरण के लिए पोर्ट 1024) का उपयोग करने के लिए नहीं कह सकता है क्योंकि प्रत्येक ग्राहक को एक से यादृच्छिक पोर्ट देने का विरोध किया जाता है। निर्दिष्ट पोर्ट रेंज? तकनीकी कारण क्या हैं, यदि कोई हो, तो एफ़टीपी सर्वर पोर्ट रेंज कॉन्फ़िगरेशन में केवल एक ही डेटा पोर्ट को निर्दिष्ट करना क्यों संभव है या अनुशंसित नहीं है? मुझे लगता है कि एक ftp सर्वर केवल एक डेटा चैनल पोर्ट पर कई / बहुत से एक साथ कनेक्शन को संभाल सकता है, नहीं?
कर्ट

1
क्योंकि एफटीपी शैतान है और अंत में उसे मरने की जरूरत है। : D

1
सर्वर को एक विशेष सिंगल पोर्ट पर लॉक करने के संबंध में आपके संपादन के लिए धन्यवाद। मैंने वास्तव में उस पद्धति के बारे में सोचा है (और यह वही है जिसे मैं पूरा करना चाहता हूं), लेकिन जो मुझे काफी समझ में नहीं आता है वह यह है कि समवर्ती एफ़टीपी सत्रों की संख्या को सीमित किया जा सकता है जो सर्वर समर्थन कर सकता है। वास्तव में यह क्या है जो इस मामले में सर्वर को कई समवर्ती एफ़टीपी सत्रों का समर्थन करने से रोक देगा? क्योंकि कोई भी FTP सर्वर स्पष्ट रूप से पोर्ट 21 पर कई समवर्ती कनेक्शन का समर्थन करता है, इसलिए पोर्ट 12345 पर भी क्यों नहीं, आपके उदाहरण से लिया गया है? मुझे इसका अधिक गहराई से परीक्षण करना होगा।
कर्ट

यह समवर्ती कनेक्शन की संख्या को सीमित नहीं कर सकता है। यह वास्तव में इस बात पर निर्भर करता है कि कैसे सर्वर कई सत्रों में कनेक्शन का ट्रैक रखता है। इसे आजमा कर देखें!
dmourati

btw मुझे स्वीकार किए गए उत्तर के रूप में किसी भी जवाब को चिह्नित करने के साथ इंतजार करना होगा, क्योंकि कई समवर्ती एफ़टीपी सत्रों के संबंध में एक स्पष्ट और तकनीकी व्याख्या जब डेटा पोर्ट को केवल एक पोर्ट पर लॉक किया जाता है, तो मुझे गहराई से जानने में सबसे अधिक दिलचस्पी है। यह कब काम कर सकता है, कब नहीं चलेगा, इसकी सिफारिश क्यों नहीं की जा सकती है, आदि
कर्ट

1

एफ़टीपी सर्वर उपयोग किए गए पोर्ट नंबर के आधार पर, केवल स्रोत आईपी के आधार पर अपने नियंत्रण पोर्ट कनेक्शन के लिए ग्राहक के डेटा पोर्ट कनेक्शन से मेल खाने में सक्षम हो सकता है।

यह एफएक्सपी (जो एक बुरी चीज नहीं हो सकती है) को तोड़ देगा जहां ग्राहक दो सर्वरों (एक निष्क्रिय मोड में) से जुड़ता है, फिर निष्क्रिय सर्वर की पोर्ट जानकारी प्राप्त करने के बाद, सक्रिय मोड सर्वर को एक PORT कमांड के रूप में पास करता है ताकि सक्रिय हो मोड सर्वर निष्क्रिय मोड सर्वर से जुड़ता है।

मुझे संदेह है कि कई सर्वर डेटा सॉकेट नहीं बनाते हैं जब तक कि क्लाइंट निष्क्रिय मोड का अनुरोध नहीं करता है। उस स्थिति में, यदि दो क्लाइंट एक ही समय में निष्क्रिय मोड का अनुरोध करते हैं, तो बनाई गई सॉकेट्स को अद्वितीय पोर्ट संख्याओं की आवश्यकता होगी।

EDIT : एफ़टीपी सर्वर ऐसा नहीं करने के एक और कारण के बारे में सोचते हैं: सर्वर एक ही आईपी पते के साथ कई उपयोगकर्ताओं को नहीं बता सकता है।


धन्यवाद। मुझे लगता है कि मुझे समझ में नहीं आता है कि दो या दो से अधिक क्लाइंट एक ही समय में निष्क्रिय मोड का अनुरोध करते हैं तो उन डेटा चैनल सॉकेट्स को एक अद्वितीय पोर्ट (सर्वर पर) की आवश्यकता क्यों है? क्योंकि मैं सोच रहा हूं, दो या अधिक ग्राहक स्पष्ट रूप से एक ही समय में 21 पोर्ट से जुड़े हो सकते हैं, इसलिए एक ही समय में 1024 (डेटा चैनल के लिए) पोर्ट क्यों नहीं कहेंगे? मुझे लगता है कि यह एक मूर्खतापूर्ण प्रश्न हो सकता है, लेकिन मेरा अस्वीकरण यह है कि मैं बहुत लंबे समय से पहले से ही जाग रहा हूं :)
कर्ट

सॉकेट अपने आप में विशिष्ट होना चाहिए। आप पोर्ट पर सुनने वाले एक सॉकेट बना सकते हैं और उस एक सॉकेट से जितने चाहें उतने कनेक्शन स्वीकार कर सकते हैं, या आप अलग-अलग पोर्ट पर प्रति उपयोगकर्ता एक सॉकेट बना सकते हैं और प्रत्येक सॉकेट से एक कनेक्शन स्वीकार कर सकते हैं। यदि आपने सर्वर को प्रति उपयोगकर्ता एक सॉकेट काम करने के लिए डिज़ाइन किया है, तो आप अनिवार्य रूप से इसे फिर से चारों ओर से बदलने के लिए सब कुछ फिर से लिखेंगे, और अंत में, साझा किए गए मेजबानों या उसी आईपी पते के पीछे के लोग सक्षम नहीं होंगे। एक ही समय में कनेक्ट करें, क्योंकि उनके डेटा कनेक्शन को अलग से बताने का कोई तरीका नहीं होगा।
डर्फ़के

धन्यवाद। मैं इस विषय पर प्राप्त सभी उत्तरों के लिए आभारी हूं और मुझे लगता है कि मैं अब इस पर एक बहुत अच्छा संभालना शुरू कर रहा हूं।
कर्ट

0

बंदरगाहों पर 21 या 80 (सभी प्रसिद्ध बंदरगाहों पर), एक सेट प्रोटोकॉल है, जो क्लाइंट यह बताने के लिए उपयोग करता है कि वह क्या चाहता है। इस तरह से सर्वर को पता होता है कि आप किससे कनेक्ट कर रहे हैं। डेटा कनेक्शन पोर्ट पर, कोई प्रोटोकॉल नहीं है। वह सब जो सर्वर जानता है - केवल एक चीज जो उस कनेक्शन के बारे में अद्वितीय है - वह पोर्ट नंबर है जिसे आप कनेक्ट करते हैं।

यदि आप हर बार उसी पोर्ट से कनेक्ट होते हैं, तो सर्वर यह नहीं बता पाएगा कि आप किस फ़ाइल के लिए कनेक्ट कर रहे हैं। पोर्ट नंबर नियंत्रण कनेक्शन और डेटा कनेक्शन पर स्थानांतरण अनुरोध के बीच एक लिंक के रूप में कार्य करता है।

यदि दो क्लाइंट एक ही समय में एक ट्रांसफर का अनुरोध करने के लिए थे, जब सर्वर एक पोर्ट पर एक कनेक्शन स्वीकार करता है, तो सर्वर यह नहीं बता पाएगा कि किस फाइल को ट्रांसफर करना है। बेशक, सर्वर निर्णय के लिए एक क्लाइंट आईपी का उपयोग कर सकता है (वास्तव में कई एफ़टीपी सर्वर यह पुष्टि करते हैं कि क्लाइंट आईपी नियंत्रण कनेक्शन पर इस्तेमाल किए गए आईपी से मेल खाता है, सुरक्षा के लिए)।

लेकिन यह काम नहीं करेगा:

  • एक ही मशीन से कई कनेक्शन (अधिकांश एफ़टीपी ग्राहक समानांतर स्थानांतरण / कतारों का समर्थन करते हैं)।
  • समान (कॉरपोरेट) नेटवर्क के भीतर अलग-अलग मशीनों से कनेक्शन, क्योंकि उनके पास एक ही बाहरी आईपी है।

यह भी देखें एफ़टीपी डेटा कनेक्शन का पुन: उपयोग


-1

मैंने इसका उल्लेख यहां नहीं देखा, इसलिए मैं इसे अंदर फेंक दूंगा। पोर्ट रेंज असाइनमेंट का मतलब एक तरह की सुरक्षा सुविधा होना था, जहां आप डेटा ट्रैफ़िक के लिए एक पोर्ट की निगरानी नहीं कर सकते थे, डेटा को एक यादृच्छिक पोर्ट पर भेजा गया था वह सीमा, जिसे आसानी से निर्धारित नहीं किया जा सकता है। अस्पष्टता के माध्यम से सुरक्षा।


1
क्या आपके पास इस दावे का कोई संदर्भ है?
मार्टिन प्रिक्रील

-2

ऐसा लगता है जैसे आप नियंत्रण पोर्ट और डेटा पोर्ट के बारे में पहले से ही जानते हैं इसलिए मैं पीछा करना छोड़ दूंगा। वेबसाइटों के लिए पोर्ट 80 की तरह ही, नियंत्रण पोर्ट प्रकृति से संचार को तोड़ रहे हैं। वे कई अलग-अलग अनुरोधों को संभाल सकते हैं (एक साथ नहीं, लेकिन करीब हैं क्योंकि वे पूरा करने के लिए बहुत जल्दी हैं)। दूसरी ओर डेटा पोर्ट एफ़टीपी के साथ जादू होता है। यदि आप अपने आप को एक एकल डेटा पोर्ट तक सीमित करते हैं, तो एक समय में केवल एक डेटा ट्रांसफर होता है। एक बड़ी फ़ाइल स्थानांतरण पर विचार करें। एकल डेटा पोर्ट खुला होने से, स्थानांतरण के पूरा होने तक कोई अन्य डेटा स्थानांतरित नहीं हो सकता है। इसका मतलब यह है कि स्थानांतरित करते समय, एक दूसरा उपयोगकर्ता भी ftp फ़ोल्डर की निर्देशिका सामग्री को सूचीबद्ध करने में सक्षम नहीं होगा। यकीन है कि वे सफलतापूर्वक लॉग इन करने में सक्षम होंगे, लेकिन उनका व्यवहार वैसा ही होगा जैसा कि डेटा पोर्ट बिल्कुल नहीं खुला था। यदि आप इसके साथ ठीक हैं, एक बंदरगाह आपके लिए बहुत अच्छा काम करेगा। ध्यान रखें कि कुछ ftp क्लाइंट (मैं बल्ले से 1 राइट ऑफ के बारे में सोच सकता हूं) डाउनलोड करने के लिए एक ही सत्र के भीतर कई कनेक्शन सेट करता हूं। तो इस क्लाइंट के लिए, एकल पोर्ट परिदृश्य में, 1 बड़ी फ़ाइल और 4 छोटी फ़ाइलों के बैच हस्तांतरण पर विचार करें।

क्लाइंट पहली बड़ी फ़ाइल के लिए ट्रांसफर शुरू करता है, सभी हंकी डोरी। फिर, उस स्थानांतरण के चलते समय, यह एक दूसरी फ़ाइल शुरू करता है। कोई पाँसा नहीं। फिर तीसरा, ज़िल्च (तकनीकी शब्द) भी। अंत में, लॉग को 1 सफल और 4 असफल स्थानान्तरण दिखाना चाहिए। आसपास का काम क्लाइंट को प्रति सत्र एक ही कनेक्शन तक सीमित करना होगा और आपको जाना अच्छा होगा (यह मानकर कि किसी और ने अपना पैर दरवाजे पर नहीं लगाया, बहुत ही माइक्रोसेकंड एक हस्तांतरण पूरा हो गया और दूसरा अभी तक शुरू नहीं हुआ है। )


2
क्या? यह पूरी तरह से गलत है। टीसीपी सॉकेट को 4-ट्यूपल (स्रोत आईपी, स्रोत पोर्ट, गंतव्य पोर्ट, गंतव्य आईपी) द्वारा परिभाषित किया गया है। कई टीसीपी सॉकेट्स को एक ही गंतव्य पोर्ट से एक साथ बनाया और परोसा जा सकता है: आईपी मैपिंग। एफ़टीपी सर्वर प्रक्रिया एक ही समय में दो और किसी भी नेटवर्क क्लाइंट से डेटा की सेवा कर सकती है।
EEAA
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.