تا پیش از این، مطمئن بودم که فعالسازی پورت، گزینهٔ پیشفرض امنتری است. بازگذاشتن همیشگی پورتها، در مقایسه با گشودن یک پورت تنها هنگام نیاز برنامه، بسیار پرخطرتر به نظر میرسید. بنابراین منطقیترین کار را انجام دادم: همان انتقال FileZilla در حالت فعال را با هر دو قاعده اجرا کردم و در سراسر فرایند، پورت ورودی را زیر نظر گرفتم. نتیجه نشان داد که فعالسازی پورت، هرچند میزان در معرضبودن در زمان بیکاری را کاهش میدهد، شاید به آن بینقصی که همیشه تصور میکردم عمل نکند.
هدایت پورت منتظر نماند تا چیزی را باز کنم
پیش از اجرای برنامه، روتر مقصد ترافیک را میدانست





حتی پیش از اجرای FileZilla نیز قاعدهای برای هدایت پورت برقرار بود که به رایانهٔ آزمایشی اشاره میکرد. مطمئن شدم بازهٔ تعیینشده با همان پورتهایی یکسان است که کارخواه به کار میبرد. سپس برنامه را بسته نگه داشتم و نخستین بررسی بیرونی را اجرا کردم. نگاشت، ثابت و آماده بود؛ هرچند هنوز هیچ چیزی روی رایانه به آن گوش نمیداد.
بااینحال، میان یک قاعدهٔ پیکربندیشده و یک پورت باز تفاوت وجود دارد. دیوار آتش میزبان و اینکه آیا فرایندی واقعاً به سوکت گوش میدهد یا نه، بر نتیجهٔ پویش بیرونی اثر میگذارند. خود روتر از پیش مقصد را میدانست و برای فعالکردن نگاشت به ترافیک خروجی نیازی نداشت.
هنگامی که انتقال آغاز شد، یک نگاشت ثابت NAT از پیش در انتظار اتصال دادهٔ ورودی بود. ترافیک بیهیچ مذاکره یا درنگی به نشانی موردنظر رسید. بدهبستان اصلی این است که در ازای اختصاص پورتی که حتی هنگام بیاستفادهبودن نیز همواره آماده میماند، مقصدی ثابت و پیشبینیپذیر دارید که هر بار همان رایانه است. این ویژگی زمانی سودمند است که سرویس مشخصی باید از اینترنت دسترسپذیر باشد، بیآنکه برای فعالشدن مسیر منتظر یک اتصال خروجی بماند.
فعالسازی پورت، روتر را وادار کرد منتظر نوبتش بماند
تا برنامه پیشقدم نشد، هیچچیز باز نشد

سپس فعالسازی پورت را روی همان بازهٔ پورت پیکربندی کردم؛ نخست قاعدهٔ ثابت را برداشتم و همهچیز دیگر را بدون تغییر گذاشتم. پیش از اتصال FileZilla، کاوشهای بیرونی چیزی پیدا نمیکردند. اتصال داده تنها از آن رو برقرار شد که درست در لحظهای که کارخواه از راه کانال کنترل ارتباط خروجی برقرار کرد، روتر مسیر ورودی متناظر را گشود.
تنها تغییر این بود که روتر دیگر پورت را برای نیاز احتمالی آینده باز نگه نمیداشت. برای ساختن مسیر، برنامه ناچار بود ابتدا ترافیک خروجیِ منطبق با شرط فعالسازی ایجاد کند.
جزئیات دیگری نیز تغییر کرده بود. در روتر من، مسیر به دستگاهی وابسته میشد که آن را فعال کرده بود، نه به مقصدی که برای همیشه تعیین شده باشد. در آن لحظه این تفاوت ناچیز به نظر میرسید، اما بعدتر پیامدهای مهمتری پیدا کرد.
بستن برنامه، در را نبست
اتصال دوم نشان داد روتر دربارهٔ واردشوندگان سختگیر نیست

پس از پایان انتقال و بستن FileZilla، گمان کردم مسیر هم از میان میرود؛ اما اشتباه میکردم. دستکم فوراً ناپدید نشد. روتر اغلب ناچار است تا پایان یک زمانسنج منتظر بماند، زیرا همیشه نمیتواند تشخیص دهد که برنامه بسته شده است. در آزمایش من، نگاشت ورودی تا چند دقیقه پس از بستهشدن کارخواه همچنان فعال ماند. اینکه روتر برای تشخیص پایان نشست به دورهای از بیفعالیتی نیاز دارد، بیش از آنکه نقصی واقعی باشد، به نقطهای کور میماند.
این نتیجه پرسش بدیهی بعدی را پیش کشید: آیا این درِ باز ترافیک هر کسی را میپذیرد، یا تنها به میزبان یا سرور بیرونیِ آغازگر اتصال اجازهٔ بازگشت میدهد؟ بنابراین تا زمانی که فعالسازی برقرار بود، همان پورتها را با اتصال بیرونی دومی کاوش کردم که بخشی از اتصال نخست نبود. در این روتر مشخص، اتصال جداگانه توانست به میزبان داخلی برسد.
این آزمایش نشان داد که گشودن پورت و تعیین اینکه چه کسی میتواند از آن استفاده کند، دو کار جداگانهاند. روترهای گوناگون ممکن است در این زمینه رفتار متفاوتی داشته باشند. در برخی از آنها میتوان سرویس را به یک نشانی بیرونی محدود کرد، اما روتر من بهطور پیشفرض چنین محدودیتی نداشت.
تفاوت این دو رویکرد را میشد در مهمترین وضعیتها بهروشنی دید:
| هدایت پورت | فعالسازی پورت | |
|---|---|---|
| پیش از اتصال برنامه | از پیش نگاشت شده | هنوز چیزی وجود ندارد |
| تا زمانی که در حال اجراست | مقصد ثابت است | به دستگاهی وابسته است که آن را روی روتر من فعال کرده است |
| پس از بستهشدن برنامه | نگاشت پابرجا میماند | سرانجام مهلتش به پایان میرسد، نه بیدرنگ |
اینکه کدامیک واقعاً امنتر است، پرسش درستی نیست
هر دو به شیوهای متفاوت سودمندند. فعالسازی پویای درگاه برای برنامههایی کاربرد دارد که پس از ایجاد ترافیک خروجی متناظر، به اتصال ورودی نیاز پیدا میکنند.
هدایت درگاه زمانی گزینهای کاربردیتر است که یک سرویس، برنامه یا فرایند میزبان باید بدون اطلاع قبلی یا بیآنکه نخست اتصال خروجی برقرار شود، در دسترس باشد. در این حالت مقصد ثابت است و حتی اگر دستگاه دیگری در همان شبکه ارتباط برقرار کند، قواعد تغییر نمیکنند.
آموختهام را میتوان اینگونه خلاصه کرد: دائمیبودن لزوماً به معنای بیاحتیاطی نیست و موقتیبودن نیز خودبهخود اعتمادپذیری نمیآورد. فعالسازی پویای درگاه تعیین میکند در چه زمانی راه باز باشد و نگاشت به کدام دستگاه داخلی برسد، اما لزوماً مشخص نمیکند پس از بازشدن این راه، چه کسان دیگری اجازه عبور دارند.
بااینحال، هیچیک از این دو قاعده هویت طرف راهدور را تأیید نمیکند و ترافیک را نیز رمزگذاری نمیکند. بنابراین آزمون من برندهای نداشت، اما دستکم فهمیدم که شاید از ابتدا پرسش نادرستی مطرح کرده بودم.
منبع: این مطلب ترجمه و بومیسازی مقالهای از MakeUseOf به قلم Afam Onyimadu است. مشاهده مقاله اصلی