امروزه از پروتکل هاي متعددي در شبکه هاي کامپيوتري استفاده مي گردد که صرفا" تعداد اندکي از آنان به منظور انتقال داده طراحي و پياده سازي شده اند . اينترنت نيز به عنوان يک شبکه گسترده از اين قاعده مستثني نبوده و در اين رابطه از پروتکل هاي متعددي استفاده مي شود.
براي بسياري از کاربران اينترنت همه چيز محدود به وب و پروتکل مرتبط با آن يعني HTTP است ، در صورتي که در اين عرصه از پروتکل هاي متعدد ديگري نيز استفاده مي گردد. FTP نمونه اي در اين زمينه است .
پروتکل FTP چيست ؟
تصوير اوليه اينترنت در ذهن بسياري از کاربران، استفاده از منابع اطلاعاتي و حرکت از سايتي به سايت ديگر است و شايد به همين دليل باشد که اينترنت در طي ساليان اخير به سرعت رشد و متداول شده است . بسياري از کارشناسان اين عرصه اعتقاد دارند که اينترنت گسترش و عموميت خود را مديون سرويس وب مي باشد .
فرض کنيد که سرويس وب را از اينترنت حذف نماييم . براي بسياري از ما اين سوال مطرح خواهد شد که چه نوع استفاده اي را مي توانيم از اينترنت داشته باشيم ؟ در صورت تحقق چنين شرايطي ، يکي از عملياتي که کاربران قادر به انجام آن خواهند بود ، دريافت داده ، فايل هاي صوتي ، تصويري و ساير نمونه فايل هاي ديگر با استفاده از پروتکل FTP (برگرفته از File Transfer Protocol ) است.
ويژگي هاي پروتکل 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 به همراه مفهوم هريک در جدول زير نشان داده شده است :
کدهاي وضعيت سري 100 |
110 | Restart reply |
120 | Service ready in x minutes |
125 | Connection currently open, transfer starting |
150 | File status okay, about to open data |
کدهاي وضعيت سري 200 |
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. |
کدهاي وضعيت سري 300 |
331 | User name okay, need password. |
332 | Need account for login |
350 | Requested file action pending further information. |
کدهاي وضعيت سري 400 |
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 |
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 | فايل مشخص شده در دستور تايپ شده نامعتبر است . |
FTP ، يک پروتکل ارسال فايل است که با استفاده از آن سرويس گيرندگان مي توانند به سرويس دهندگان متصل و صرفنظر از نوع سرويس دهنده اقدام به دريافت و يا ارسال فايل نمايند . پروتکل FTP به منظور ارايه خدمات خود از دو حالت متفاوت استفاده مي نمايد : Active Mode و Passive Mode . مهمترين تفاوت بين روش هاي فوق جايگاه سرويس دهنده و يا سرويس گيرنده در ايجاد و خاتمه يک ارتباط است .
همانگونه که در بخش اول اشاره گرديد ، يک اتصال پروتکل 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 ) برقرار مي نمايد .
لطفا" به من از طريق پورت 1931 بر روي آدرس IP: 192.168.1.2 متصل و سپس داده را ارسال نماييد . | سرويس گيرنده |
تاييد دستور | سرويس دهنده |
در فرآيند فوق ، ارتباط توسط سرويس گيرنده آغاز و پاسخ به آن توسط سرويس دهنده و از طريق پورت x+1 که توسط سرويس گيرنده مشخص شده است ، انجام مي شود . در صورتي که سرويس گيرنده از سيستم ها و دستگاه هاي امنيتي خاصي نظير فايروال استفاده کرده باشد ، مي بايست تهميدات لازم به منظور ارتباط کامپيوترهاي ميزبان راه دور به سرويس گيرنده پيش بيني تا آنان بتوانند به هر پورت بالاتر از 1024 سرويس گيرنده دستيابي داشته باشند . بدين منظور لازم است که پورت هاي اشاره شده بر روي ماشين سرويس گيرنده open باشند . اين موضوع مي تواند تهديدات و چالش هاي امنيتي متعددي را براي سرويس گيرندگان به دنبال داشته باشد .
Passive Mode
در Passive Mode ، که به آن " مديريت و يا اداره سرويس گيرندگان FTP" نيز گفته مي شود از فرآيند زير استفاده مي گردد :
• سرويس گيرنده دو پورت را فعال مي نمايد ( پورت x و x+1 )
• ارتباط اوليه از طريق پورت x سرويس گيرنده با پورت 21 سرويس دهنده آغاز مي گردد .
• سرويس دهنده يک پورت را فعال ( Y ) و به سرويس گيرنده شماره پورت را اعلام مي نمايد .
• در ادامه سرويس گيرنده يک اتصال از طريق پورت x+1 با پورت y سرويس دهنده برقرار مي نمايد .
لطفا" به من بگوييد که از کجا مي توانم داده را دريافت نمايم | سرويس گيرنده |
با من از طريق پورت 4023 بر روي آدرس IP: 192.168.1.25 ارتباط برقرار نماييد . | سرويس دهنده |
در فرآيند فوق ، سرويس گيرنده داراي نقش محوري است و فايروال موجود بر روي سرويس گيرنده مي تواند درخواست هاي دريافتي غيرمجاز به پورت هاي بالاتر از 1024 را به منظور افزايش امنيت بلاک نمايند . در صورتي که بر روي کامپيوترهاي سرويس دهنده نيز فايروال نصب شده باشد ، مي بايست پيکربندي لازم به منظور استفاده از پورت هاي بالاتر از 1024 بر روي آن آنجام و آنان open گردند . باز نمودن پورت هاي فوق بر روي سرويس دهنده مي تواند چالش هاي امنيتي خاصي را براي سرويس دهنده به دنبال داشته باشد .
متاسفانه تمامي سرويس گيرندگان 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 را نشان مي دهد .
Active Mode |
Server Inbound | from any client port >1024to port 21on the server |
Server Outbound | from port 20on the client on any port > 1024 |
Client Inbound | ports 20from the server to any port >1024on client |
Client Outbound | from any port >1024to port 21on the server |
Passive Mode |
Server Inbound | port 21and any port >1024from client/anywhere, from any port >1024 |
Server Outbound | port 21and any port >1024to client/anywhere, to any port >1024 |
Client Inbound | Return traffic, any port > 1024from server using any port >1024 |
و اما يک نکته ديگر در رابطه با پروتکل FTP !
در صورتي که در زمان دريافت يک فايل با استفاده از پروتکل FTP مشکلات خاصي ايجاد که منجر به قطع ارتباط با سرويس دهنده FTP گردد ، سرويس گيرنده مي تواند با مشخص کردن يک offset از فايل دريافتي به سرويس دهنده اعلام نمايد که عمليات ارسال را از جايي که ارتباط قطع شده است ، ادامه دهد ( سرويس گيرنده از محلي شروع به دريافت فايل مي نمايد که ارتباط غيرفعال شده بود ) . استفاده از ويژگي فوق به امکانات سرويس دهنده FTP بستگي دارد .
منبع:http://www.academist.ir