امروزه از پروتكل های متعددی در شبكه های كامپیوتری استفاده می گردد كه
صرفا" تعداد اندكی از آنان به منظور انتقال داده طراحی و پیاده سازی شده
اند . اینترنت نیز به عنوان یك شبكه گسترده از این قاعده مستثنی نبوده و در
این رابطه از پروتكل های متعددی استفاده می شود.
برای بسیاری از كاربران اینترنت همه چیز محدود به وب و پروتكل مرتبط با
آن یعنی 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 ، یك پروتكل ارسال فایل است كه با استفاده از آن سرویس گیرندگان
می توانند به سرویس دهندگان متصل و صرفنظر از نوع سرویس دهنده اقدام به
دریافت و یا ارسال فایل نمایند . پروتكل FTP به منظور ارایه خدمات خود از
دو حالت متفاوت استفاده می نماید : Active Mode و Passive Mode . مهمترین
تفاوت بین روش های فوق جایگاه سرویس دهنده و یا سرویس گیرنده در ایجاد و
خاتمه یك ارتباط است .
همانگونه كه در بخش اول اشاره گردید ، یك اتصال پروتكل TCP/IP ( نسخه
شماره چهار) شامل دو نقطه مجزا می باشد كه هر نقطه از یك آدرس IP و یك
شماره پورت استفاده می نماید . برقراری ارتباط بین یك سرویس گیرنده و یك
سرویس دهنده منوط به وجود چهار عنصر اطلاعاتی است : آدرس سرویس دهنده
،پورت سرویس دهنده ، آدرس سرویس گیرنده و پورت سرویس گیرنده . در زمان
برقراری یك ارتباط ، سرویس گیرنده از یك شماره پورت استفاده می نماید . این
شماره پورت می تواند متناسب با نوع عملكرد برنامه سرویس گیرنده به صورت
اختیاری و یا اجباری باشد . مثلا" برخی برنامه های سرویس گیرنده به منظور
ارتباط با سرویس دهنده ، نیازمند استفاده از یك شماره پورت خاص می باشند (
نظیر برنامه های سرویس گیرنده وب و یا مرورگرهای وب كه از پورت شماره ۸۰ به
منظور ارتباط با سرویس دهنده وب استفاده می نماید) . در مواردی كه الزامی
در خصوص شماره پورت وجود ندارد از یك شماره پورت موقتی و یا ephemeral
استفاده می گردد . این نوع پورت ها موقتی بوده و توسط IP stack ماشین
مربوطه به متقاضیان نسبت داده شده و پس از خاتمه ارتباط ، پورت آزاد می
گردد . با توجه به این كه اكثر IP Stacks بلافاصله از پورت موقت آزاد شده
استفاده نخواهند كرد ( تا زمانی كه تمام pool تكمیل نشده باشد ) ،در صورتی
كه سرویس گیرنده مجددا" درخواست برقراری یك ارتباط را نماید ، یك شماره
پورت موقتی دیگر به وی تخصیص داده می شود.
پس از این مقدمه ، در ادامه به بررسی هر یك از روش های Active و Passive در پروتكل FTP خواهیم پرداخت .
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 ترجیح داده می شود :
تعداد سرویس دهندگان موجود بر روی اینترنت به مراتب كمتر از سرویس گیرندگان می باشد .
با استفاده از امكانات موجود می توان سرویس دهندگان را پیكربندی
تا بتوانند از مجموعه پورت های محدود و تعریف شده ای با در نظر گرفتن مسایل
امنیتی ، استفاده نمایند.
پیكربندی فایروال
مشخص كردن یك offset از فایل دریافتی به سرویس دهنده اعلام نماید كه
عملیات ارسال را از جایی كه ارتباط قطع شده است ، ادامه دهد ( سرویس گیرنده
از محلی شروع به دریافت فایل می نماید كه ارتباط غیرفعال شده بود ) .
استفاده از ویژگی فوق به امكانات سرویس دهنده FTP بستگی دارد .