SSH Yerel Port Yönlendirme – İleri Düzey SSH

01 Ağustos 2008

İleri Düzey SSH yazılarımın 4.cüsü olan SSH Yerel Port Yönlendirme (ing. Local Port Forwarding) ile devam ediyoruz. Yerel port yönlendirmesini iyi bir şekilde tarif edebilmek için hemen gerçek hayat senaryosu yazıyorum.

Ağ Kurgusu: Evinizde iki adet bilgisayar sistemi var. ADSL modeminizin Internet’e bakan yüzünde sadece 22 numaralı SSH portu içteki Linux bilgisayarınızın 22 numaralı portuna yönlendirilmiş durumda. Yani herhangi bir yerden evinizdeki Linux’ünüze SSH ile erişebiliyorsunuz. Sadece bu SSH bağlantısı sayesinde eviniz ağındaki diğer tüm kaynaklara, bilgisayarlara SSH Yerel Port Yönlendirme ile erişim sağlanabilmektedir. Hatta diğer bağlantılar SSH’ın sağlamış olduğu şifreli bağlantı üzerinden tünellenerek iletileceği için daha güvenli erişim imkanınız olmuş olacak.

Senaryo 1: Evinizde 192.168.32.18 IP adresli bir Windows var. Evinizdeki Linux’e SSH ile erişerek 192.168.32.18 IP adresli windows’a rdesktop erişimi yapmak istiyorsunuz. Önce bir uçbirimden (ing. terminal) yerel port yönlendirmesi ayarlı SSH bağlantısı gerçekleştirilir.

$ ssh -L 3389:192.168.32.18:3389 kullanici@ev.homeip.net
Evine Hosgeldin Sahip!
evlinux$

Bu aşamadan itibaren başında oturmakta olduğunuz bilgisayarın 127.0.0.1:3389 numaralı portu ssh istemcisi tarafından dinlenmeye başlamakta. Mevcut bağlantıyı kesmeden, başında oturmakta olduğunuz bilgisayarın bir başka uçbiriminden aşağıdaki komutu verdiğinizde

$ rdesktop 127.0.0.1:3389

Karşınızda evinizdeki 192.168.32.18 IP adresli Windows’un rdesktop ekranı belirecek. Güvenle kullanabilirsiniz.

Biraz daha açıklamak gerekirse ssh istemcisinin yerel port yönlendirme seçeneği var (-L). Bu seçeneğin kullanılması zorunlu olan bir parametresi var. Bu parametre de aslında birbirinden “:” ile ayrılmış zorunlu 3 parçalı veya seçimlik olarak 4 parçalı dinlenecek ip ve port, bağlanılacak ip ve port bilgilerinden oluşmaktadır. Aşağıda “[]” arasına alınmış olan parça seçimliktir. Belirtilmezse 127.0.0.1 olduğu farz edilmektedir.

-L [yereldinlemeip:]yereldinlemeport:uzakbaglantıip:uzakbağlantıport

Yukarıda kullanım biçimi tarif edilen yerel port yönlendirme seçeneğinde kırmızı ile işaretlenmiş kısım ssh istemcisinin dinleyeceği IP:PORT bilgisini, mavi ile işaretlenmiş kısım da bağlantı kurulan SSH sunucusunun bizim için bağlanacağı IP:PORT bilgisini ifade etmektedir. Kırmızı ile işaretli alanda ssh istemcisini çalıştırdığımız bilgisayarda var olan IP adreslerinden birisini ve boşta olan portlardan birisini yazmalıyız. Mavi ile işaretli alanda ise SSH ile erişeceğimiz sunucunun bağlanabileceği bir IP adresi ve portunu yazmalıyız. SSH oturumu açıldığında ssh istemcisi kırmızı işaretli alanda tanımlı IP adresi ve portundan dinlemeye başlayacaktır (“netstat -nltp” ile dinlenen TCP portları ve dinleyen süreçler listelenebilir, kırmızı ile belirtilmiş olan portu ssh sürecinin dinliyor olması beklenir). Bu IP adresi ve portuna bir bağlantı geldiğinde mevcut SSH oturumu bağlantısı üstünden karşı taraftaki SSH sunucusuna kadar gidecek ve oradan da mavi ile işaretli alandaki IP adresine ve portuna bağlanacaktır.

“-L” seçeneklerinden istediğiniz kadar kullanmakta özgürsünüz. Yani tek bir SSH bağlantısı ile birden fazla port yönlendirme gerçekleştirebilirsiniz. Örnek için Senaryo 2’yi takip ediniz.

Senaryo 2: Aynı windows bilgisayarınıza rdesktop ile erişirken, diğer yandan smbmount ile evdeki paylaşımı, başında oturduğunuz bilgisayarın dosya sistemine bağlamak istiyorsunuz. Ancak başında oturduğunuz bilgisayarın 139 numaralı portu samba çalıştığı için meşgul…

$ ssh -L 0.0.0.0:3389:192.168.32.18:3389 -L 10139:192.168.32.18:139 kullanici@ev.homeip.net

Yukarıdaki örnekte iki adet “-L” seçeneği aynı anda kullanılmış. İlki rdesktop yerel port yönlendirmesi iken, ikincisi de SMB port yönlendirmesi. Ancak başında oturduğumuz bilgisayarın 139 numaralı portu dolu olduğu için maalesef standart dışı başka bir port olarak 10139’dan dinlemesi gerektiğini belirtmiş oluyoruz. İlk “-L” seçeneğinin parametresi 4 parçalı bir örnek olup, ilk parçanın 0.0.0.0 IP adresi olduğuna dikkat ediniz. Yani başında oturduğumuz bilgisayarın tüm IP adreslerinden 3389 numaralı port ssh istemcisi tarafından dinleniyor olacak. Yani bulunduğumuz ortamdaki diğer bilgisayarlar, başında bulunduğumuz bilgisayara rdesktop bağlantısı kurarlarsa kendilerini evimizdeki 192.168.32.18 IP adresli windows bilgisayarımıza erişmiş bulacaklar. Tam bir matrix. 😉

Gelelim diğer bir uçbirimden evimizdeki 192.168.32.18 IP adresli Windows’un paylaşımının başında bulunduğumuz bilgisayarın dosya sistemine bağlanmasına. Bir başka uçbirimden root kullanıcısı olarak:

# mount -t cifs -o ip=127.0.0.1,port=10139,user=Administrator //evdekiwindows/c$ /mnt
Password:
#

Yukarıdaki gibi bir mount komutu girdiğimizde 127.0.0.1’in 10139 portuna bağlanmasını, kullanıcı olarak kendisini Administrator olarak tanıtmasını ve //evdekiwindows/c$ ön tanımlı paylaşımını /mnt altına bağlaması emrini vermiş oluyoruz.

SSH’ın port yönlendirme özelliklerinden bol bol yararlandım ve çok sağlam çalışan bir yapı. Bu yöntemle MegaByte’lar aktardım. SSH’ın sıkıştırma seçeneği de kullanılarak giden gelen trafiğin daha az miktarda olması ve aktarım performansının yüksek olması da sağlanabilmektedir.

Aynı yerel port yönlendirme özelliği Putty’de de bulunmaktadır. Putty ile bağlantı kurmadan önce SSH Seçeneklerinden aynı ayarlar yapılabilmektedir. Böylece başında bulunduğunuz bilgisayar Windows da olsa SSH yerel port yönlendirme Putty ile aynı şekilde çalışmaktadır.

İleri Düzey SSH serisi yazılarımdan SSH Uzak Port Yönlendirme‘de görüşmek üzere.

Etiketler: , , , , , , , , , , , , , , , ,

Yorum Yapın