آموزش لینوکس

آموزش ساخت SSH Tunnel و راه اندازی Port Forwarding در لینوکس

یکی از پروتکل های مرموز و البته کاربردی در دنیای لینوکس، پروتکل SSH Tunnel است. این پروتکل قابلیت و توانایی ایجاد تونل و یک اتصال رمزگذاری شده را دارد. بدین صورت می توان بین کلاینت و سرور تونلی ایمن ایجاد کرد تا اطلاعات و داده ها به صورت رمزگذاری شده منتقل شوند. به این ترتیب می توانید به سادگی امنیت شبکه را افزایش دهید. ما در این مطلب قصد داریم تا به صورت کامل در خصوص SSH Tunnel در لینوکس صحبت کرده و ببینیم که وصل شدن به سرور لینوکس با با استفاده از این روش چگونه است؟

آشنایی با SSH Tunnel در لینوکس

تونل SSH که به آن پورت SSH نیز گفته می شود، راهی برای انتقال ترافیک محلی به هاست های راه دور از طریق SSH است. به بیان دیگر، به کمک SSH Tunnel می توان تمامی اتصالات را به صورت کاملا ایمن و رمزگذاری شده، پیاده سازی کرد. این راه، همچنین راهی آسان برای راه اندازی یک VPC یا شبکه خصوصی مجازی اولیه بوده که می تواند مسیری ایمن برای اتصال به شبکه های خصوصی از طریق شبکه های عمومی ناامین مانند اینترنت ایجاد کند. البته همچنان حملات SSH می توانند آسیب رسان باشند اما درصد وقوع آنها کاهش می یابد.

SSH Tunnel در لینوکس همچنین به شما این امکان را می دهد تا به سرورهای محلی پشت NATها و فایروال ها نیز از طریق تونل های ایمن دسترسی پیدا کنید. به صورت کلی session های SSH اجازه ایجاد تونل برای شبکه سازی را به کاربران می دهند. اگر قصد ایجاد تونل را داشته باشید باید بدانید که به صورت کلی سه مدل شیوه ارسال پورت SSH وجود دارد. ما در این مطلب در خصوص هر سه نوع شیوه صحبت خواهیم کرد:

  • Local SSH Port Forwarding
  • Remote SSH Port Forwarding
  • Dynamic SSH Port Forwarding

برای درک هرچه بهتر، ما در این مطلب برای ایجاد محیط تست خود از تنظیمات زیر استفاده کرده ایم:

Local Host: 192.168.43.31
Remote Host: Linode CentOS 7 VPS with hostname server1.example.com

روش اول: Local SSH Port Forwarding

به کمک این روش port forwarding می توانید از رایانه محلی خود به یک سرور، از راه دور متصل شوید. در این روش ایجاد SSH Tunnel در لینوکس حتی اگر در پشت یک فایروال محدود شده اید یا توسط یک فایروال از دسترسی به برنامه ای که روی پورت 3000 و سرور راه دور قرار دارد، مسدود شده اید، باز هم امکان پذیر بوده و می توانید اتصال خود را ایجاد کنید. برای این کار می توانید یک پورت محلی (برای مثال 8080) را ارسال کرده و از آن برای دسترسی محلی استفاده کنید. سینتکس این دستور به شرح زیر خواهد بود:

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

اضافه کردن flag (پرچم) –N برای جلوگیری از اجرای دستور remote است. اگر این عمل را انجام دهید، دیگر امکان دریافت shell را نخواهید داشت.

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

سوئیچ –f دستور اجرا در پس زمینه را به SSH Tunnel در لینوکس می دهد.

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

بعد از اجرای دستورهای بالا، می توانید در دستگاه محلی خود، یک مرورگر را باز کرده و به جای دسترسی به برنامه از راه دور با آدرس server1.example.com:3000، از آدرس 192.168.43.31:8080 استفاده کنید.

روش دوم: Remote SSH Port Forwarding

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

کافی است تا فایل را باز کرده و سپس به کمک یک ویرایشگر، خط فرمان زیر را ویرایش کنید:

$ sudo vim /etc/ssh/sshd_config

حال دستورالعمل مورد نیاز خود را پیدا کرده و مقدار آن را به yes تغییر دهید.

GatewayPorts yes

بعد از ذخیره اعمال تغییرات، از برنامه خارج شوید. در قدم بعدی SSH Tunnel در لینوکس نیاز است تا sshd را مجددا راه اندازی کرده تا تغییرات ایجاد شده، اعمال شوند.

$ sudo systemctl restart sshd

یا

$ sudo service sshd restart

حال برای انتقال پورت 500 از دستگاه راه دور به پورت 300 دستگاه محلی، کافی است تا دستور زیر را اجرا کنید:

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

به کمک این روش می توانید یک سرور توسعه محلی را به خصوص در پشت NFTها و یا فایروال ها از طریق تونل های امنی که در معرض اینترنت هستند، قرار دهید.

روش سوم: Dynamic SSH Port Forwarding

این روش، برخلاف روش های local and remote port forwarding که امکان برقرار کردن ارتباط تنها با یک پورت را فراهم می کنند، به شما این اجازه را می دهد تا طیف کاملی از ارتباطات TCP را در طیف وسیعی از پورت ها ایجاد کنید. Dynamic SSH Port Forwarding به صورت پیش فرض دستگاه شما را به عنوان یک سرور پراکسی SOCKS تنظیم کرده و قادر به گوش دادن به پورت 1080 است.

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

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

بعد از اجرای این دستور، می توانید با ویرایش تنظیمات و پیکربندی آن ها، به برنامه های کاربردی روی دستگاه خود این اجازه را دهید تا به سرور پراکسی SSH متصل شوند. این روش همچنین راهی برای وصل شدن به سرور لینوکس با اندروید نیز شناخته می شود. تنها به یاد داشته باشید که بعد از بسته شدن نشست SSH، پروکسی SOCKS نیز قطع خواهد شد.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا