SSH Tunnel (همچنین به عنوان SSH port forwarding هم شناخته میشود) در حقیقت مسیردهی آسان ترافیک شبکه local از طریق SSH به هاست های ریموت میباشد. با این روش تمام کانکشن های شما با استفاده از encryption امن هستند. این شیوه راه آسانی برای تعریف یک VPN (مخفف Virtual Private Network) فراهم میآورد، که برای ارتباط به شبکه های private از بستر شبکه های public غیر امن مانند اینترنت میباشد.
شما ممکن است همچنین سرورهای local ی که پشت NAT و Firewall قرار دارند را از بستر تانل های امن دسترسی دهید، همانطور که در ngrok پیاده سازی شده است. به طور پیش فرض session های SSH برقراری تانل برای ارتباطات شبکه را مجاز میداند و همچنین سه نوع SSH port forwarding وجود دارد :
در این مقاله ما به شما نحوه تعریف ssh tunneling یا انواع متفاوت port forwarding در لینوکس را توضیح خواهیم داد.
محیط تستی :
با توجه به اهداف این پست از تجهیزات زیر استفاده میکنیم.
معمولا، شما میتوانید به طور امن به یک سرور ریموت با استفاده از SSH همانند مثال زیر متصل شوید. من لاگین ssh بدون پسورد را بین هاست های remote و local را کانفیگ کرده ام در نتیجه از من درخواست پسورد نمیشود.
![Connect-Remote-SSH-Without-Password-1.png برای بزرگتر شدن عکس روی آن کلیک کنید
نام: Connect-Remote-SSH-Without-Password-1.png
نمایش ها: 3559
اندازه: 5.1 KB
شناسه: 25170](filedata/fetch?id=25170&d=1630993728)
Local SSH Port Forwarding
این نوع از port forwarding به شما اجازه میدهد از کامپیوتر لوکال تان به سرور ریموت متصل شوید. فرض میکنیم که شما پشت یک فایروال محدود هستید یا توسط یک فایروال خروجی از دسترسی به یک اپلیکیشن در حال اجرا روی پورت 3000 روی سرور ریموت تان block شده اید.
شما میتوانید یک پورت local را فوروارد کنید (به طور مثال 8080) که میتوانید از آن برای دسترسی به اپلیکیشن به صورت local استفاده کنید. آپشن -L برای تعریف پورت فوروارد شده به هاست ریموت و remote port میباشد.
اضافه کردن آپشن -N به معنای اجرا نکردن یک دستور remote است که در این شرایط شما shell ی دریافت نخواهید کرد.
آپشن -f دستور ssh را در محیط background اجرا میکند.
اکنون روی ماشین لوکال تان یک مرورگر باز کنید و به جای دسترسی به اپلیکیشن ریموت به جای استفاده از آدرس server1.example.com:3000 شما میتوانید به آسانی از localhost:8080 یا 192.168.43.31:8080 همانند تصویر زیر استفاده کنید.
![Access-a-Remote-App-via-Local-SSH-Port-Forwarding-2.png برای بزرگتر شدن عکس روی آن کلیک کنید
نام: Access-a-Remote-App-via-Local-SSH-Port-Forwarding-2.png
نمایش ها: 3487
اندازه: 36.7 KB
شناسه: 25171](filedata/fetch?id=25171&d=1642843052)
Remote SSH Port Forwarding
Remote SSH Port Forwarding به شما این امکان را میدهد که از ماشین ریموت خود به کامپیوتر لوکال تان متصل شوید. به صورت پیش فرض ssh اجازه remote port forwarding را نمیدهد شما میتوانید آنرا با استفاده از بخش GatewayPorts در تنظیمات اصلی sshd واقع در فایل کانفیگ /etc/ssh/sshd_config روی هاست ریموت خود فعال کنید.
فایل را باز کنید و آنرا با استفاده از ویرایشگر متنی مورد علاقه خود ویرایش کنید.
به دنبال بخش مورد نظر بگردید و آنرا از کامنت خارج کنید و مقدار آنرا همانند زیر برابر با yes قرار دهید.
![Enable-Remote-SSH-Port-Forwarding-3.png برای بزرگتر شدن عکس روی آن کلیک کنید
نام: Enable-Remote-SSH-Port-Forwarding-3.png
نمایش ها: 3505
اندازه: 8.5 KB
شناسه: 25172](filedata/fetch?id=25172&d=1642843052)
تغییرات را ذخیره کنید و از آن خارج شوید. سپس به منظور اعمال تغییرات شما نیاز دارید که سرویس sshd را ریستارت کنید.
سپس دستور زیر را برای فوروارد کردن پورت 5000 روی ماشین ریموت به پورت 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 Proxy استفاده کنند، تنها کافیست تنظیمات و کانفیگ آنها را طوری انجام دهید که از این سرور استفاده کنند. دقت کنید که Socks Proxy بعد از اینکه session ssh بسته شود کار خود را متوقف خواهد کرد.
خلاصه
در این پست ما انواع گوناگون port forwarding از یک ماشین به ماشین دیگر را و برای tunneling ترافیک از طریق کانکشن امن SSH توضیح دادیم. این یکی از استفاده های بیشمار از SSH است. شما نیز میتوانید نظرات خود را در این پست ارسال کنید.
نکته : port forwarding ssh معایب قابل ملاحظه ای دارد، این دستور میتواند آثار سوءی داشته باشد، میتواند برای bypass کردن مانیتورینگ شبکه و برنامه های فیلترینگ ترافیک (یا فایروال) مورد استفاده قرار گیرد. هکرها میتوانند از آن برای فعالیت های مخرب خود استفاده کنند. در مقاله بعدی ما به شما نحوه غیرفعال کردن port forwarding local برای ssh را نمایش خواهیم داد.
شما ممکن است همچنین سرورهای local ی که پشت NAT و Firewall قرار دارند را از بستر تانل های امن دسترسی دهید، همانطور که در ngrok پیاده سازی شده است. به طور پیش فرض session های SSH برقراری تانل برای ارتباطات شبکه را مجاز میداند و همچنین سه نوع SSH port forwarding وجود دارد :
- Local
- Remote
- Dynamic
در این مقاله ما به شما نحوه تعریف ssh tunneling یا انواع متفاوت port forwarding در لینوکس را توضیح خواهیم داد.
محیط تستی :
با توجه به اهداف این پست از تجهیزات زیر استفاده میکنیم.
- هاست لوکال : 192.168.43.31
- هاست ریموت : server1.example.com
معمولا، شما میتوانید به طور امن به یک سرور ریموت با استفاده از SSH همانند مثال زیر متصل شوید. من لاگین ssh بدون پسورد را بین هاست های remote و local را کانفیگ کرده ام در نتیجه از من درخواست پسورد نمیشود.
کد PHP:
$ ssh admin@server1.example.com
Local SSH Port Forwarding
این نوع از port forwarding به شما اجازه میدهد از کامپیوتر لوکال تان به سرور ریموت متصل شوید. فرض میکنیم که شما پشت یک فایروال محدود هستید یا توسط یک فایروال خروجی از دسترسی به یک اپلیکیشن در حال اجرا روی پورت 3000 روی سرور ریموت تان block شده اید.
شما میتوانید یک پورت local را فوروارد کنید (به طور مثال 8080) که میتوانید از آن برای دسترسی به اپلیکیشن به صورت local استفاده کنید. آپشن -L برای تعریف پورت فوروارد شده به هاست ریموت و remote port میباشد.
کد PHP:
$ ssh admin@server1.example.com -L 8080: server1.example.com:3000
کد PHP:
$ ssh -N admin@server1.example.com -L 8080: server1.example.com:3000
کد PHP:
$ ssh -f -N admin@server1.example.com -L 8080: server1.example.com:3000
Remote SSH Port Forwarding
Remote SSH Port Forwarding به شما این امکان را میدهد که از ماشین ریموت خود به کامپیوتر لوکال تان متصل شوید. به صورت پیش فرض ssh اجازه remote port forwarding را نمیدهد شما میتوانید آنرا با استفاده از بخش GatewayPorts در تنظیمات اصلی sshd واقع در فایل کانفیگ /etc/ssh/sshd_config روی هاست ریموت خود فعال کنید.
فایل را باز کنید و آنرا با استفاده از ویرایشگر متنی مورد علاقه خود ویرایش کنید.
کد PHP:
$ sudo vim /etc/ssh/sshd_config
کد PHP:
GatewayPorts yes
تغییرات را ذخیره کنید و از آن خارج شوید. سپس به منظور اعمال تغییرات شما نیاز دارید که سرویس sshd را ریستارت کنید.
کد PHP:
$ sudo systemctl restart sshd
OR
$ sudo service sshd restart
کد PHP:
$ ssh -f -N admin@server1.example.com -R 5000:localhost:3000
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 آغاز میکند که به شما امکان اتصال به هاست ریموت را میدهد.
کد PHP:
$ ssh -f -N -D 1080 admin@server1.example.com
خلاصه
در این پست ما انواع گوناگون port forwarding از یک ماشین به ماشین دیگر را و برای tunneling ترافیک از طریق کانکشن امن SSH توضیح دادیم. این یکی از استفاده های بیشمار از SSH است. شما نیز میتوانید نظرات خود را در این پست ارسال کنید.
نکته : port forwarding ssh معایب قابل ملاحظه ای دارد، این دستور میتواند آثار سوءی داشته باشد، میتواند برای bypass کردن مانیتورینگ شبکه و برنامه های فیلترینگ ترافیک (یا فایروال) مورد استفاده قرار گیرد. هکرها میتوانند از آن برای فعالیت های مخرب خود استفاده کنند. در مقاله بعدی ما به شما نحوه غیرفعال کردن port forwarding local برای ssh را نمایش خواهیم داد.
کامنت