آشنایی با پروتکل FTP

امروزه از پروتکل های متعددی در شبکه های کامپیوتری استفاده می گردد که صرفا" تعداد اندکی از آنان به منظور انتقال داده طراحی و پیاده سازی شده اند . اینترنت نیز به عنوان یک شبکه گسترده از این قاعده مستثنی نبوده و در این رابطه از پروتکل های متعددی استفاده می شود.
برای بسیاری از کاربران اینترنت همه چیز محدود به وب و پروتکل مرتبط با آن یعنی HTTP است ، در صورتی که در این عرصه از پروتکل های متعدد دیگری نیز استفاده می گردد. FTP نمونه ای در این زمینه است .

پروتکل FTP چیست ؟

تصویر اولیه اینترنت در ذهن بسیاری از کاربران، استفاده از منابع اطلاعاتی و حرکت از سایتی به سایت دیگر است و شاید به همین دلیل باشد که اینترنت در طی سالیان اخیر به سرعت رشد و متداول شده است . بسیاری از کارشناسان این عرصه اعتقاد دارند که اینترنت گسترش و عمومیت خود را مدیون سرویس وب می باشد .
فرض کنید که سرویس وب را از اینترنت حذف نماییم . برای بسیاری از ما این سوال مطرح خواهد شد که چه نوع استفاده ای را می توانیم از اینترنت داشته باشیم ؟ در صورت تحقق چنین شرایطی ، یکی از عملیاتی که کاربران قادر به انجام آن خواهند بود ، دریافت داده ، فایل های صوتی ، تصویری و سایر نمونه فایل های دیگر با استفاده از پروتکل FTP (برگرفته از File Transfer Protocol ) است.

ویژگی های پروتکل FTP

• پروتکل FTP ، اولین تلاش انجام شده برای‌ ایجاد یک استاندارد به منظور مبادله فایل بر روی شبکه های مبتنی بر پروتکل TCP/IP است که از اوایل سال ۱۹۷۰ مطرح و مشخصات استاندارد آن طی RFC ۹۵۹ در اکتبر سال ۱۹۸۵ ارایه گردید .
• پروتکل 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

Active Mode ، روش سنتی ارتباط بین یک سرویس گیرنده FTP و یک سرویس دهنده می باشد که عملکرد آن بر اساس فرآیند زیر است :
• سرویس گیرنده یک ارتباط با پورت ۲۱ سرویس دهنده FTP برقرار می نماید . پورت ۲۱ ، پورتی است که سرویس دهنده به آن گوش فرا می دهد تا از صدور فرامین آگاه و آنان را به ترتیب پاسخ دهد . سرویس گیرنده برای برقراری ارتباط با سرویس دهنده از یک پورت تصادفی و موقتی ( بزرگتر از ۱۰۲۴ ) استفاده می نماید( پورت x ).
• سرویس گیرنده شماره پورت لازم برای ارتباط سرویس دهنده با خود را از طریق صدور دستور PORT N+۱ به وی اطلاع می دهد ( پورت x+۱ )
• سرویس دهنده یک ارتباط را از طریق پورت ۲۰ خود با پورت مشخص شده سرویس گیرنده ( پورت x+۱ ) برقرار می نماید .

لطفا" به من از طریق پورت ۱۹۳۱ بر روی آدرس
IP: ۱۹۲.۱۶۸.۱.۲ متصل و سپس داده را ارسال نمایید .

سرویس گیرنده

تایید دستور

سرویس دهنده


در فرآیند فوق ، ارتباط توسط سرویس گیرنده آغاز و پاسخ به آن توسط سرویس دهنده و از طریق پورت x+۱ که توسط سرویس گیرنده مشخص شده است ، انجام می شود . در صورتی که سرویس گیرنده از سیستم ها و دستگاه های امنیتی خاصی نظیر فایروال استفاده کرده باشد ، می بایست تهمیدات لازم به منظور ارتباط کامپیوترهای میزبان راه دور به سرویس گیرنده پیش بینی تا آنان بتوانند به هر پورت بالاتر از ۱۰۲۴ سرویس گیرنده دستیابی داشته باشند . بدین منظور لازم است که پورت های اشاره شده بر روی ماشین سرویس گیرنده open باشند . این موضوع می‌ تواند تهدیدات و چالش های امنیتی متعددی را برای سرویس گیرندگان به دنبال داشته باشد .

Passive Mode

در Passive Mode ، که به آن " مدیریت و یا اداره سرویس گیرندگان FTP" نیز گفته می شود از فرآیند زیر استفاده می گردد :
• سرویس گیرنده دو پورت را فعال می نماید ( پورت x و x+۱ )
• ارتباط اولیه از طریق پورت x سرویس گیرنده با پورت ۲۱ سرویس دهنده آغاز می گردد .
• سرویس دهنده یک پورت را فعال ( Y ) و به سرویس گیرنده شماره پورت را اعلام می نماید .
• در ادامه سرویس گیرنده یک اتصال از طریق پورت x+۱ با پورت y سرویس دهنده برقرار می نماید .

لطفا" به من بگویید که از کجا می توانم داده را دریافت نمایم

سرویس گیرنده

با من از طریق پورت ۴۰۲۳ بر روی آدرس
IP: ۱۹۲.۱۶۸.۱.۲۵ ارتباط برقرار نمایید .

سرویس دهنده

در فرآیند فوق ، سرویس گیرنده دارای نقش محوری است و فایروال موجود بر روی سرویس گیرنده می تواند درخواست های دریافتی غیرمجاز به پورت های بالاتر از ۱۰۲۴ را به منظور افزایش امنیت بلاک نمایند . در صورتی که بر روی کامپیوترهای سرویس دهنده نیز فایروال نصب شده باشد ، می بایست پیکربندی لازم به منظور استفاده از پورت های بالاتر از ۱۰۲۴ بر روی آن آنجام و آنان open گردند . باز نمودن پورت های فوق بر روی سرویس دهنده می تواند چالش های امنیتی خاصی را برای سرویس دهنده به دنبال داشته باشد .
متاسفانه تمامی سرویس گیرندگان FTP از Passive Mode حمایت نمی نمایند . اگر یک سرویس گیرنده بتواند به یک سرویس دهنده login نماید ولی قادر به ارسال داده بر روی آن نباشد ، نشاندهنده این موضوع است که فایروال و یا Gateway برای استفاده از Passive Mode به درستی پیکربندی نشده است .

ملاحضات امنیتی

در صورتی که فایروال های موجود بر روی کامپیوترهای سرویس گیرنده به درستی پیکربندی نگردند ، آنان نمی توانند از Active Mode استفاده نمایند . در Passive Mode استحکام سیستم امنیتی در سمت سرویس دهنده و توسط فایروال مربوطه انجام خواهد شد . بنابراین لازم است به سرویس دهنده اجازه داده شود که به اتصالات هر پورت بالاتر از ۱۰۲۴ پاسخ دهد . ترافیک فوق ، معمولا" توسط فایروال سرویس دهنده بلاک می گردد . در چنین شرایطی امکان استفاده از Passive Mode وجود نخواهد داشت .

Passive Mode و یا Active Mode ؟

با توجه به مستندات درج شده در RFC ۱۵۷۹ ، استفاده از Passive Mode به دلایل متعددی به Active Mode ترجیح داده می شود :
• تعداد سرویس دهندگان موجود بر روی اینترنت به مراتب کمتر از سرویس گیرندگان می باشد .
• با استفاده از امکانات موجود می توان سرویس دهندگان را پیکربندی تا بتوانند از مجموعه پورت های محدود و تعریف شده ای با در نظر گرفتن مسایل امنیتی ، استفاده نمایند.

پیکربندی فایروال

جدول زیر پیکربندی فایروال در Active Mode و Passive 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 !

در صورتی که در زمان دریافت یک فایل با استفاده از پروتکل FTP مشکلات خاصی ایجاد که منجر به قطع ارتباط با سرویس دهنده FTP گردد ،‌ سرویس گیرنده می تواند با مشخص کردن یک offset از فایل دریافتی به سرویس دهنده اعلام نماید که عملیات ارسال را از جایی که ارتباط قطع شده است ، ادامه دهد ( سرویس گیرنده از محلی شروع به دریافت فایل می نماید که ارتباط غیرفعال شده بود ) . استفاده از ویژگی فوق به امکانات سرویس دهنده FTP بستگی دارد .
منبع:http://www.academist.ir