اطلاعیه

بستن
هنوز اعلام نشده است.

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

بستن
X
  • فیلتر کردن
  • زمان
  • نمایش
پاک کردن همه
پست های جدید

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

    SSH Tunnel (همچنین به عنوان SSH port forwarding هم شناخته میشود) در حقیقت مسیردهی آسان ترافیک شبکه local از طریق SSH به هاست های ریموت میباشد. با این روش تمام کانکشن های شما با استفاده از encryption امن هستند. این شیوه راه آسانی برای تعریف یک VPN (مخفف Virtual Private Network) فراهم میآورد، که برای ارتباط به شبکه های private از بستر شبکه های public غیر امن مانند اینترنت میباشد.

    شما ممکن است همچنین سرورهای 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 
    برای دیدن سایز بزرگ روی عکس کلیک کنید

نام: Connect-Remote-SSH-Without-Password-1.png
مشاهده: 1
حجم: 5.1 کیلو بایت



    Local SSH Port Forwarding

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

    شما میتوانید یک پورت local را فوروارد کنید (به طور مثال 8080) که میتوانید از آن برای دسترسی به اپلیکیشن به صورت local استفاده کنید. آپشن -L برای تعریف پورت فوروارد شده به هاست ریموت و remote port میباشد.
    کد PHP:
    ssh admin@server1.example.com -L 8080server1.example.com:3000 
    اضافه کردن آپشن -N به معنای اجرا نکردن یک دستور remote است که در این شرایط شما shell ی دریافت نخواهید کرد.
    کد PHP:
    ssh -N admin@server1.example.com -L 8080server1.example.com:3000 
    آپشن -f دستور ssh را در محیط background اجرا میکند.
    کد PHP:
    ssh --N admin@server1.example.com -L 8080server1.example.com:3000 
    اکنون روی ماشین لوکال تان یک مرورگر باز کنید و به جای دسترسی به اپلیکیشن ریموت به جای استفاده از آدرس server1.example.com:3000 شما میتوانید به آسانی از localhost:8080 یا 192.168.43.31:8080 همانند تصویر زیر استفاده کنید.
    برای دیدن سایز بزرگ روی عکس کلیک کنید

نام: Access-a-Remote-App-via-Local-SSH-Port-Forwarding-2.png
مشاهده: 1
حجم: 36.7 کیلو بایت




    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 
    به دنبال بخش مورد نظر بگردید و آنرا از کامنت خارج کنید و مقدار آنرا همانند زیر برابر با yes قرار دهید.
    کد PHP:
    GatewayPorts yes 
    برای دیدن سایز بزرگ روی عکس کلیک کنید

نام: Enable-Remote-SSH-Port-Forwarding-3.png
مشاهده: 1
حجم: 8.5 کیلو بایت


    تغییرات را ذخیره کنید و از آن خارج شوید. سپس به منظور اعمال تغییرات شما نیاز دارید که سرویس sshd را ریستارت کنید.
    کد PHP:
    sudo systemctl restart sshd
    OR
    sudo service sshd restart 
    سپس دستور زیر را برای فوروارد کردن پورت 5000 روی ماشین ریموت به پورت 3000 روی ماشین لوکال اجرا کنید.
    کد PHP:
    ssh --N admin@server1.example.com -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 آغاز میکند که به شما امکان اتصال به هاست ریموت را میدهد.
    کد PHP:
    ssh ---D 1080 admin@server1.example.com 
    از این به بعد شما میتوانید کاری کنید که اپلیکیشن های روی ماشین تان از این سرور SSH Proxy استفاده کنند، تنها کافیست تنظیمات و کانفیگ آنها را طوری انجام دهید که از این سرور استفاده کنند. دقت کنید که Socks Proxy بعد از اینکه session ssh بسته شود کار خود را متوقف خواهد کرد.


    خلاصه

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

    نکته : port forwarding ssh معایب قابل ملاحظه ای دارد، این دستور میتواند آثار سوءی داشته باشد، میتواند برای bypass کردن مانیتورینگ شبکه و برنامه های فیلترینگ ترافیک (یا فایروال) مورد استفاده قرار گیرد. هکرها میتوانند از آن برای فعالیت های مخرب خود استفاده کنند. در مقاله بعدی ما به شما نحوه غیرفعال کردن port forwarding local برای ssh را نمایش خواهیم داد.
    ویرایش توسط Habili : http://linux-zone.org/forums/member/5-habili در ساعت 10-03-2018, 02:53 PM

  • #2
    با سلام مطلب جالب و خیلی مفیدی بود ولی کاش به جای فقط نوشتن کانفیگ ها همراه با سناریو مطالب رو توضیح می دادید که باعث درک بهتر میشد

    نظر

    پردازش ...
    X