مقدمه:
پروتکل FTP که قدمت آن به زمانی که اینترنت یک مجموعه کوچک و دوستانه از کامپیوتر بوده برمی گردد و در آن زمان همه می دانستند که شخص دیگر در شبکه کیست. در آن زمان نه نیازی به فیلتر کردن و نه نیازی به استفاده از امنیت بالا در سیستم ها بود و حتی در آن زمان از سرویس NAT هم استفاده نمی کردند. ولی به دلیل اینکه سرویس FTP یک نیاز در شبکه اینترنت است همچنان باقی مانده و مورد استفاده قرار می گیرد.
سرویس FTP در دو حالت ارائه سرویس می کند حالت active وpassive . انتخاب هر کدام از این دو نوع سرویس دهی بستگی به نوع ساختار فیلتریگ شما دارد.
حالت active:
در حالت active زمانی که یک کاربر به یک سرور FTP وصل می شود و درخواست برای دریافت اطلاعات یک فایل را دارد سرور یک ارتباط جدید برای منتقل کردن درخواست اطلاعات کاربر ایجاد می کند. این ارتباط را به اصطلاح data connection می گویند. برای برقراری ارتباط بخش client در سرور FTP یک port به صورت تصادفی انتخاب می کند. client این درگاه انتخابی را برای سرور ارسال می کند و در آن درگاه به گوش دادن مشغول می شود تا سرور اطلاعات را در این port منتقل کند. در این حالت اگر ارتباط client و سرور از طریق NAT اتفاق افتاده باشد چون در سرور NAT هیچ درگاهی برای این ارتباط باز نشده است همه بسته ها drop می شود.
حالت passive:
در حالت passive (این حالت پیش فرض در OpenBSD است) بعد از ارسال درخواست client این سرور است که یک درگاه اتفاقی را انتخاب می کند حال سرور به client اطلاع می دهد که چه درگاهی باز است و این بار client به درگاه انتقال اطلاعات وصل می شود. حال اگر در مقابل این سرور یک فایروال وجود داشته باشد و دسترسی به درگاه ها را مسدود کرده باشد ارتباط برقرار نمی شود.
برای رفع این مشکلات بخش packet filter یک راه حل ایجاد کردند و ترافیک FTP را از طریق ftp proxy منتقل می کنند. این کار فقط در حالت NAT مشکل را حل می کند و شما نیاز به یک برنامه ftp-proxy این هم دارید، برای فعال کردن این بخش شما باید خطی به صورت خط زیر در فایل pf.conf اضافه کنید:
با این عمل هر ترافیکی که از سمت client برای FTP سرور ارسال شود به برنامه ftp-proxy که بر روی درگاه ۸۰۲۱ به گوش کردن مشغول است منتقل می شود. برای راه اندازی شما همچنین به یک anchor هم به صورت زیر نیاز دارید:
برای راه اندازی کردن برنامه پراکسی سرور در OpenBSD باید خط زیر را در فایل /etc/rc.conf.local اضافه کنید: