SSH Tunneling nedir ve nerelerde kullanılır?

Bu flood’da SSH Tunnelling tekniğinin nasıl çalıştığını ve hangi amaçlarla kullanıldığını anlatacağım.

SSH Tunnelling şifrelenmiş SSH bağlantısı üzerinden uzak sunucuda çalışan uygulamaların trafiğini iki yönlü olarak güvenli bir biçimde taşımak için oluşturulmuş bir tekniktir.

SSH Tunnelling üç tipte karşımıza çıkar. İlk ve en çok kullanılan tip Local Port Forwarding olarak bilinen yöntemdir. Burada lokal bilgisayarda açtığımız bir TCP portuna yaptığımız işlemler SSH yaptığımız sunucu üzerinden hedef sunucunun ilgili portuna iletilir.

Bu yöntemin akla gelen ilk kullanım alanı şirket veya ISP’lerce bazı sunucu veya servislere uygulanan kısıtlamaları aşmaktır. Şirketimizin twitter․com'a erişimi kısıtladığını varsayalım. DigitalOcean, vb bir VPS sağlayıcıdaki sunucumuza Local Port Forwarding yöntemiyle tünel kurarak bu kısıtlamayı aşabiliriz. Aşağıdaki ekran çıktısındaki komutla oluşturduğumuz tünel sayesinde host dosyası kayıtlarıyla twitter․com'a yaptığımız istekler bilgisayarımızın 22 nolu SSH portundan çıkacak ve kısıtlama elemanları bypass edilecektir.

Local Port Forwarding yönteminin ikinci kullanım alanı ulaşmak istediğimiz uygulama portunun (örneğin Postgres - 5432) Firewall tarafından engellendiği durumdur. Postgres'in çalıştığı sunucuda SSH yetkimiz varsa, uzak sunucuda çalışan Postgres - 5432 portunu SSH Tünelleme ile lokal bilgisayarımızdaki 5432 portuna Forward edebiliriz. Firewall trafiğin sunucuya SSH - 22 portundan geldiğini göreceği için trafiğe izin verecek ve tünel kurulan bilgisayardan pgAdmin vb programlara localhost:5432 üzerinden erişilebilecektir.

Local Port Forwarding yönteminin bir başka kullanım alanı servisin çalıştığı uzak sunucu IP'sinin saklanmak istendiği durumdur. Bir konferansta yapılan demoda kullandığınız web sayfasının adresini gören afacan bir katılımcı aynı sayfaya erişim sağlayıp sayfayı kurcalayabilir. Demo yapılan sunucudaki uygulamanın çalıştığı port SSH Tünelleme ile lokalde çalışan bir porta Forward edilirse konferans katılımcıları adres çubuğunda localhost:8083 görecekler ve uygulamanızın web arayüzüne ulaşamayacaklardır.

SSH Tunnelling'in ikinci tipi Remote Port Forwarding'dir. Bu yöntemde Local Port Forwarding'in yaptığının tersi istikamette, yani uzak sunucudan lokal bilgisayarda bulunan bir uygulamaya SSH üzerinden erişime olanak sağlanır.

Remote Port Forwarding'in en bilinen kullanım alanı NAT arkasında (örneğin evlerimizdeki ADSL Modem) bulunan bir servise internet üzerinden erişim sağlamaktır. Bu yöntem sayesinde lokal bilgisayarımızda geliştirdiğimiz bir web uygulamasını DigitalOcean, vb bir VPS sağlayıcıdan aldığımız Public IP'ye sahip bir sunucu üzerinden müşterilerimize vb açabiliriz. Bu tip bir ihtiyaçta SSH Tünelleme'nin yanında ngrok.com'un sunduğu servisin daha pratik olacağını da söylemek gerekir.

2000'li yılların başında Remote Port Forwarding, evde Download'a Yatırılan bilgisayarların okul ve işyerinden VNC yardımıyla kontrolünde kullanılırdı. Bu yöntem evdeki bilgisayarları uzaktan VNC ile kontrol etmek için hala kullanılabilir :)

SSH Tunnelling'in üçüncü tipi Dynamic Port Forwarding'dir. Dynamic Port Forwarding ile SSH istemcisi bir SOCKS Proxy sunucusuna dönüştürülür. İstemcide bulunan tarayıcılarda SOCKS Proxy ayarı yapılarak internete çıkış bu Proxy üzerinden sağlanır.

SOCKS ve diğer Proxy tiplerini başka bir flood'da detaylı olarak ele alacağız.