Local and Remote Port Forwarding using SSH

حين نقول عملية Port forwarding أو Tunneling فإننا نقوم بعملية تمرير للحزم أو الـ traffic من خلال ممر أو نفق غير الممر أو المسار الذي تسلكه هذه الحزم بالوضع الإعتيادي أو بطريقة عملها الإعتيادية … وحين نذكر بإننا سنستخدم SSH مثلا في عملية التمرير … فهذا يعني إننا سنقوم بتمرير الحزم أو الـ traffic من خلال نفق نعمله بواسطة خدمة الـ SSH المُشفرة … وبالتالي ممكن نستفيد من عملية التمرير هذه لعدة أمور:
1- تغليف سير بيانات خدمة غير آمنة بواسطة نفق آمن …
2- إخفاء سير بيانات معينة حين تمر بداخل الشبكة سواء الداخلية او الخارجية …
3- الإستفادة منها في طريقة التحايل وتجاوز الجدران النارية … أي الوصول الى خدمة لا تستطيع الوصول أليها بشكل مباشر بسبب الجدران النارية …

الآن هناك نوعان من الـ Port Forwarding:

الأول: Local Port Forwarding أو في SSH ستجدها مرات بإسم LocalForwards
وهي أن تقوم بعملية تمرير الحزم المتجهة الى منفذ محلي Local Port الى منفذ على خادم عن بُعد Remote Port من خلال خادم الـ SSH … مثال على ذلك: لنفرض في المنزل نريد نرسل رسالة من خلال برنامج Thunderbird الى صديق لنا بإستعمال بريدنا مثلا الذي على الياهو … في الكثير من الأحيان ستجد إن شركات خدمة الأنترنت (ISP) تكون قد حجبت المنفذ 25 من المستخدم المنزلي بسبب مشاكل السبام … ولهذا لنتجاوز هذه المشكلة يمكننا عمل نفق بين جهازنا الذي في البيت وخادم موجود على الأنترنت مثلاً لنستعمله لتمرير جميع الحزم الواصلة الى المنفذ 12345 على جهازنا الى المنفذ رقم 23 على الخادم yahoo.com من خلال ممر الـ SSH الذي نعمله بيننا وبين الخادم example.com الذي لدينا صلاحيات دخول SSH عليه …

مثال عملي:

ssh -L 12345:yahoo.com:25 [email protected]

* توضيحات:
– الخيار L هو لأننا نقوم بعملية Local Port Forwarding
– المنافذ المطلوب تمريرها هي من المنفذ رقم 12345 الى المنفذ رقم 23
– الخادم المراد الوصول الى منفذ 25 عليه هو yahoo.com
– الخادم المستعمل لتخطي الإتصال المباشر بخادم yahoo.com من منزلنا هو example.com
– المستخدم المستعمل للإتصال بخادمنا example.com هو binary

الثاني: Remote Port Forwarding أو في SSH ستجدها مرات بإسم RemoteForwards أو حتى Reverse Tunneling
هذه العملية بالعكس تماماً … وهي أن تقوم بعملية تمرير الحزم المتجهة الى منفذ على خادم عن بُعد Remote Port الى منفذ محلي Local Port من خلال خادم الـ SSH … مثال على ذلك: لنفرض إنك تريد أن تشبك على جهازك في العمل ولكن الجدار الناري يمنع أي إتصال من الخارج الى داخل الشبكة المحلية الخاصة بالعمل … مالذي ستفعله؟ هنا تأتي فائدة الـ Remote Port Forwarding حيث سنقوم بعمل نفق بين جهازنا في العمل وجهازنا الذي في المنزل … كل الذي علينا فعله هو التالي:

ssh -R 9999:localhost:22 [email protected]

* توضيحات:
– الخيار R هو لأننا نقوم بعملية Remote Port Forwarding …
– المنافذ المطلوب تمريرها هي من 9999 الى 22
– الشبكة الخاصة بالعمل يمكن الوصول لها من خلال localhost بعد إنشاء النفق
– الشبكة الخاصة بالمنزل يمكن الوصول لها من خلال home.no-ip.org
– المستخدم الموجود على جهاز المنزل هو binary

هكذا قمنا بإنشاء النفق بين جهاز العمل وجهاز المنزل … وللتأكد من ذلك على جهاز المنزل قم بعمل التالي:

netstat -plunt | grep 9999

ستجد بإنه تم عمل النفق وجالس يستمع الى المنفذ 9999 كما في الناتج بالأسفل:

tcp 0 0 127.0.0.1:9999 0.0.0.0:* LISTEN -

الآن للدخول الى جهاز العمل، كل الذي عليك فعله من جهاز المنزل هو:

ssh [email protected] -p 9999

* توضيحات:
– المستخدم الموجود في جهاز العمل إسمه user نحتاجه للدخول الى جهازنا في العمل
– عمل إتصال على localhost
– تحديد المنفذ 9999 للإتصال عليه، وهو الذي سيدخلنا النفق الى جهازنا في العمل

ملاحظات مهمة:
– إن كنت تريد أن تعمل إستعمال لمنافذ رقمها أقل من 1024 يجب عليك ان تعمل تسجيل دخول بالمستخدم رووت
– لا تنسى أن تقوم بفتح المنافذ الظرورية في الجدار الناري، خاصة حين تريد الدخول من العمل الى المنزل
– قم بتشغيل برنامج يقوم بعمل عمليات مستمرة مثل top او تعمل for loop يسوي ls عند إستخدامك لطريقة الـ Remote وذلك لانه ممكن قبل ان تصل المنزل يكون قد انتهى الوقت وفصل الخط وراحت عليك

إن شاء الله الآن توضحت الصورة للجميع … ولن يعاني أحد بعد اليوم من الفكرة الملخبطة هذي … للنقاش هنا

دمتم بود …