SSH Protokolünün Derinlikleri: Port Forwarding ile Güvenli Tüneller

SSH Port Forwarding Kapak Görseli

SSH (Secure Shell), çoğu zaman “sunucuya bağlanma komutu” olarak biliniyor. Oysa biraz derine indiğinizde, ağ trafiğini yönetmek için güçlü bir araç seti sunduğunu görüyorsunuz.

Bu yazıda özellikle üç kritik SSH özelliğine odaklanacağız:

  • Local Port Forwarding (yerelden uzağa güvenli tünel)
  • Reverse Port Forwarding (uzaktan yerele güvenli yönlendirme)
  • Dynamic Port Forwarding (uygulama bazlı SOCKS proxy tüneli)

Bu yöntemler, hem güvenlik hem de geliştirme hızını ciddi şekilde artırıyor.

1. Local Port Forwarding: İçeriye Tünel Kazmak

Senaryo: Uzak bir sunucuda çalışan Postgres veritabanınız dış dünyaya kapalı ve yalnızca localhost:5432 üzerinde dinliyor. Güvenlik için harika bir kurgu, ama DBeaver gibi bir araçla erişmeniz gerekiyor.

Çözüm:

ssh -L 5433:localhost:5432 user@sunucu_ip

Bu komut ne yapar?

  • Kendi bilgisayarınızdaki 5433 portunu açar.
  • O trafiği SSH üzerinden şifreli biçimde uzak sunucudaki localhost:5432 portuna taşır.
  • Siz lokalden localhost:5433 adresine bağlanırken, aslında uzak veritabanına güvenli şekilde erişirsiniz.

Pratik sonuç: Veritabanı portunu internete açmadan uzaktaki DB’ye erişebilirsiniz.

2. Reverse Port Forwarding: Dışarıya Güvenli Kapı Açmak

Senaryo: Bilgisayarınızda localhost:8000 üzerinde çalışan bir uygulamayı hızlıca bir arkadaşınıza ya da ekip arkadaşınıza göstermek istiyorsunuz. Port açma, modem ayarı veya deployment ile uğraşmak istemiyorsunuz.

Çözüm:

ssh -R 8080:localhost:8000 user@sunucu_ip

Bu komut ne yapar?

  • Uzak sunucuda 8080 portunda bir giriş noktası oluşturur.
  • Sunucuya gelen trafiği SSH tüneli içinden sizin bilgisayarınızdaki localhost:8000 uygulamasına yönlendirir.

Yani biri sunucu_ip:8080 adresine gittiğinde, sizin local uygulamanızı görür.

3. Dynamic Port Forwarding: Kendi SOCKS Proxy’nizi Kurmak (-D)

Senaryo: Güvenmediğiniz bir ağdasınız (ortak Wi-Fi gibi) ve tarayıcı trafiğinizi SSH üzerinden geçirmek istiyorsunuz. Ya da şirket/ağ kısıtları olan bir ortamda, belirli araçları güvenli bir tünel üzerinden internete çıkarmak istiyorsunuz.

Çözüm:

ssh -D 1080 user@sunucu_ip

Bu komut ne yapar?

  • Bilgisayarınızda 1080 portunda bir SOCKS proxy açar.
  • Proxy kullanan uygulamalar (tarayıcı, CLI araçları vb.) trafiği bu porta yollar.
  • Trafik SSH tüneliyle uzak sunucuya taşınır ve oradan hedefe çıkar.

Pratik sonuç: Uygulama bazında, güvenli bir çıkış noktası elde edersiniz.

Not: -D genelde tüm sistemi değil, proxy ayarı yaptığınız uygulamaları etkiler. Örneğin tarayıcıda SOCKS5 proxy olarak localhost:1080 tanımlayarak kullanabilirsiniz.

Neden Bu Kadar Önemli?

1) Güvenlik

Veritabanı gibi kritik servisleri doğrudan internete açmadan erişim sağlarsınız.

2) Şifreleme

Tüm trafik SSH tünelinden geçtiği için veriler şifreli taşınır.

3) Pratiklik

Uzak sunucu, Docker konteyner veya local servis erişimlerinde birkaç komutla hızlı çözüm üretirsiniz.

4) Esneklik

-D sayesinde tek bir SSH bağlantısıyla farklı hedeflere dinamik olarak erişebilir, gerektiğinde uygulama bazlı “güvenli çıkış” oluşturabilirsiniz.

Günlük Kullanım İçin Kısa Notlar

  • Local forwarding için: ssh -L yerel_port:hedef_host:hedef_port user@ssh_host
  • Reverse forwarding için: ssh -R uzak_port:yerel_host:yerel_port user@ssh_host
  • Dynamic forwarding için: ssh -D yerel_socks_port user@ssh_host
  • Uzun süreli tünellerde kopma yaşamamak için ServerAliveInterval gibi SSH ayarlarını kullanmak faydalıdır.

Sonuç

SSH, yalnızca terminal erişimi değil; güvenli ağ köprüleri kuran çok yönlü bir araçtır. Özellikle -L, -R ve -D port yönlendirme seçenekleri, güvenliği artırırken geliştirme süreçlerini de hızlandırır.

Bir kez alışınca “erişim sorunu” dediğiniz pek çok problemi dakikalar içinde çözmeye başladığınızı fark edersiniz.