انتقال پورت SSH

به اشتراک بگذارید

ssh-port-forwarding

فهرست مطالب

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

انتقال پورت SSH چیست؟

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

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

انتقال پورت SSH دارای سه نوع اصلی است که هر یک موارد استفاده متفاوتی دارند:

  • انتقال پورت محلی (ssh -L): ترافیک را از دستگاه محلی به سرور راه دور هدایت می‌کند. برای دسترسی به خدمات راه دور به‌گونه‌ای که گویی به صورت محلی اجرا می‌شوند، مفید است.

  • انتقال پورت از راه دور (ssh -R): ترافیک را از سرور راه دور به دستگاه محلی هدایت می‌کند. برای نمایش خدمات محلی به شبکه‌های راه دور مناسب است.

  • انتقال پورت پویا (ssh -D): یک پراکسی SOCKS ایجاد می‌کند که می‌تواند انواع مختلفی از ترافیک را از طریق اتصال SSH هدایت کند. برای مرور وب امن یا دسترسی به چندین سرویس ایده‌آل است.

در ادامه، هر نوع را به تفصیل بررسی می‌کنیم تا کاربردهای خاص و نحوه پیاده‌سازی مؤثر آن‌ها را درک کنید.

انتقال پورت محلی (ssh -L)

انتقال پورت محلی یک تونل امن بین دستگاه محلی و سرور راه دور ایجاد می‌کند. در ادامه نحوه عملکرد و کاربردهای آن توضیح داده شده است:

نحوه عملکرد

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

مزایای کلیدی

  1. دسترسی به فایروال: اگر نیاز به دسترسی به سرویسی دارید که توسط فایروال مسدود شده است، انتقال پورت محلی به شما امکان می‌دهد این محدودیت‌ها را دور بزنید و امنیت را حفظ کنید.

  2. اتصالات امن پایگاه داده: هنگام کار با پایگاه‌های داده راه دور، می‌توانید یک اتصال امن ایجاد کنید که تمام انتقال داده‌ها را رمزنگاری می‌کند و اطلاعات حساس را محافظت می‌کند.

  3. دسترسی به برنامه‌های وب: می‌توانید به برنامه‌های وب در حال اجرا روی سرورهای راه دور به‌گونه‌ای دسترسی پیدا کنید که گویی روی دستگاه محلی شما هستند.

  4. آزمایش توسعه: توسعه‌دهندگان می‌توانند خدمات راه دور را به صورت محلی آزمایش کنند، که اشکال‌زدایی و توسعه برنامه‌ها را آسان‌تر می‌کند.

ویژگی‌های امنیتی

اتصال توسط رمزنگاری SSH محافظت می‌شود، به این معنی که:

  • تمام داده‌ها در طول انتقال رمزنگاری می‌شوند.

  • اتصال احراز هویت شده است.

  • تونل از دسترسی غیرمجاز جلوگیری می‌کند.

  • داده‌های شما از جاسوسی یا دستکاری در امان هستند.

این ویژگی‌ها انتقال پورت محلی را به ابزاری ضروری برای دسترسی امن راه دور و کارهای توسعه تبدیل می‌کنند.

سینتکس

ssh -L local_port:destination_host:destination_port username@ssh_server

 

مثال

فرض کنید در یک پروژه توسعه محلی کار می‌کنید و پایگاه داده شما روی سرور راه دور (remote-db.com) با PostgreSQL روی پورت پیش‌فرض 5432 میزبانی می‌شود. برای ایجاد یک اتصال امن، از انتقال پورت محلی به این صورت استفاده می‌کنید:

ssh -L 5433:localhost:5432 user@remote-db.com

 

اکنون، اتصال به localhost:5433 به صورت محلی، ترافیک را به صورت امن به پایگاه داده PostgreSQL روی remote-db.com هدایت می‌کند. این بدان معناست که هر برنامه‌ای که برای اتصال به localhost:5433 تنظیم شده باشد، در واقع از طریق تونل SSH رمزنگاری‌شده با پایگاه داده راه دور ارتباط برقرار می‌کند.

اشتباه رایج: اشتباه در پورت‌ها. همیشه مطمئن شوید که پورت‌های محلی و مقصد با تنظیمات اتصال موردنظر شما مطابقت دارند. برای مثال، اگر قصد اتصال به پایگاه داده MySQL روی پورت 3306 را دارید، مطمئن شوید که پورت مقصد را در دستور SSH به درستی مشخص کرده‌اید.

انتقال پورت از راه دور (ssh -R)

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

  1. آزمایش توسعه محلی: می‌خواهید محیط توسعه محلی خود را با اعضای تیم یا مشتریان راه دور برای آزمایش و بازخورد به اشتراک بگذارید.

  2. دور زدن NAT/فایروال: دستگاه محلی شما پشت NAT یا فایروال محدودکننده‌ای است که مانع دسترسی مستقیم خارجی می‌شود.

  3. دسترسی راه دور به خدمات محلی: نیاز به ارائه دسترسی امن به خدماتی مانند سرورهای وب، پایگاه‌های داده یا ابزارهای توسعه‌ای که روی دستگاه شما اجرا می‌شوند.

  4. نمایش موقت خدمات: می‌خواهید به طور موقت یک سرویس محلی را بدون تغییر تنظیمات شبکه یا قوانین فایروال نمایش دهید.

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

سینتکس دستور

ssh -R remote_port:local_host:local_port username@remote_ssh_server

 

مثال سناریو

برای فعال کردن اشکال‌زدایی راه دور روی دستگاه محلی (localhost) که از remote-ssh.com قابل دسترسی باشد، می‌توانید انتقال پورت از راه دور را تنظیم کنید. این امکان را به شما می‌دهد تا پورت اشکال‌زدایی محلی خود را به صورت امن به سرور راه دور نمایش دهید. دستور زیر را اجرا کنید:

ssh -R 9000:localhost:9000 user@remote-ssh.com

 

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

نکته مهم پیکربندی: برای فعال کردن انتقال پورت از راه دور، باید سرور SSH را برای پذیرش اتصالات ورودی پیکربندی کنید. این کار شامل دو مرحله است:

  1. فایل پیکربندی سرور SSH (/etc/ssh/sshd_config) را ویرایش کنید و تنظیم کنید:

GatewayPorts yes
  1. سرویس SSH را برای اعمال تغییرات راه‌اندازی مجدد کنید:

sudo systemctl restart sshd

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

انتقال پورت پویا (ssh -D)

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

  1. مرور امن: رمزنگاری تمام ترافیک وب شما هنگام استفاده از شبکه‌های عمومی یا غیرقابل اعتماد.

  2. دور زدن محدودیت‌های شبکه: دسترسی به منابعی که ممکن است در شبکه فعلی شما مسدود شده باشند.

  3. حفاظت از حریم خصوصی: مخفی کردن آدرس IP واقعی شما با هدایت ترافیک از طریق سرور راه دور.

  4. پراکسی در سطح برنامه: امکان هدایت ترافیک برنامه‌های خاص از طریق تونل امن.

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

سینتکس انتقال پورت پویا

ssh -D local_port username@ssh_server

 

مثال استفاده

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

ssh -D 8080 user@secure-server.com

 

برای استفاده از پراکسی SOCKS، برنامه‌ها یا مرورگر خود را تنظیم کنید تا از localhost:8080 به عنوان سرور پراکسی استفاده کنند. نحوه تنظیم در برنامه‌های رایج:

  1. فایرفاکس:

    • به تنظیمات > تنظیمات شبکه بروید.

    • گزینه “پیکربندی دستی پراکسی” را انتخاب کنید.

    • در قسمت میزبان SOCKS، 127.0.0.1 را وارد کنید.

    • در قسمت پورت، 8080 را وارد کنید.

    • نوع پراکسی را به “SOCKS v5” تنظیم کنید.

  2. کروم/اج:

    • افزونه پراکسی مانند “Proxy SwitchyOmega” را نصب کنید.

    • یک پروفایل پراکسی جدید ایجاد کنید.

    • سرور پراکسی را به 127.0.0.1:8080 تنظیم کنید.

    • پروتکل را به SOCKS5 انتخاب کنید.

  3. در سطح سیستم (لینوکس/مک‌او‌اس):

    • متغیرهای محیطی http_proxy و https_proxy را تنظیم کنید:

export http_proxy="socks5://127.0.0.1:8080"
export https_proxy="socks5://127.0.0.1:8080"

 

این پیکربندی برای مرور وب امن در شبکه‌های ناامن بسیار مفید است، زیرا تمام ترافیک از طریق تونل SSH رمزنگاری می‌شود. می‌توانید با بررسی آدرس IP خود قبل و بعد از فعال کردن پراکسی، عملکرد آن را تأیید کنید. برای بررسی آدرس IP، می‌توانید از وب‌سایت‌هایی مانند whatismyip.com استفاده کنید.

پیکربندی انتقال پورت SSH در فایل تنظیمات SSH

انتقال پورت SSH را می‌توان به راحتی با استفاده از فایل تنظیمات SSH (~/.ssh/config) تنظیم کرد. این روش پیکربندی‌های تکراری را ساده‌تر می‌کند.

Host db-forward HostName remote-db.com User user LocalForward 5433 localhost:5432

 

برای اتصال آسان:

ssh db-forward

 

انتقال پورت SSH برای چندین پورت

شما می‌توانید چندین پورت را به طور همزمان با مشخص کردن چندین گزینه -L یا -R در یک دستور SSH هدایت کنید. این امکان را به شما می‌دهد تا چندین تونل انتقال پورت را در یک اتصال ایجاد کنید، که برای دسترسی به چندین سرویس روی سرور راه دور مفید است. برای مثال:

ssh -L 8080:localhost:80 -L 5432:localhost:5432 user@server.com

 

انتقال پورت SSH در ویندوز

کاربران ویندوز می‌توانند از ابزارهایی مانند PuTTY برای استفاده از انتقال پورت SSH استفاده کنند:

  • PuTTY را اجرا کنید.

  • آدرس IP سرور SSH خود را وارد کنید.

  • به Connection → SSH → Tunnels بروید.

  • تنظیمات انتقال پورت موردنظر (محلی، از راه دور، پویا) را اضافه کنید.

انتقال پورت SSH در لینوکس

لینوکس پشتیبانی بومی SSH را از طریق رابط ترمینال خود ارائه می‌دهد و تنظیم و مدیریت انتقال پورت SSH را ساده می‌کند. کلاینت SSH معمولاً در اکثر توزیع‌های لینوکس از قبل نصب شده است و می‌توانید مستقیماً از خط فرمان بدون نیاز به نرم‌افزار اضافی از آن استفاده کنید.

برای استفاده از انتقال پورت SSH در لینوکس:

  1. ترمینال خود را باز کنید.

  2. از دستور ssh با گزینه‌های انتقال مناسب استفاده کنید.

  3. به سرور راه دور خود متصل شوید.

سینتکس پایه برای انتقال پورت محلی:

ssh -L local_port:remote_host:remote_port user@ssh_server

 

برای انتقال از راه دور یا پویا، طبق توضیحات قبلی تنظیم کنید.

موارد استفاده عملی از انتقال پورت SSH

  • مدیریت پایگاه داده: دسترسی امن به پایگاه‌های داده راه دور.

  • توسعه وب: اشکال‌زدایی برنامه‌های وب راه دور به صورت محلی.

  • مرور امن: استفاده از انتقال پورت پویا برای مرور امن.

مشکلات رایج و عیب‌یابی

سردرگمی در جهت‌ها (محلی در مقابل از راه دور)

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

تعارض پورت‌ها

تعارض پورت‌ها زمانی رخ می‌دهد که سرویسی دیگر از پورتی که می‌خواهید هدایت کنید استفاده می‌کند. برای جلوگیری از این مشکل:

  • بررسی کنید که آیا پورت در حال استفاده است:

sudo lsof -i :port_number

 

  • در صورت اشغال بودن پورت، پورت دیگری را انتخاب کنید.

  • مطمئن شوید که تونل‌های SSH دیگر از همان پورت استفاده نمی‌کنند.

خطاهای دسترسی ممنوع

تنظیمات سمت سرور (sshd_config) را بررسی کنید:

sudo nano /etc/ssh/sshd_config

 

مطمئن شوید که دستورات مناسب (AllowTcpForwarding yes) به درستی پیکربندی شده‌اند.

برای عیب‌یابی دقیق، به راهنمای ما در مورد نحوه رفع مشکلات اتصال SSH مراجعه کنید.

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

هنگام استفاده از انتقال پورت SSH، این بهترین روش‌های امنیتی را رعایت کنید:

  1. محدود کردن دسترسی: فقط پورت‌های لازم برای مورد استفاده خود را هدایت کنید. هر پورت هدایت‌شده سطح حمله شما را افزایش می‌دهد.

  2. استفاده از احراز هویت قوی: همیشه از کلیدهای SSH به جای رمزهای عبور برای احراز هویت استفاده کنید.

  3. نظارت بر اتصالات: به طور منظم اتصالات SSH فعال و پස

System: پورت‌های هدایت‌شده را بررسی کنید:

netstat -tulpn | grep ssh

 

  1. محدود کردن انتقال: در پیکربندی سرور SSH، انتقال پورت را به کاربران یا آدرس‌های IP خاص محدود کنید:

AllowTcpForwarding yes
PermitOpen host:port

 

  1. استفاده از پورت‌های غیراستاندارد: در صورت امکان، از پورت‌های غیراستاندارد برای سرویس SSH خود استفاده کنید تا تلاش‌های اسکن خودکار کاهش یابد.

  2. به‌روزرسانی نرم‌افزار: به طور منظم کلاینت و سرور SSH خود را به‌روزرسانی کنید تا آسیب‌پذیری‌های امنیتی برطرف شوند.

  3. نظارت بر لاگ‌ها: لاگ‌های SSH را برای فعالیت‌های مشکوک فعال و بررسی کنید:

sudo tail -f /var/log/auth.log

 

سؤالات متداول

انتقال پورت SSH برای چه استفاده می‌شود؟

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

تفاوت بین انتقال پورت محلی و از راه دور چیست؟

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

چگونه از انتقال پورت پویا SSH استفاده کنم؟

انتقال پورت پویا (-D) یک پراکسی SOCKS همه‌کاره ایجاد می‌کند که می‌تواند چندین اتصال همزمان را از طریق یک تونل SSH مدیریت کند. با استفاده از دستور ssh -D 1080 user@server، یک پراکسی روی پورت 1080 ایجاد کنید. سپس برنامه‌های خود را برای هدایت ترافیک از طریق این پراکسی تنظیم کنید.

آیا انتقال پورت SSH امن است؟

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

آیا می‌توانم چندین پورت را در یک اتصال SSH هدایت کنم؟

بله، SSH به شما امکان می‌دهد چندین پورت را به طور همزمان از طریق یک اتصال SSH با مشخص کردن چندین گزینه -L یا -R هدایت کنید. برای مثال: ssh -L 8080:localhost:80 -L 5433:localhost:5432 user@server.

چگونه مشکلات انتقال پورت SSH را عیب‌یابی کنم؟

برای عیب‌یابی، ابتدا بررسی کنید که آیا پورت‌های موردنظر در حال استفاده هستند یا خیر، با استفاده از دستوراتی مانند netstat یا lsof. فایل sshd_config را بررسی کنید و مطمئن شوید که دستور AllowTcpForwarding به درستی تنظیم شده است. قوانین فایروال را بررسی کنید و لاگ‌های اتصال SSH را برای پیام‌های خطا مشاهده کنید.

نتیجه‌گیری

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

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

منابع پیشنهادی برای یادگیری بیشتر:

  • راهنمای رفع مشکلات اتصال SSH

  • آموزش‌های پایه SSH در DigitalOcean

این منابع را در دسترس نگه دارید تا در دنیای عملی و قدرتمند انتقال پورت SSH به کاوش بپردازید. به یاد داشته باشید که امنیت یک فرآیند مداوم است و به‌روز ماندن با بهترین روش‌ها برای حفظ پیاده‌سازی‌های قوی SSH ضروری است.