آشنایی با پروتکل FTP
برای بسیاری از کاربران اینترنت همه چیز محدود به وب و پروتکل مرتبط با آن یعنی HTTP است ، در صورتی که در این عرصه از پروتکل های متعدد دیگری نیز استفاده می گردد. FTP نمونه ای در این زمینه است .
پروتکل FTP چیست ؟
فرض کنید که سرویس وب را از اینترنت حذف نماییم . برای بسیاری از ما این سوال مطرح خواهد شد که چه نوع استفاده ای را می توانیم از اینترنت داشته باشیم ؟ در صورت تحقق چنین شرایطی ، یکی از عملیاتی که کاربران قادر به انجام آن خواهند بود ، دریافت داده ، فایل های صوتی ، تصویری و سایر نمونه فایل های دیگر با استفاده از پروتکل FTP (برگرفته از File Transfer Protocol ) است.
ویژگی های پروتکل FTP
• پروتکل 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 و یک شماره پورت استفاده می نماید . برقراری ارتباط بین یک سرویس گیرنده و یک سرویس دهنده منوط به وجود چهار عنصر اطلاعاتی است : آدرس سرویس دهنده ،پورت سرویس دهنده ، آدرس سرویس گیرنده و پورت سرویس گیرنده . در زمان برقراری یک ارتباط ، سرویس گیرنده از یک شماره پورت استفاده می نماید . این شماره پورت می تواند متناسب با نوع عملکرد برنامه سرویس گیرنده به صورت اختیاری و یا اجباری باشد . مثلا" برخی برنامه های سرویس گیرنده به منظور ارتباط با سرویس دهنده ، نیازمند استفاده از یک شماره پورت خاص می باشند ( نظیر برنامه های سرویس گیرنده وب و یا مرورگرهای وب که از پورت شماره ۸۰ به منظور ارتباط با سرویس دهنده وب استفاده می نماید) . در مواردی که الزامی در خصوص شماره پورت وجود ندارد از یک شماره پورت موقتی و یا ephemeral استفاده می گردد . این نوع پورت ها موقتی بوده و توسط IP stack ماشین مربوطه به متقاضیان نسبت داده شده و پس از خاتمه ارتباط ، پورت آزاد می گردد . با توجه به این که اکثر IP Stacks بلافاصله از پورت موقت آزاد شده استفاده نخواهند کرد ( تا زمانی که تمام pool تکمیل نشده باشد ) ،در صورتی که سرویس گیرنده مجددا" درخواست برقراری یک ارتباط را نماید ، یک شماره پورت موقتی دیگر به وی تخصیص داده می شود .
• پروتکل FTP منحصرا" از پروتکل TCP استفاده می نماید( هرگز از پروتکل UDP استفاده نمی شود) . معمولا" پروتکل های لایه Application ( با توجه به مدل مرجع OSI ) از یکی از پروتکل های TCP و یا UDP استفاده می نمایند ( به جزء پروتکل DNS ) . پروتکل FTP نیز از برخی جهات شرایط خاص خود را دارد و برای انجام وظایف محوله از دو پورت استفاده می نماید . این پروتکل معمولا" از پورت شماره ۲۰ برای ارسال داده و از پورت ۲۱ برای گوش دادن به فرامین استفاده می نماید . توجه داشته باشید که برای ارسال داده همواره از پورت ۲۰ استفاده نمی گردد و ممکن است در برخی موارد از پورت های دیگر استفاده شود .
• اکثر سرویس دهندگان FTP از روش خاصی برای رمزنگاری اطلاعات استفاده نمی نمایند و در زمان login سرویس گیرنده به سرویس دهنده ، اطلاعات مربوط به نام و رمز عبور کاربر به صورت متن معمولی در شبکه ارسال می گردد . افرادی که دارای یک Packet sniffer بین سرویس گیرنده و سرویس دهنده می باشند ، می توانند به سادگی اقدام به سرقت نام و رمز عبور نمایند . علاوه بر سرقت رمزهای عبور ، مهاجمان می توانند تمامی مکالمات بر روی اتصالات FTP را شنود و محتویات داده های ارسالی را مشاهده نمایند . پیشنهادات متعددی به منظور ایمن سازی سرویس دهنده FTP مطرح می گردد ولی تا زمانی که رمزنگاری و امکانات حفاظتی در سطح لایه پروتکل IP اعمال نگردد ( مثلا" رمزنگاری توسط IPsecs ) ، نمی بایست از FTP استفاده گردد خصوصا" اگر بر روی شبکه اطلاعات مهم و حیاتی ارسال و یا دریافت می گردد .
• همانند بسیاری از پروتکل های لایه Application ، پروتکل FTP دارای کدهای وضعیت خطاء مختص به خود می باشد ( همانند HTTP ) که اطلاعات لازم در خصوص وضعیت ارتباط ایجاد شده و یا درخواستی را ارایه می نماید . زمانی که یک درخواست ( GET , PUT ) برای یک سرویس دهنده FTP ارسال می گردد ، سرویس دهنده پاسخ خود را به صورت یک رشته اعلام می نماید . اولین خط این رشته معمولا" شامل نام سرویس دهنده و نسخه نرم افزار FTP است .در ادامه می توان دستورات GET و یا PUT را برای سرویس دهنده ارسال نمود . سرویس دهنده با ارایه یک پیام وضعیت به درخواست سرویس گیرندگان پاسخ می دهد . کدهای وضعیت برگردانده شده را می توان در پنج گروه متفاوت تقسیم نمود :
کدهای ۱xx : پاسخ اولیه
کدهای ۲xx : درخواست بدون خطاء اجراء گردید .
کدهای ۳xx : به اطلاعات بشتری نیاز است .
کدهای ۴xx : یک خطاء موقت ایجاد شده است .
کدهای ۵xx : یک خطاء دایمی ایجاد شده است .
متداولترین کدهای وضعیت FTP به همراه مفهوم هریک در جدول زیر نشان داده شده است :
کدهای وضعیت سری ۱۰۰ | |
۱۱۰ | Restart reply |
۱۲۰ | Service ready in x minutes |
۱۲۵ | Connection currently open, transfer starting |
۱۵۰ | File status okay, about to open data |
کدهای وضعیت سری ۲۰۰ | |
۲۰۰ | Command okay |
۲۰۲ | Command not implemented, superfluous at this site |
۲۱۱ | System status/help reply |
۲۱۲ | Directory status |
۲۱۳ | File status |
۲۱۴ | System Help message |
۲۱۵ | NAME system type |
۲۲۰ | Service ready for next user. |
۲۲۱ | Service closing control connection. Logged off where appropriate |
۲۲۵ | Data connection open; no transfer in progress. |
۲۲۶ | Closing data connection. Requested action successful |
۲۲۷ | Entering Passive Mode |
۲۳۰ | User logged in, continue |
۲۵۰ | Requested file action okay, completed |
۲۵۷ | "PATHNAME" created. |
کدهای وضعیت سری ۳۰۰ | |
۳۳۱ | User name okay, need password. |
۳۳۲ | Need account for login |
۳۵۰ | Requested file action pending further information. |
کدهای وضعیت سری ۴۰۰ | |
۴۲۱ | Service not available, closing control connection. |
۴۲۵ | Can’t open data connection |
۴۲۶ | Connection closed; transfer aborted. |
۴۵۰ | Requested file action not taken. File not available - busy etc.. |
۴۵۱ | Request aborted: error on server in processing. |
۴۵۲ | Requested action not taken. Insufficient resources on system |
کدهای وضعیت سری ۵۰۰ | |
۵۰۰ | Syntax error, command unrecognized |
۵۰۱ | Syntax error in parameters or arguments. |
۵۰۲ | Command not implemented. |
۵۰۳ | Bad sequence of commands |
۵۰۴ | Command not implemented for that parameter. |
۵۳۰ | Not logged in. |
۵۳۲ | Need account for storing files |
۵۵۰ | Requested action not taken. File unavailable |
۵۵۲ | Requested file action aborted. Exceeded storage allocation |
۵۵۳ | Requested action not taken. File name not allowed |
مفهوم برخی از کدهای متداول | |
۲۲۶ | دستور بدون هیچگونه خطایی اجراء گردید . |
۲۳۰ | زمانی این کد نمایش داده می شود که یک سرویس گیرنده رمز عبور خود را به درستی درج و عملیات loginبا موفقیت انجام شده باشد . |
۲۳۱ | کد فوق نشاندهنده دریافت usernameارسالی سرویس گیرنده توسط سرویس دهنده می باشد و تاییدی است بر اعلام وصول Username( نه صحت آن ) . |
۵۰۱ | دستور تایپ شده دارای خطاء گرامری است و می بایست مجددا" دستور تایپ گردد . |
۵۳۰ | عملیات loginبا موفقیت انجام نشده است . ممکن است Usernameو یا رمز عبور اشتباه باشد . |
۵۵۰ | فایل مشخص شده در دستور تایپ شده نامعتبر است . |
FTP ، یک پروتکل ارسال فایل است که با استفاده از آن سرویس گیرندگان می توانند به سرویس دهندگان متصل و صرفنظر از نوع سرویس دهنده اقدام به دریافت و یا ارسال فایل نمایند . پروتکل FTP به منظور ارایه خدمات خود از دو حالت متفاوت استفاده می نماید : Active Mode و Passive Mode . مهمترین تفاوت بین روش های فوق جایگاه سرویس دهنده و یا سرویس گیرنده در ایجاد و خاتمه یک ارتباط است .
همانگونه که در بخش اول اشاره گردید ، یک اتصال پروتکل TCP/IP ( نسخه شماره چهار) شامل دو نقطه مجزا می باشد که هر نقطه از یک آدرس IP و یک شماره پورت استفاده می نماید . برقراری ارتباط بین یک سرویس گیرنده و یک سرویس دهنده منوط به وجود چهار عنصر اطلاعاتی است : آدرس سرویس دهنده ،پورت سرویس دهنده ، آدرس سرویس گیرنده و پورت سرویس گیرنده . در زمان برقراری یک ارتباط ، سرویس گیرنده از یک شماره پورت استفاده می نماید . این شماره پورت می تواند متناسب با نوع عملکرد برنامه سرویس گیرنده به صورت اختیاری و یا اجباری باشد . مثلا" برخی برنامه های سرویس گیرنده به منظور ارتباط با سرویس دهنده ، نیازمند استفاده از یک شماره پورت خاص می باشند ( نظیر برنامه های سرویس گیرنده وب و یا مرورگرهای وب که از پورت شماره ۸۰ به منظور ارتباط با سرویس دهنده وب استفاده می نماید) . در مواردی که الزامی در خصوص شماره پورت وجود ندارد از یک شماره پورت موقتی و یا ephemeral استفاده می گردد . این نوع پورت ها موقتی بوده و توسط IP stack ماشین مربوطه به متقاضیان نسبت داده شده و پس از خاتمه ارتباط ، پورت آزاد می گردد . با توجه به این که اکثر IP Stacks بلافاصله از پورت موقت آزاد شده استفاده نخواهند کرد ( تا زمانی که تمام pool تکمیل نشده باشد ) ،در صورتی که سرویس گیرنده مجددا" درخواست برقراری یک ارتباط را نماید ، یک شماره پورت موقتی دیگر به وی تخصیص داده می شود .
پس از این مقدمه ، در ادامه به بررسی هر یک از روش های Active و Passive در پروتکل FTP خواهیم پرداخت .
Active Mode
• سرویس گیرنده یک ارتباط با پورت ۲۱ سرویس دهنده FTP برقرار می نماید . پورت ۲۱ ، پورتی است که سرویس دهنده به آن گوش فرا می دهد تا از صدور فرامین آگاه و آنان را به ترتیب پاسخ دهد . سرویس گیرنده برای برقراری ارتباط با سرویس دهنده از یک پورت تصادفی و موقتی ( بزرگتر از ۱۰۲۴ ) استفاده می نماید( پورت x ).
• سرویس گیرنده شماره پورت لازم برای ارتباط سرویس دهنده با خود را از طریق صدور دستور PORT N+۱ به وی اطلاع می دهد ( پورت x+۱ )
• سرویس دهنده یک ارتباط را از طریق پورت ۲۰ خود با پورت مشخص شده سرویس گیرنده ( پورت x+۱ ) برقرار می نماید .
لطفا" به من از طریق پورت ۱۹۳۱ بر روی آدرس | سرویس گیرنده |
تایید دستور | سرویس دهنده |
در فرآیند فوق ، ارتباط توسط سرویس گیرنده آغاز و پاسخ به آن توسط سرویس دهنده و از طریق پورت x+۱ که توسط سرویس گیرنده مشخص شده است ، انجام می شود . در صورتی که سرویس گیرنده از سیستم ها و دستگاه های امنیتی خاصی نظیر فایروال استفاده کرده باشد ، می بایست تهمیدات لازم به منظور ارتباط کامپیوترهای میزبان راه دور به سرویس گیرنده پیش بینی تا آنان بتوانند به هر پورت بالاتر از ۱۰۲۴ سرویس گیرنده دستیابی داشته باشند . بدین منظور لازم است که پورت های اشاره شده بر روی ماشین سرویس گیرنده open باشند . این موضوع می تواند تهدیدات و چالش های امنیتی متعددی را برای سرویس گیرندگان به دنبال داشته باشد .
Passive Mode
• سرویس گیرنده دو پورت را فعال می نماید ( پورت x و x+۱ )
• ارتباط اولیه از طریق پورت x سرویس گیرنده با پورت ۲۱ سرویس دهنده آغاز می گردد .
• سرویس دهنده یک پورت را فعال ( Y ) و به سرویس گیرنده شماره پورت را اعلام می نماید .
• در ادامه سرویس گیرنده یک اتصال از طریق پورت x+۱ با پورت y سرویس دهنده برقرار می نماید .
لطفا" به من بگویید که از کجا می توانم داده را دریافت نمایم | سرویس گیرنده |
با من از طریق پورت ۴۰۲۳ بر روی آدرس | سرویس دهنده |
متاسفانه تمامی سرویس گیرندگان FTP از Passive Mode حمایت نمی نمایند . اگر یک سرویس گیرنده بتواند به یک سرویس دهنده login نماید ولی قادر به ارسال داده بر روی آن نباشد ، نشاندهنده این موضوع است که فایروال و یا Gateway برای استفاده از Passive Mode به درستی پیکربندی نشده است .
ملاحضات امنیتی
Passive Mode و یا Active Mode ؟
• تعداد سرویس دهندگان موجود بر روی اینترنت به مراتب کمتر از سرویس گیرندگان می باشد .
• با استفاده از امکانات موجود می توان سرویس دهندگان را پیکربندی تا بتوانند از مجموعه پورت های محدود و تعریف شده ای با در نظر گرفتن مسایل امنیتی ، استفاده نمایند.
پیکربندی فایروال
Active Mode | |
Server Inbound | from any client port >۱۰۲۴to port ۲۱on the server |
Server Outbound | from port ۲۰on the client on any port > ۱۰۲۴ |
Client Inbound | ports ۲۰from the server to any port >۱۰۲۴on client |
Client Outbound | from any port >۱۰۲۴to port ۲۱on the server |
Passive Mode | |
Server Inbound | port ۲۱and any port >۱۰۲۴from client/anywhere, from any port >۱۰۲۴ |
Server Outbound | port ۲۱and any port >۱۰۲۴to client/anywhere, to any port >۱۰۲۴ |
Client Inbound | Return traffic, any port > ۱۰۲۴from server using any port >۱۰۲۴ |
و اما یک نکته دیگر در رابطه با پروتکل FTP !
منبع:http://www.academist.ir