SSH tunneling ویژگی ارائه شده توسط ابزار OpenSSH است که به ما امکان می دهد یک تونل بین دو نقطه ایجاد کنیم تا داده های سایر پروتکل ها در هدر SSH رمزگذاری شده و به عنوان داده SSH بین آن دو میزبان منتقل شوند.
SSH دارای احراز هویت و رمزگذاری داخلی است، به این معنی که میتوانیم از تونلهای SSH برای انتقال دادههای سرویسهای ناامن بین دو نقطه استفاده کنیم.
SSH Tunneling به سه روش میتواند پیاده سازی شود.
- SSH Tunnel (local port forwarding)
- Reverse SSH Tunnel (remote port forwarding)
- Dynamic SSH Tunnel (dynamic port forwarding)
SSH Tunnel (local port forwarding)
هنگامی که یک تونل SSH با port forwarding محلی ایجاد می کنید، تونل SSH داده ها را از پورت دستگاه مبدا به پورت سرور ارسال می کند. این ساده ترین شکل تونل SSH است.
Reverse SSH Tunnel (Remote Port Forwarding)
تونل معکوس SSH به پورت دستگاه ریموت گوش می دهد و تمام داده هایی را که روی آن پورت می آیند از طریق SSH به پورت مشخص شده در دستگاه محلی شما ارسال می کند.
Dynamic SSH Tunnel (Dynamic Port Forwarding)
قبل از اینکه بدانیم یک تونل داینامیک SSH چیست، بیایید در مورد اینکه یک پراکسی و Socket Secure (SOCKS) چیست بحث کنیم. به سادگی، یک پراکسی یک سرویس/سرور است که از طرف شما درخواست ایجاد می کند. شما احتمالا از پراکسی HTTP استفاده کرده باشید، جایی که مرورگر شما به یک سرور پراکسی متصل می شود و آن سرور پروکسی از طرف شما درخواست HTTP را ارسال میکند و پاسخ دریافتی را برای شما بر میگرداند.
جدا از انتقال ترافیک، سرورهای پروکسی با پنهان کردن آدرس IP واقعی یک کلاینت، امنیت را فراهم می کنند.
یک پروکسی SOCKS هر نوع ترافیک ایجاد شده توسط هر پروتکل یا برنامه ای را به سمت سرور واقعی از طرف مشتری هدایت می کند. برخلاف پروکسی HTTP، مستقل از پروتکل است.
بسیاری از نرم افزارها مانند مرورگرها از پراکسی SOCKS پشتیبانی میکنند که در آن IP و پورت سرور پراکسی را پیکربندی میکنید. اگر پراکسی روی مرورگر پیکربندی شده باشد، این درخواست با هدر SOCKS رمزگذاری می شود که در آن پورت مقصد و IP درخواست شما به پورت و IP سرور پراکسی که در مرورگر خود پیکربندی کرده اید تبدیل می شود.
سپس سرور پراکسی این داده ها را رمزگذاری می کند و درخواست را به IP واقعی (IP وب سایت) و پورت (80 یا 443) می فرستد، جایی که IP مبداء، IP سرور پراکسی است.
بیایید تونل Dynamic SSH را با مشاهده مثالی که برای ارسال پورت محلی دیدیم، نشان دهیم. در این صورت، اگر میخواهید به چندین URL محدود شده در یک شبکه خصوصی دسترسی داشته باشید، باید چندین نشست تونل SSH ثابت برای میزبان مقصد ایجاد کنید ولی این یک راه حل عملی نیست.
در اینجا تونل پویا SSH به کمک می آید که از پروتکل SOCKS استفاده می کند. با استفاده از دستور زیر می توانید تونل پویا SSH را پیاده سازی کنید:
ssh -D 1234 remoteuser@remotehost
در این حالت، تونل SSH شما به عنوان پراکسی SOCKS عمل می کند که در «پورت 1234» گوش می دهد. درخواست اضافه شده به "پورت 1234" دستگاه محلی شما به دستگاه میزبان ریموت ارسال می شود و دستگاه میزبان ریموت از طرف شما درخواست را به سرور واقعی ارسال می کند.
برنامه مبداء شما باید از SOCKS آگاه باشد. در این حالت مبداء ما مرورگر ما است. ما در مثال خود فایرفاکس را در نظر میگیریم:
به «تنظیمات» بروید. روی "General" و سپس "Network Settings" کلیک کنید و روی دکمه "Settings" کلیک کنید. "Manual proxy configuration" را انتخاب کنید. آدرس IP دستگاه محلی خود را وارد کنید (127.0.0.1 نیز کار می کند) در بخش "SOCKS Host". سپس شماره پورتی را که در دستور بالا مشخص کرده اید (در این مثال 1234) وارد کنید.
اکنون، هر زمان که هر URL را بزنید، درخواست توسط مرورگر به "پورت 1234" دستگاه محلی شما ارسال می شود، که سپس از طریق تونل SSH به سرور ارسال می شود و سپس سرور درخواست را به حالت واقعی ارسال می کند. سرور از طرف شما در این حالت، تمام درخواست های سیستم نام دامنه (DNS) توسط مرورگر نیز از طریق دسرور انجام می شود.
این نوع پیاده سازی زمانی که به یک منبع اینترنتی عمومی مانند Wi-Fi هتل یا رستوران متصل هستید بسیار مفید است. میتوانید دستگاه کوچکی مانند Raspberry Pi (یک رایانه کوچک جیبی سیستم روی تراشه) را در شبکه خانگی خود راهاندازی کنید و آن را SSH برای عموم در دسترس قرار دهید. با استفاده از تونل پویا SSH به Raspberry Pi متصل شوید و مرورگر خود را بر اساس آن پیکربندی کنید. این می تواند هنگام استفاده از اینترنت عمومی از شما در برابر حمله "Man-In-The-Middle" (که در آن مهاجم ترافیک داده بین منبع و مقصد را ردیابی می کند) محافظت کند.
با خیال راحت از SSH Tunneling استفاده کنید
SSH tunneling یک ویژگی بسیار ساده و در عین حال بسیار قدرتمند است که انتقال امن داده ها را از طریق شبکه امکان پذیر می کند. همانطور که بحث کردیم، SSH Tunneling هیچ نوع استفاده ثابتی ندارد، اما اگر بدانید چگونه کار میکند، میتواند در موقعیتهای مختلف بسیار مفید باشد.
در صورت داشتن سوال با ما در ارتباط باشید.