در این مقاله قصد دارم شما را با مفهومی بسیار جذاب به نام SSH Tunneling / Port Forwarding
آشنا کنم، افرادی که کار System Admin
در یک شرکت انجام داده اند یا دروه LPIC1
, LPIC2
را گذرانده اند حتما با این مفهوم آشنا هستن ولی در این مقاله میخواهم به صورت کامل تر و با سناریو به شرح آن بپردازم.
افرادی که علاقه مند به مباحث شبکه هستن حتما برای آنها این مقاله جذاب می باشد و این را هم بگویم که این مقاله برای کسانی مفید می باشد که حداقل دوره های network+
, CCNA
یا دوره های LPIC
گذرانده باشن از این جهت میگویم که اگر با این مفاهیم آشنا باشید درک عمیق تری نسبت به موضوعی که میخواهم توضیح بدهم دارید.
ولی من تا میتونم هر موضوعی که در این مقاله بحث میشه رو یک تعریف ازش داشته باشم تا دوستانی که حتی آشنایی ندارن از آن درکی پیدا کنن.
SSH Tunneling / Port Forwarding چیست ؟
همین اول یک تعریفی از این مفاهیم داشته باشیم، SSH Tunneling
یک روش انتقال داده های شبکه از طریق یک اتصال امن و مرزنگاری شده می باشد که می توان از آن برای پیاده سازی شبکه های خصوصی و همچنین دسترسی به خدمات اننترانت و فایروال استفاده کرد.
قبل از شروع درک مفهوم SSH Tunneling
باید در مورد مفهوم استاندارد SSH
اطلاع داشته باشیم، SSH
استانداردی برای ورودی های داده به صورت ایمن از راه دور می باشد. همچین می توان ایمن سازی ترافیک داده های هر برنامه کاربردی را با استفاده از port forwarding
فراهم کرد و اساساً هر پورت TCP/IP
را بر روی SSH
می توان تونل کرد. به بیان ساده تر هنگامی که اتصالی را از طریق SSH
برقرار می کنیم تمام داده های که بین سرور و کلاینت رد و بدل می شود به صورت رمزنگاری شده است و نمیتوان اصطلاحا ترافیک شبکه را شنود (sniff network traffic
) کرد.
همانطور که در بالا مشاهده می کنید یک تونل بین یک کلاینت و سرور ایجاد شده است که از طریق SSH
این تونل رمزنگاری شده است.
خب من قصد دارم از تعاریف بیام بیرون و با شکل مفهوم تمام بحثی که قصد دارم و برسونم، به تصویر زیر دقت کنید تا وارد موضوع اصلی بشیم .
اولین مفهومی که میخواهم بگویم NAT Server
می باشد، اول بگویم که چرا از این مفهوم استفاده می کنیم همانطور که در تصویر بالا مشاهده می کنید ما چند کلاینت و یک روتر و یک سرور NAT
داریم که از طریق آن به اینترنت وصل شده ایم. هنگامی که ما شروع به طراحی شبکه میکنیم تمام IP
های ما مثل تمام سیستم های یک دانشگاه در داخل یک شبکه Local
قرار دارند.
IP
ها به دو دسته Public
, Private
تقسیم بندی می شوند، IP Private
همان های هستن که به روتر ها یا سیستم های شبکه داخلی خود میدهیم و از بیرون قابل دسترس نیستن.
IP Public
، این دسته از IP
ها از طریق شرکت های ISP (Internet Service Provider)
قابل خریدن هستن و در بستر اینترنت معتبر می باشند بدین معنی این IP
در فضای ابری که آن را اینترنت می نامیم قابل دسترس هستن، پس برای اینکه ما بتوانیم به فضای اینترنت دسترسی داشته باشیم باید یک IP Valid
داشته باشیم.
NAT (Network Address Translation)
خب در اینجا هست که NAT
وارد عمل می شود، اگر ما از NAT
استفاده نکنیم و بخواهیم به اینترنت دسترسی پیدا کنیم باید برای هر سیستم یک IP Valid
خریدار کنیم پس خیلی جالب نیست !
همانطور که از اسم این مفهوم پیدا می باشد وظیفه ترجمه آدرس شبکه را عهده دارد، در شکل بالا همانطور که مشاهده می کنید هنگامی که یک شبکه داخلی می خواهد به اینترنت وصل بشود در سر راه آن یک NAT Server
قرار دارد که روی آن یک IP Valid
تنظیم شده است .
NAT Server
درون IP Table
خود درخواست کلاینت را از طریق IP Valid
به اینترنت ارجاع می دهد بعد از اتمام و گرفتن پاسخ به IP
خود آن سیستم پاسخ را برمیگرداند، پس وظیفه تبدیل و ترجمه IP
ها بر عهده NAT
می باشد.
هنگامی که شما بر روی سیستم خانگی خود اینترنت را از طریق هر ISP
راه اندازی میکنید به شما یک IP Valid
می دهد که بر روی مودم خانگی شما تنظیم شده است و از طریق NAT Server
هنگامی که سایتی باز میکنید درخواست شما به فضای ابری هدایت میکند.
تمام این مفاهیم داریم می گویم که به مفهوم اصلی برسیم و خیلی نمیشود مباحث را باز کرد چون بعضی از مفاهیم بالا هر کدوم چندین سر فصل میشه که توی دوره های مختلف میشه تدریس کرد ولی تا میتونم سعی میکنم مفهوم برسونم و جوری توضیح بدم تا درک بشه.
SSH Port Forwarding
خب حالا بیایم برسی کنیم و ببنیم اصلا داستان چی هست و SSH Tunneling / Port Forwarding
کجا ها برای ما کاربرد داره .
: مشکل
همانطور که قبلا گفتم وقتی شروع به طراحی شبکه می کنید شما در داخل یک شبکه محلی Local
قرار دارید، شما وقتی که می خواهید با سرور به صورت راه دور ارتباط برقرار کنید باید به آن SSH
یا telnet
بزنید، خب ارتباط شما با محیط بیرون برقرار است ولی فرض کنید نیاز دارین از یک محیط دیگ مثل دانشگاه یا محیط کار به سیستم خود در خانه وصل بشوید و یک سری کار ها را انجام بدهید.
در همان سناریو بالا فک کنید از بیرون میخواهید به سیستم های داخل شبکه محلی خود وصل شوید به دلیل اینکه مشکلی پیش آمده است.
خب اینجا هست که مفهوم SSH Port Forwarding
وارد عمل می شود شما به راحتی می توانید یک Port
بر روی یک از سیستم های داخلی خود Forward
کنید به این عمل می گویند SSH Port Forwarding
که از طریق آن میتوانید یک تونل امن جوری که کسی متوجه نشود ایجاد کنید. اگر هنوز ابهام دارید نگران نباشید در جلو تر به صورت کامل این مفهوم را باز میکنم.
قبل شرع میخوام به شکل های زیر دقت کنید که خیلی مهم می باشد چون برای تونل زدن خیلی راه های معتدی وجود دارد و من چهارتا از پرکاربرد ترینشو براتون آوردم :
۱. Local port forwarding
- اتصال یک سرور گیرنده SSH
از طریق Port Forwarding
به یک سرور مقصد، من تصویر اول و دستوری که زده شده براتون بازش میکنم .
ssh -L 123:localhost:456 remotehost
: شرح دستور بالا
ssh
کن به صورت لوکال به پورت 123
، وصل کن به localhost:456
بعد از اینکه به remotehost
وصل شدی. از طریق این مفهوم ما تنوسیم یک پورتی از طریق تونل زدن وصل کنیم به یک جای دیگ پس هر موقع من وصل بشم به پورت 456
در واقع از طریق تونل به پورت 123
وصل شدیم.
(-L به مفهوم Local می باشد)
۲. Remote port forwarding
- خب در مفهوم قبلی یک پورت از روی کلاینت فورواد کردیم به یک لوکال هاست دیگ حالا همین تونل را میخوایم به صورت بالعکس انجام بدیم.
ssh -R 123:localhost:456 remotehost
: شرح دستور بالا
وصل کن به صورت Remote / Reverse
پورت 123
به localhost:456
بعد از اینکه به remotehost
وصل شدی، پس اگرم من وصل بشم به پورت 123 انگار از طریق SSH Tunnel
وصل شدم به پورت 456
.
(-R به مفهوم Remote / Reverse می باشد)
: سناریو اول
فرض کنید در یک شرکتی کار میکنید به عنوان System Admin
به شما یک سرور داده اند و شما را مجاب کرده اند حتما هر مشکلی پیش آمد باید بیاین اینجا و مشکل رو حل کنی و تمام دسترسی های این سرور هم از بیرون بسته است، میخوام در قالب همین مثال بحث SSH Port Forwarding
بگم و هم یک راه میانبر بهتون یاد بدم که از انجامش کلی لذت ببرید.
: راه حل سناریو اول
خیلی ساده شما میتوانید یک سرور VPS
برای خود خریداری کنید و از طریق مفهومی که برای شما توضیح دادم یک SSH Tunnel
از طریق سرور خود به سرور داخل شرکت بزنید در صورتی که هیچ کس متوجه این قضیه نشود (:
وقتی شما اتصال تونل خود را برقرار کنید هر موقع وارد یک پورت مثل 456
شدیم در واقعا وارد سرور خود روی پورتی که تنظیم کرده ایم شده ایم، من در تصویر زیر سناریوی برای شما کشیده ام، خوب توجه کنید :
هنگامی که یک ارتباط از طریق سیستم خود به سرور VPS
برقرار کنیم و به پورت 456
وصل بشویم یعنی به تونلی که روی پورت 123
ایجاد کردیم و آن را به سرور شرکت وصل کردیم متصل شده ایم و در نتیجه دسترسی به اطلاعات ان داریم .
سناریو دوم :
فرض کنید شما دو سرور دارید، یک سرور به نام canada-server
در کانادا می باشد و سررور dev-server
در محل کار شما است که میخوایم از طریق سرور که توی کانادا داریم وصل بشیم به لبتابی که توی خونه داریم، طبق صحبت های که کردیم امکانش نباید باشه چون ما از بیرون بخوایم وصل بشیم به کامپیوتر خودمون چون داخل یک شبکه محلی هستیم امکان پذیر نیست پس راه کار چیه ؟
خب طبق شکل زیر سناریو براتو باز میکنم و راه حل و براتون توضیح میدم :
طبق صحبتی که کردیم و Tunnel
که بین سیستم ما و سرور dev-server
ایجاد شد خیلی راحت میتونیم با SSH
کردن روی سرور داخل کانادا و از روی اون با SSH
کردن به پورت 1002
به سیستم داخل خونه وصل بشیم.
جمع بندی
SSH Tunneling / Port Forwarding
بحث پیشرفته ای می باشد و قطعا نیاز به تجربه و گرفتن مدارک مختلفی دارد، ولی من سعی کردم سناریو محور با مفاهیم مهم شبکه اشناتون کنم و در کنارش این مفهوم خیلی جذاب و براتون شرح بدم، بسیار سناریوهای مختلفی میشه نوشت تا Tunnel
های تو در توی در شبکه های خودتون ایجاد کنید، امیدوارم از این بحث در جهت مثبت استفاده کنید و به فکر هک کردن نیفتین، بحث هک و امنیت هم اگرچه در مسیر قانون مند خودش خیلی جذاب است، امیدوارم این مقاله برای دوستانی که دنبال مباحث شبکه هستن مفید باشه.