SSH و SSH Tunneling چیست و چگونه پیکربندی میشود؟

تونل SSH روشی برای انتقال داده های شبکه از طریق یک اتصال SSH رمزگذاری شده است. می توان از آن برای افزودن رمزگذاری به برنامه های قدیمی استفاده کرد. همچنین می توان از آن برای پیاده سازی VPN (شبکه های خصوصی مجازی) و دسترسی به خدمات اینترانت در فایروال ها استفاده کرد. SSH و تونل آن یک پروتکل امن و رمز نگاری شده انتقال داده ها در شبکه محسوب می شوند که برای ایجاد شبکه های خصوصی و ارتباط امن و دسترسی به خدمات اینترنت و بیشتر برای تنظیم سرورها و فایروال ها استفاده می شود.

یکی از قدرتمندترین ویژگی‌های SSH که می‌تواند مشکلات امنیتی و ارتباطی زیادی را حل کند، SSH Tunneling یا “تونل‌زنی SSH” است. این قابلیت به شما اجازه می‌دهد تا ترافیک شبکه را به صورت امن و رمزنگاری شده از طریق یک اتصال SSH عبور دهید. اگر صفحه مقاله شما در گوگل بازدید خوبی داشته اما کلیک کمی گرفته، احتمالاً کاربران به دنبال درک عمیق‌تر از SSH Tunneling و نحوه پیکربندی آن هستند. در این مقاله جامع و سئویی، به طور کامل توضیح می‌دهیم که SSH و SSH Tunneling چیست، چگونه کار می‌کنند و قدم به قدم نحوه پیکربندی آن‌ها را آموزش می‌دهیم تا نه تنها اطلاعات کاملی به کاربران خود بدهید، بلکه نرخ کلیک (CTR) مقاله خود را نیز به شدت افزایش دهید.

کاربردهای اصلی SSH

دسترسی از راه دور به سرورها

متداول‌ترین کاربرد SSH برای مدیریت و اجرای دستورات روی سرورهای لینوکسی از راه دور است.

انتقال فایل امن (SCP و SFTP)

پروتکل‌های SCP (Secure Copy Protocol) و SFTP (SSH File Transfer Protocol) به شما اجازه می‌دهند تا فایل‌ها را به صورت امن بین کامپیوتر محلی و سرور منتقل کنید.

اجرای دستورات از راه دور

می‌توانید اسکریپت‌ها و دستورات را به صورت خودکار روی سرورهای راه دور اجرا کنید.

SSH Tunneling چیست؟ فراتر از یک اتصال ساده

SSH Tunneling (همچنین به آن SSH Port Forwarding هم گفته می‌شود) قابلیتی قدرتمند در SSH است که به شما امکان می‌دهد ترافیک شبکه را به صورت رمزنگاری شده از طریق یک اتصال SSH عبور دهید. فرض کنید می‌خواهید به یک سرویس (مثل یک دیتابیس یا یک وب‌سایت داخلی) دسترسی پیدا کنید که فقط از داخل شبکه محلی سرور شما قابل دسترسی است، یا می‌خواهید ترافیک یک برنامه ناامن را از طریق یک کانال امن عبور دهید. اینجا SSH Tunneling به کمک شما می‌آید.

SSH Tunneling در واقع یک “تونل” یا “کانال” امن بین کامپیوتر شما و سرور SSH ایجاد می‌کند. ترافیک شما از طریق این تونل رمزنگاری شده عبور کرده و سپس به مقصد نهایی می‌رسد. این ویژگی به سه نوع اصلی تقسیم می‌شود:

1. Local Port Forwarding (تونل محلی)

    • کاربرد: رایج‌ترین نوع تونل‌زنی. به شما امکان می‌دهد از کامپیوتر محلی خود به سرویسی در شبکه سرور راه دور دسترسی پیدا کنید که به صورت مستقیم قابل دسترسی نیست.
    • مثال: دسترسی امن به یک دیتابیس (مثلاً MySQL یا PostgreSQL) روی سرور از طریق برنامه مدیریت دیتابیس روی کامپیوتر شخصی‌تان. دیتابیس فقط روی پورت داخلی سرور (مثلاً 3306) باز است، اما شما می‌توانید ترافیک پورت 3306 محلی خود را از طریق تونل SSH به پورت 3306 سرور هدایت کنید.

2. Remote Port Forwarding (تونل از راه دور)

    • کاربرد: به یک کامپیوتر راه دور اجازه می‌دهد تا از طریق سرور SSH به سرویسی روی کامپیوتر محلی شما دسترسی پیدا کند. کمتر رایج است و معمولاً برای مقاصد خاص یا دسترسی از پشت فایروال استفاده می‌شود.
    • مثال: اجازه دادن به همکارتان که در یک شبکه دیگر است، تا به یک وب‌سرور آزمایشی روی کامپیوتر محلی شما دسترسی پیدا کند.

3. Dynamic Port Forwarding (تونل پویا - SOCKS Proxy)

    • کاربرد: یک پروکسی SOCKS ایجاد می‌کند که به شما اجازه می‌دهد ترافیک برنامه‌های مختلف (مثلاً مرورگر وب) را از طریق تونل SSH ارسال کنید. این نوع تونل‌زنی می‌تواند برای دور زدن فیلترینگ یا ناشناس ماندن نسبی در اینترنت مفید باشد.
    • مثال: تمام ترافیک مرورگر خود را از طریق سرور SSH عبور دهید تا سایت‌هایی که در کشور شما فیلتر هستند، قابل دسترسی شوند.

چگونه SSH و SSH Tunneling را پیکربندی کنیم؟ (راهنمای گام به گام)

پیکربندی SSH و SSH Tunneling نسبتاً ساده است. در ادامه، مراحل لازم را توضیح می‌دهیم:

بخش اول: پیکربندی اولیه SSH (برای دسترسی امن)

گام 1: نصب کلاینت SSH (روی کامپیوتر شما)

  • لینوکس و macOS: کلاینت SSH به صورت پیش‌فرض در ترمینال سیستم عامل شما نصب است. فقط کافی است ترمینال را باز کنید.
  • ویندوز: می‌توانید از PowerShell (که در نسخه‌های جدید ویندوز 10 و 11 SSH Client داخلی دارد) استفاده کنید، یا نرم‌افزارهای رایگانی مانند PuTTY یا Termius را نصب کنید.

گام 2: نصب سرور SSH (روی سرور راه دور شما)

  • برای سرورهای لینوکسی (مانند Ubuntu, CentOS)، معمولاً سرویس OpenSSH Server به صورت پیش‌فرض نصب است. اگر نبود، می‌توانید با دستورات زیر آن را نصب کنید:
    • در Debian/Ubuntu: sudo apt update && sudo apt install openssh-server
    • در CentOS/RHEL: sudo yum install openssh-server
  • پس از نصب، مطمئن شوید که سرویس SSH در حال اجرا است: sudo systemctl status ssh

گام 3: اتصال به سرور از طریق SSH (پایه)

  • با استفاده از نام کاربری و رمز عبور (روش کمتر امن، فقط برای شروع):

ssh username@your_server_ip_or_domain

    • مثال: ssh root@192.168.1.100 یا ssh admin@yourdomain.com
    • پس از وارد کردن دستور، از شما رمز عبور خواسته می‌شود.
  • با استفاده از احراز هویت مبتنی بر کلید SSH (روش توصیه شده و امن):
    1. تولید جفت کلید (در کامپیوتر محلی شما):

ssh-keygen -t rsa -b 4096

این دستور یک کلید خصوصی (private key) و یک کلید عمومی (public key) تولید می‌کند (معمولاً در مسیر ~/.ssh/id_rsa و ~/.ssh/id_rsa.pub). کلید خصوصی را به شدت محافظت کنید و آن را با کسی به اشتراک نگذارید.

    1. کپی کردن کلید عمومی به سرور:
      • با ssh-copy-id (روش آسان و توصیه شده):

ssh-copy-id username@your_server_ip_or_domain

این دستور کلید عمومی شما را به فایل ~/.ssh/authorized_keys در سرور اضافه می‌کند.

      • کپی دستی (اگر ssh-copy-id در دسترس نیست):

cat ~/.ssh/id_rsa.pub | ssh username@your_server_ip_or_domain “mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys”

    1. اتصال با کلید:

ssh username@your_server_ip_or_domain

حالا باید بدون نیاز به رمز عبور (یا با passphrase کلید خصوصی اگر تنظیم کرده‌اید) متصل شوید.

گام 4: افزایش امنیت SSH (پیکربندی در فایل sshd_config روی سرور)

  • فایل پیکربندی SSH را ویرایش کنید: sudo nano /etc/ssh/sshd_config (با ویرایشگر متن دلخواه)
  • غیرفعال کردن ورود با رمز عبور (پس از تنظیم احراز هویت با کلید):

PasswordAuthentication no

  • غیرفعال کردن ورود با کاربر root (توصیه شده):

PermitRootLogin no (به جای آن با کاربر عادی وارد شده و از sudo استفاده کنید.)

  • تغییر پورت پیش‌فرض SSH (از 22 به یک پورت دیگر):

Port 2222 (مثلاً پورت 2222 را انتخاب کنید. حتماً این پورت را در فایروال سرور خود باز کنید.)

  • ذخیره تغییرات و راه‌اندازی مجدد سرویس SSH:

sudo systemctl restart ssh

بخش دوم: پیکربندی SSH Tunneling

حالا که اتصال SSH پایه برقرار شده است، می‌توانیم به سراغ پیکربندی تونل‌ها برویم.

  1. Local Port Forwarding (تونل محلی):
  • سناریو: می‌خواهید به یک دیتابیس MySQL (پورت 3306) روی سرور (IP: 192.168.1.100) از طریق کامپیوتر محلی خود (پورت 8000) دسترسی پیدا کنید.
  • دستور (در ترمینال کامپیوتر محلی شما):

ssh -L 8000:127.0.0.1:3306 username@your_server_ip_or_domain

    • -L: نوع تونل (Local)
    • 8000: پورتی که روی کامپیوتر محلی شما باز می‌شود.
    • 127.0.0.1: آدرس IP سرویس مقصد (در این مثال، سرویس دیتابیس روی خود سرور است، پس 127.0.0.1 به معنی “localhost” سرور است).
    • 3306: پورت سرویس مقصد روی سرور.
    • username@your_server_ip_or_domain: اطلاعات اتصال به سرور SSH.
  • بعد از اجرای دستور: می‌توانید برنامه مدیریت دیتابیس خود را باز کرده و به localhost:8000 متصل شوید. ترافیک شما از طریق تونل SSH به پورت 3306 سرور هدایت می‌شود.
  1. Remote Port Forwarding (تونل از راه دور):
  • سناریو: می‌خواهید به دوستتان اجازه دهید از طریق سرور شما (IP: your_server_ip) به یک وب‌سرور آزمایشی روی کامپیوتر محلی شما (پورت 8080) دسترسی پیدا کند.
  • دستور (در ترمینال کامپیوتر محلی شما):

ssh -R 80:127.0.0.1:8080 username@your_server_ip_or_domain

    • -R: نوع تونل (Remote)
    • 80: پورتی که روی سرور SSH باز می‌شود (دوست شما باید به your_server_ip:80 متصل شود).
    • 127.0.0.1: آدرس IP سرویس مقصد (در این مثال، سرویس وب روی خود کامپیوتر محلی شماست).
    • 8080: پورت سرویس مقصد روی کامپیوتر محلی شما.
    • username@your_server_ip_or_domain: اطلاعات اتصال به سرور SSH.
  • نکته امنیتی: برای اینکه پورت باز شده روی سرور (80) برای همه قابل دسترسی باشد (نه فقط برای localhost سرور)، ممکن است نیاز به تنظیم GatewayPorts yes در فایل sshd_config سرور و راه‌اندازی مجدد SSH داشته باشید. این کار باید با احتیاط فراوان انجام شود زیرا می‌تواند امنیت سرور را به خطر اندازد.
  1. Dynamic Port Forwarding (تونل پویا – SOCKS Proxy):
  • سناریو: می‌خواهید ترافیک مرورگر خود را از طریق سرور SSH عبور دهید تا به سایت‌های فیلتر شده دسترسی پیدا کنید.
  • دستور (در ترمینال کامپیوتر محلی شما):

ssh -D 8080 username@your_server_ip_or_domain

    • -D: نوع تونل (Dynamic)
    • 8080: پورتی که روی کامپیوتر محلی شما باز می‌شود و به عنوان پروکسی SOCKS عمل می‌کند.
  • بعد از اجرای دستور: باید مرورگر یا برنامه مورد نظر خود را پیکربندی کنید تا از پروکسی SOCKS در localhost:8080 استفاده کند. (به عنوان مثال، در فایرفاکس به تنظیمات پروکسی بروید و SOCKS Host را 127.0.0.1 و پورت را 8080 تنظیم کنید.)

جهت دریافت اطلاعات بیشتر درمورد دوره‌ها و اساتید با مشاورین دوران آکادمی در ارتباط باشید.

نکات مهم و بهترین روش‌ها برای استفاده از SSH Tunneling

امنیت کلید SSH

همواره از احراز هویت مبتنی بر کلید برای SSH استفاده کنید و کلید خصوصی خود را با یک رمز عبور (passphrase) قوی محافظت کنید.

فایروال

مطمئن شوید که فایروال سرور شما (مانند UFW یا Iptables) فقط پورت SSH (پورت 22 یا پورت سفارشی شما) را برای IPهای مجاز باز نگه دارد. پورت‌هایی که از طریق تونل‌زنی استفاده می‌کنید، نیازی نیست مستقیماً روی سرور باز باشند.

ماندگاری تونل

اگر می‌خواهید تونل SSH در پس‌زمینه اجرا شود و حتی پس از بستن ترمینال نیز فعال بماند، از گزینه -fN استفاده کنید: ssh -fN -L 8000:127.0.0.1:3306 user@server

عیب‌یابی

اگر تونل کار نمی‌کند، ابتدا اتصال SSH پایه را بررسی کنید. سپس مطمئن شوید که پورت‌های مورد استفاده در دستور تونلینگ اشغال نشده باشند و سرویس‌های مقصد روی سرور در حال اجرا باشند.

استفاده از فایل ~/.ssh/config

برای مدیریت آسان‌تر اتصالات SSH و تونل‌ها، می‌توانید تنظیمات آن‌ها را در فایل ~/.ssh/config خود ذخیره کنید. این کار به شما اجازه می‌دهد تا اتصالات پیچیده را با یک نام مستعار ساده اجرا کنید.

SSH و به ویژه قابلیت پیشرفته SSH Tunneling، ابزارهایی بی‌نظیر برای برقراری ارتباطات امن و انعطاف‌پذیر در دنیای شبکه‌ها هستند. با درک صحیح نحوه عملکرد آن‌ها و یادگیری پیکربندی انواع تونل‌ها، می‌توانید نه تنها امنیت ارتباطات خود را به شدت افزایش دهید، بلکه به سرویس‌ها و منابعی دسترسی پیدا کنید که به صورت عادی قابل دسترسی نیستند. اگر مقاله شما بازدید خوبی دارد اما کلیک کمی می‌گیرد، تمرکز بر روی توضیح دقیق و کاربردی SSH Tunneling و ارائه مثال‌های گام به گام می‌تواند به مخاطبان شما کمک کند تا ارزش واقعی محتوای شما را درک کرده و نرخ کلیک را به طور چشمگیری افزایش دهد.

بیشتر بخوانید :