نحوه ایجاد SSH Tunnel یا Port Forward در لینوکس

نحوه ایجاد SSH Tunnel یا Port Forward در لینوکس
در این پست می‌خوانید:

SSH Tunnel (همچنین به عنوان SSH port forwarding هم شناخته میشود) در حقیقت مسیردهی آسان ترافیک شبکه local از طریق SSH به هاست های ریموت میباشد.
با این روش تمام کانکشن های شما با استفاده از encryption امن هستند.

این شیوه راه آسانی برای تعریف یک VPN (مخفف Virtual Private Network) فراهم میآورد، که برای ارتباط به شبکه های private از بستر شبکه های public غیر امن مانند اینترنت میباشد.

شما ممکن است همچنین سرورهای local ی که پشت NAT و Firewall قرار دارند را از بستر تانل های امن دسترسی دهید،

همانطور که در ngrok پیاده سازی شده است. مقاله ngrok چیست می تواند مفید باشد

SSH Tunnel

SSH Tunnel

به طور پیش فرض session های SSH برقراری تانل برای ارتباطات شبکه را مجاز میداند و همچنین سه نوع SSH port forwarding وجود دارد :

  • Local
  • Dynamic
  • Remote

این مثال را با توجه به مقادیر پیش فرض زیر ادامه می دهیم.

هاست لوکال : 192.168.43.31
هاست ریموت : server1.example.com

معمولا، شما میتوانید به طور امن به یک سرور ریموت با استفاده از SSH همانند مثال زیر متصل شوید. من لاگین ssh بدون پسورد را بین هاست های remote و local را کانفیگ کرده ام در نتیجه از من درخواست پسورد نمیشود.

$ ssh [email protected]

ssh output

ssh output

 

Local SSH Port Forwarding

این نوع از port forwarding به شما اجازه میدهد از کامپیوتر لوکال تان به سرور ریموت متصل شوید.

فرض میکنیم که شما پشت یک فایروال محدود هستید یا توسط یک فایروال خروجی از دسترسی به یک اپلیکیشن در حال اجرا روی پورت 3000 روی سرور ریموت تان block شده اید.

شما میتوانید یک پورت local را فوروارد کنید (به طور مثال 8080) که میتوانید از آن برای دسترسی به اپلیکیشن به صورت local استفاده کنید.

آپشن -L برای تعریف پورت فوروارد شده به هاست ریموت و remote port میباشد.

$ ssh [email protected] -L 8080: server1.example.com:3000

اضافه کردن آپشن -N به معنای اجرا نکردن یک دستور remote است که در این شرایط شما shell ی دریافت نخواهید کرد.

$ ssh -N [email protected] -L 8080: server1.example.com:3000

آپشن -f دستور ssh را در محیط background اجرا میکند.

$ ssh -f -N [email protected] -L 8080: server1.example.com:3000

اکنون روی ماشین لوکال تان یک مرورگر باز کنید
به جای دسترسی به اپلیکیشن ریموت به جای استفاده از آدرس server1.example.com:3000 شما میتوانید به آسانی از localhost:8080 یا192.168.43.31:8080 همانند تصویر زیر استفاده کنید.

خروجی 192.168.43.31:8080

خروجی 192.168.43.31:8080

 

Remote SSH Port Forwarding

Remote SSH Port Forwarding به شما این امکان را میدهد که از ماشین ریموت خود به کامپیوتر لوکال تان متصل شوید. به صورت پیش فرض ssh اجازه remote port forwarding را نمیدهد
شما میتوانید آنرا با استفاده از بخش GatewayPorts در تنظیمات اصلی sshd واقع در فایل کانفیگ /etc/ssh/sshd_config روی هاست ریموت خود فعال کنید.

فایل را باز کنید و آنرا با استفاده از ویرایشگر متنی مورد علاقه خود ویرایش کنید.

$ sudo vim /etc/ssh/sshd_config

به دنبال بخش مورد نظر بگردید و آنرا از کامنت خارج کنید و مقدار آنرا همانند زیر برابر با yes قرار دهید.

GatewayPorts yes

GatewayPorts yes

GatewayPorts yes

تغییرات را ذخیره کنید و از آن خارج شوید. سپس به منظور اعمال تغییرات شما نیاز دارید که سرویس sshd را ریستارت کنید.

$ sudo systemctl restart sshd
or
$ sudo service sshd restart

سپس دستور زیر را برای فوروارد کردن پورت 5000 روی ماشین ریموت به پورت 3000 روی ماشین لوکال اجرا کنید.

$ ssh -f -N [email protected] -R 5000:localhost:3000

به محض اینکه شما این روش از tunneling را درک کنید شما میتوانید به آسانی و به شیوه ای امن یک سرور برنامه نویسی لوکال را پابلیش کنید مخصوصا اگر پشت NAT و Firewall باشد.
تانل های همانند Ngrok, pagekite, localtunnel و متدهای بیشمار دیگر همه به شیوه ای مشابه کار میکنند.

Dynamic SSH Port Forwarding

این سومین روش از port forwarding میباشد.
برخلاف port forward لوکال و ریموت که ارتباط با یک پورت مجزا را امکان پذیر میکردند این روش یک رنج کاملی از ارتباطات TCP را از طریق یک رنجی از پورت ها ممکن میسازد.

روش Dynamic Port Forwarding ماشین شما را به عنوان یک SOCKS proxy server که به صورت پیش فرض روی پورت 1080 در حال listen میباشد، تنظیم و تعریف میکند.

برای مبتدیان باید بگوییم که SOCKS یک پروتکل اینترنت است که نحوه اتصال یک کلاینت به یک سرور را از طریق یک سرور پراکسی (در اینجا SSH میباشد) تعریف میکند.

شما میتوانید Dynamic Port Forwarding را با آپشن -D فعال کنید.

دستور زیر یک پراکسی SOCKS را روی پورت 1080 آغاز میکند که به شما امکان اتصال به هاست ریموت را میدهد.

$ ssh -f -N -D 1080 [email protected]

از این به بعد شما میتوانید کاری کنید که اپلیکیشن های روی ماشین تان از این سرور SSH Proxy استفاده کنند،
تنها کافیست تنظیمات و کانفیگ آنها را طوری انجام دهید که از این سرور استفاده کنند.

دقت کنید که Socks Proxy بعد از اینکه session ssh بسته شود کار خود را متوقف خواهد کرد.

خلاصه

در این پست ما انواع گوناگون port forwarding از یک ماشین به ماشین دیگر را و برای tunneling ترافیک از طریق کانکشن امن SSH توضیح دادیم.

این یکی از استفاده های بیشمار از SSH است. شما نیز میتوانید نظرات خود را در این پست ارسال کنید.

نکته : port forwarding ssh معایب قابل ملاحظه ای دارد، این دستور میتواند آثار سوءی داشته باشد، میتواند برای bypass کردن مانیتورینگ شبکه و برنامه های فیلترینگ ترافیک (یا فایروال) مورد استفاده قرار گیرد.

هکرها میتوانند از آن برای فعالیت های مخرب خود استفاده کنند.

دیدگاه‌ها ۰
ارسال دیدگاه جدید