آشنائی با پروتكل FTP
ويژگی های پروتكل FTP
-
-
پروتكل FTP ، اولين تلاش انجام شده برای ايجاد يك استاندارد به منظور مبادله فايل بر روی شبكه های مبتنی بر پروتكل TCP/IP است كه از اوايل سال 1970 مطرح و مشخصات استاندارد آن طی RFC 959 در اكتبر سال 1985 ارائه گرديد .
-
پروتكل FTP دارای حداكثر انعطاف لازم و در عين حال امكان پذير به منظور استفاده در شبكه های مختلف با توجه به نوع پروتكل شبكه است .
-
پروتكل FTP از مدل سرويس گيرنده - سرويس دهنده تبعيت می نمايد . برخلاف HTTP كه يك حاكم مطلق در عرصه مرورگرهای وب و سرويس دهندگان وب است ، نمی توان ادعای مشابهی را در رابطه با پروتكل FTP داشت و هم اينك مجموعه ای گسترده از سرويس گيرندگان و سرويس دهندگان FTP وجود دارد .
-
برای ارسال فايل با استفاده از پروتكل FTP به يك سرويس گيرنده FTP نياز می باشد . ويندوز دارای يك برنامه سرويس گيرنده FTP از قبل تعبيه شده می باشد ولی دارای محدوديت های مختص به خود می باشد . در اين رابطه نرم افزارهای متعددی تاكنون طراحی و پياده سازی شده است:
ulletProof FTP ، WS FTP Professional، FTP Explorer و Smart FTP نمونه هائی در اين زمينه می باشند . -
پروتكل FTP را می توان به عنوان يك سيستم پرس وجو نيز تلقی نمود چراكه سرويس گيرندگان و سرويس دهندگان گفتگوی لازم به منظور تائيد يكديگر و ارسال فايل را انجام می دهند. علاوه بر اين، پروتكل فوق مشخص می نمايد كه سرويس گيرنده و سرويس دهنده، داده را بر روی كانال گفتگو ارسال نمی نمايند . در مقابل ، سرويس گيرنده و سرويس دهنده در خصوص نحوه ارسال فايل ها بر روی اتصالات مجزا و جداگانه ( يك اتصال برای هر ارسال داده ) با يكديگر گفتگو خواهند كرد ( نمايش ليست فايل های موجود در يك دايركتوری نيز به عنوان يك ارسال فايل تلقی می گردد ) .
-
پروتكل FTP امكان استفاده از سيستم فايل را مشابه پوسته يونيكس و يا خط دستور ويندوز در اختيار كاربران قرار می دهد .
-
سرويس گيرنده در ابتدا يك پيام را برای سرويس دهنده ارسال و سرويس دهنده نيز به آن پاسخ خواهد داد و در ادامه ارتباط غيرفعال می گردد . وضعيت فوق با ساير پروتكل هائی كه به صورت تراكنشی كار می كنند ، متفاوت می باشد ( نظير پروتكل HTTP ) . برنامه های سرويس گيرنده زمانی قادر به شبيه سازی يك محيط تراكنشی می باشند كه از مسائلی كه قرار است در آينده محقق شوند ، آگاهی داشته باشند . در واقع ، پروتكل FTP يك دنباله stateful از يك و يا چندين تراكنش است.
-
سرويس گيرندگان ، مسئوليت ايجاد و مقداردهی اوليه درخواست ها را برعهده دارند كه با استفاده از دستورات اوليه FTP انجام می گردد. دستورات فوق ، عموما" سه و يا چهار حرفی می باشند (مثلا" برای تغيير دايركتوری از دستور CWD استفاده می شود ). سرويس دهنده نيز بر اساس يك فرمت استاندارد به سرويس گيرندگان پاسخ خواهد داد ( سه رقم كه به دنبال آن از space استفاده شده است به همراه يك متن تشريحی ) . سرويس گيرندگان می بايست صرفا" به كد عددی نتيجه استناد نمايند چراكه متن تشريحی تغيير پذير بوده و در عمل برای اشكال زدائی مفيد است ( برای كاربران حرفه ای ) .
-
پروتكل FTP دارای امكانات حمايتی لازم برای ارسال داده با نوع های مختلف می باشد . دو فرمت متداول، اسكی برای متن ( سرويس گيرنده با ارسال دستور TYPE A ،موضوع را به اطلاع سرويس دهنده می رساند ) و image برای داده های باينری است ( توسط TYPE I مشخص می گردد) . ارسال داده با فرمت اسكی در مواردی كه ماشين سرويس دهنده و ماشين سرويس گيرنده از استانداردهای متفاوتی برای متن استفاده می نمايند ، مفيد بوده و يك سرويس گيرنده می تواند پس از دريافت داده آن را به فرمت مورد نظر خود ترجمه و استفاده نمايد . مثلا" در نسخه های ويندوز از يك دنباله carriage return و linefeed برای نشان دادن انتهای خط استفاده می گردد در صورتی كه در سيستم های مبتنی بر يونيكس صرفا" از يك linefeed استفاده می شود . برای ارسال هرنوع داده كه به ترجمه نياز نداشته باشد،می توان از ارسال باينری استفاده نمود.
-
اتخاذ تصميم در رابطه با نوع ارسال فايل ها در اختيار سرويس گيرنده است ( برخلاف HTTP كه می تواند به سرويس گيرنده نوع داده ارسالی را اطلاع دهد ) . معمولا" سرويس گيرندگان ارسال باينری را انتخاب می نمايند و پس از دريافت فايل ، ترجمه لازم را انجام خواهند داد . ارسال باينری ذاتا" دارای كارآئی بيشتری است چراكه سرويس دهنده و سرويس گيرنده نيازی به انجام تراكنش های on the fly نخواهند داشت . ارسال اسكی گزينه پيش فرض انتخابی توسط پروتكل FTP است و در صورت نياز به ارسال باينری ، سرويس گيرنده می بايست اين موضوع را از سرويس دهنده درخواست نمايد .
-
يك اتصال پروتكل TCP/IP ( نسخه شماره چهار) شامل دو نقطه مجزا می باشد كه هر نقطه از يك آدرس IP و يك شماره پورت استفاده می نمايد . برقراری ارتباط بين يك سرويس گيرنده و يك سرويس دهنده منوط به وجود چهار عنصر اطلاعاتی است : آدرس سرويس دهنده ،پورت سرويس دهنده ، آدرس سرويس گيرنده و پورت سرويس گيرنده . در زمان برقراری يك ارتباط ، سرويس گيرنده از يك شماره پورت استفاده می نمايد . اين شماره پورت می تواند متناسب با نوع عملكرد برنامه سرويس گيرنده به صورت اختياری و يا اجباری باشد . مثلا" برخی برنامه های سرويس گيرنده به منظور ارتباط با سرويس دهنده ، نيازمند استفاده از يك شماره پورت خاص می باشند ( نظير برنامه های سرويس گيرنده وب و يا مرورگرهای وب كه از پورت شماره 80 به منظور ارتباط با سرويس دهنده وب استفاده می نمايد) . در مواردی كه الزامی در خصوص شماره پورت وجود ندارد از يك شماره پورت موقتی و يا ephemeral استفاده می گردد . اين نوع پورت ها موقتی بوده و توسط IP stack ماشين مربوطه به متقاضيان نسبت داده شده و پس از خاتمه ارتباط ، پورت آزاد می گردد . با توجه به اين كه اكثر IP Stacks بلافاصله از پورت موقت آزاد شده استفاده نخواهند كرد ( تا زمانی كه تمام pool تكميل نشده باشد ) ،در صورتی كه سرويس گيرنده مجددا" درخواست برقراری يك ارتباط را نمايد ، يك شماره پورت موقتی ديگر به وی تخصيص داده می شود .
-
پروتكل FTP منحصرا" از پروتكل TCP استفاده می نمايد( هرگز از پروتكل UDP استفاده نمی شود) . معمولا" پروتكل های لايه Application ( با توجه به مدل مرجع OSI ) از يكی از پروتكل های TCP و يا UDP استفاده می نمايند ( به جزء پروتكل DNS ) . پروتكل FTP نيز از برخی جهات شرايط خاص خود را دارد و برای انجام وظايف محوله از دو پورت استفاده می نمايد . اين پروتكل معمولا" از پورت شماره 20 برای ارسال داده و از پورت 21 برای گوش دادن به فرامين استفاده می نمايد . توجه داشته باشيد كه برای ارسال داده همواره از پورت 20 استفاده نمی گردد و ممكن است در برخی موارد از پورت های ديگر استفاده شود .
-
اكثر سرويس دهندگان FTP از روش خاصی برای رمزنگاری اطلاعات استفاده نمی نمايند و در زمان login سرويس گيرنده به سرويس دهنده ، اطلاعات مربوط به نام و رمز عبور كاربر به صورت متن معمولی در شبكه ارسال می گردد . افرادی كه دارای يك Packet sniffer بين سرويس گيرنده و سرويس دهنده می باشند ، می توانند به سادگی اقدام به سرقت نام و رمز عبور نمايند . علاوه بر سرقت رمزهای عبور ، مهاجمان می توانند تمامی مكالمات بر روی اتصالات FTP را شنود و محتويات داده های ارسالی را مشاهده نمايند . پيشنهادات متعددی به منظور ايمن سازی سرويس دهنده FTP مطرح می گردد ولی تا زمانی كه رمزنگاری و امكانات حفاظتی در سطح لايه پروتكل IP اعمال نگردد ( مثلا" رمزنگاری توسط IPsecs ) ، نمی بايست از FTP استفاده گردد خصوصا" اگر بر روی شبكه اطلاعات مهم و حياتی ارسال و يا دريافت می گردد .
-
همانند بسياری از پروتكل های لايه Application ، پروتكل FTP دارای كدهای وضعيت خطاء مختص به خود می باشد ( همانند HTTP ) كه اطلاعات لازم در خصوص وضعيت ارتباط ايجاد شده و يا درخواستی را ارائه می نمايد . زمانی كه يك درخواست ( GET , PUT ) برای يك سرويس دهنده FTP ارسال می گردد ، سرويس دهنده پاسخ خود را به صورت يك رشته اعلام می نمايد . اولين خط اين رشته معمولا" شامل نام سرويس دهنده و نسخه نرم افزار FTP است .در ادامه می توان دستورات GET و يا PUT را برای سرويس دهنده ارسال نمود . سرويس دهنده با ارائه يك پيام وضعيت به درخواست سرويس گيرندگان پاسخ می دهد . كدهای وضعيت برگردانده شده را می توان در پنج گروه متفاوت تقسيم نمود :
كدهای 1xx : پاسخ اوليه
كدهای 2xx : درخواست بدون خطاء اجراء گرديد .
كدهای 3xx : به اطلاعات بشتری نياز است .
كدهای 4xx : يك خطاء موقت ايجاد شده است .
كدهای 5xx : يك خطاء دائمی ايجاد شده است .
متداولترين كدهای وضعيت FTP به همراه مفهوم هريك در جدول زير نشان داده شده است :
110 Restart reply
120 Service ready in x minutes
125 Connection currently open, transfer starting
150 File status okay, about to open data
200 Command okay
202 Command not implemented, superfluous at this site
211 System status/help reply
212 Directory status
213 File status
214 System Help message
215 NAME system type
220 Service ready for next user.
221 Service closing control connection. Logged off where appropriate
225 Data connection open; no transfer in progress.
226 Closing data connection. Requested action successful
227 Entering Passive Mode
230 User logged in, continue
250 Requested file action okay, completed
257 "PATHNAME" created.
331 User name okay, need password.
332 Need account for login
350 Requested file action pending further information.
421 Service not available, closing control connection. 425 Can't open data connection 426 Connection closed; transfer aborted.
450 Requested file action not taken. File not available - busy etc..
451 Request aborted: error on server in processing.
452 Requested action not taken. Insufficient resources on system
500 Syntax error, command unrecognized
501 Syntax error in parameters or arguments.
502 Command not implemented.
503 Bad sequence of commands
504 Command not implemented for that parameter.
530 Not logged in.
532 Need account for storing files
550 Requested action not taken. File unavailable
552 Requested file action aborted. Exceeded storage allocation
553 Requested action not taken. File name not allowed مفهوم برخی از كدهای متداول 226
230 زمانی اين كد نمايش داده می شود كه يك سرويس گيرنده رمز عبور خود را به درستی درج و عمليات login با موفقيت انجام شده باشد .
231 كد فوق نشاندهنده دريافت username ارسالی سرويس گيرنده توسط سرويس دهنده می باشد و تائيدی است بر اعلام وصول Username ( نه صحت آن ) .
501 دستور تايپ شده دارای خطاء گرامری است و می بايست مجددا" دستور تايپ گردد .
530 عمليات login با موفقيت انجام نشده است . ممكن است Username و يا رمز عبور اشتباه باشد .
550 فايل مشخص شده در دستور تايپ شده نامعتبر است .
همانگونه كه در بخش اول اشاره گرديد ، يك اتصال پروتكل TCP/IP ( نسخه شماره چهار) شامل دو نقطه مجزا می باشد كه هر نقطه از يك آدرس IP و يك شماره پورت استفاده می نمايد . برقراری ارتباط بين يك سرويس گيرنده و يك سرويس دهنده منوط به وجود چهار عنصر اطلاعاتی است : آدرس سرويس دهنده ،پورت سرويس دهنده ، آدرس سرويس گيرنده و پورت سرويس گيرنده . در زمان برقراری يك ارتباط ، سرويس گيرنده از يك شماره پورت استفاده می نمايد . اين شماره پورت می تواند متناسب با نوع عملكرد برنامه سرويس گيرنده به صورت اختياری و يا اجباری باشد . مثلا" برخی برنامه های سرويس گيرنده به منظور ارتباط با سرويس دهنده ، نيازمند استفاده از يك شماره پورت خاص می باشند ( نظير برنامه های سرويس گيرنده وب و يا مرورگرهای وب كه از پورت شماره 80 به منظور ارتباط با سرويس دهنده وب استفاده می نمايد) . در مواردی كه الزامی در خصوص شماره پورت وجود ندارد از يك شماره پورت موقتی و يا ephemeral استفاده می گردد . اين نوع پورت ها موقتی بوده و توسط IP stack ماشين مربوطه به متقاضيان نسبت داده شده و پس از خاتمه ارتباط ، پورت آزاد می گردد . با توجه به اين كه اكثر IP Stacks بلافاصله از پورت موقت آزاد شده استفاده نخواهند كرد ( تا زمانی كه تمام pool تكميل نشده باشد ) ،در صورتی كه سرويس گيرنده مجددا" درخواست برقراری يك ارتباط را نمايد ، يك شماره پورت موقتی ديگر به وی تخصيص داده می شود .
پس از اين مقدمه ، در ادامه به بررسی هر يك از روش های Active و Passive در پروتكل FTP خواهيم پرداخت . Active Mode
Active Mode ، روش سنتی ارتباط بين يك سرويس گيرنده FTP و يك سرويس دهنده می باشد كه عملكرد آن بر اساس فرآيند زير است :
-
-
سرويس گيرنده يك ارتباط با پورت 21 سرويس دهنده FTP برقرار می نمايد . پورت 21 ، پورتی است كه سرويس دهنده به آن گوش فرا می دهد تا از صدور فرامين آگاه و آنان را به ترتيب پاسخ دهد . سرويس گيرنده برای برقراری ارتباط با سرويس دهنده از يك پورت تصادفی و موقتی ( بزرگتر از 1024 ) استفاده می نمايد( پورت x ).
-
سرويس گيرنده شماره پورت لازم برای ارتباط سرويس دهنده با خود را از طريق صدور دستور PORT N+1 به وی اطلاع می دهد ( پورت x+1 )
-
سرويس دهنده يك ارتباط را از طريق پورت 20 خود با پورت مشخص شده سرويس گيرنده ( پورت x+1 ) برقرار می نمايد .
IP: 192.168.1.2 متصل و سپس داده را ارسال نمائيد .
سرويس گيرنده: تائيد دستور سرويس دهنده
Passive Mode
در Passive Mode ، كه به آن " مديريت و يا اداره سرويس گيرندگان FTP" نيز گفته می شود از فرآيند زير استفاده می گردد :
-
-
سرويس گيرنده دو پورت را فعال می نمايد ( پورت x و x+1 )
-
ارتباط اوليه از طريق پورت x سرويس گيرنده با پورت 21 سرويس دهنده آغاز می گردد .
-
سرويس دهنده يك پورت را فعال ( Y ) و به سرويس گيرنده شماره پورت را اعلام می نمايد .
-
در ادامه سرويس گيرنده يك اتصال از طريق پورت x+1 با پورت y سرويس دهنده برقرار می نمايد .
سرويس دهنده: با من از طريق پورت 4023 بر روی آدرس IP: 192.168.1.25 ارتباط برقرار نمائيد .
متاسفانه تمامی سرويس گيرندگان FTP از Passive Mode حمايت نمی نمايند . اگر يك سرويس گيرنده بتواند به يك سرويس دهنده login نمايد ولی قادر به ارسال داده بر روی آن نباشد ، نشاندهنده اين موضوع است كه فايروال و يا Gateway برای استفاده از Passive Mode به درستی پيكربندی نشده است .
ملاحضات امنيتی
در صورتی كه فايروال های موجود بر روی كامپيوترهای سرويس گيرنده به درستی پيكربندی نگردند ، آنان نمی توانند از Active Mode استفاده نمايند . در Passive Mode استحكام سيستم امنيتی در سمت سرويس دهنده و توسط فايروال مربوطه انجام خواهد شد . بنابراين لازم است به سرويس دهنده اجازه داده شود كه به اتصالات هر پورت بالاتر از 1024 پاسخ دهد . ترافيك فوق ، معمولا" توسط فايروال سرويس دهنده بلاك می گردد . در چنين شرايطی امكان استفاده از Passive Mode وجود نخواهد داشت .
Passive Mode و يا Active Mode ؟
با توجه به مستندات درج شده در RFC 1579 ، استفاده از Passive Mode به دلايل متعددی به Active Mode ترجيح داده می شود :
-
-
تعداد سرويس دهندگان موجود بر روی اينترنت به مراتب كمتر از سرويس گيرندگان می باشد .
-
با استفاده از امكانات موجود می توان سرويس دهندگان را پيكربندی تا بتوانند از مجموعه پورت های محدود و تعريف شده ای با در نظر گرفتن مسائل امنيتی ، استفاده نمايند.
پيكربندی فايروال
جدول زير پيكربندی فايروال در Active Mode و Passive Mode را نشان می دهد .
Server Inbound
Server Inbound port 21 and any port >1024 from client/anywhere, from any port >1024
Server Outbound port 21 and any port >1024 to client/anywhere, to any port >1024
Client Inbound Return traffic, any port > 1024 from server using any port >1024
و اما يك نكته ديگر در رابطه با پروتكل FTP !
در صورتی كه در زمان دريافت يك فايل با استفاده از پروتكل FTP مشكلات خاصی ايجاد كه منجر به قطع ارتباط با سرويس دهنده FTP گردد ، سرويس گيرنده می تواند با مشخص كردن يك offset از فايل دريافتی به سرويس دهنده اعلام نمايد كه عمليات ارسال را از جائی كه ارتباط قطع شده است ، ادامه دهد ( سرويس گيرنده از محلی شروع به دريافت فايل می نمايد كه ارتباط غيرفعال شده بود ) . استفاده از ويژگی فوق به امكانات سرويس دهنده FTP بستگی دارد .
منبع : www.srco.ir
این وبلاگ , وبلاگی است مستقل که اخبار , وقایع , اتفاقات و تمامی موضوعات مرتبط با پردیس بین الملل صنعتی شریف در کیش را انعکاس میدهد.