SSH Üzerinden Port Yönlendirme

Servis erişimini kısıtlayan güvenlik duvarları çoğu zaman yönetimi zorlaştırır. Ancak SSH tünelleme bu engeli ortadan kaldırır. Oluşturduğu şifreli bağlantı sayesinde belirli portlar iki makine arasında güvenle taşınır. Böylece normalde ağ politikaları yüzünden ulaşılamayan servisler, tünel içinden yerel bağlantıymış gibi kullanılabilir.

Sistem Gereksinimleri

SSH tünellemenin doğru anlaşılabilmesi için iki ayrı makine arasında bağlantı kurulması gerekir. Bu nedenle örneklerde, birden fazla sunucunun rolünü üstlenen basit konteyner yapıları tercih edilmiştir. Docker motoru kullanıldığında tek bir Linux sunucusu üzerinde bu makineleri kolayca oluşturmak ve aralarındaki trafiği göstermek mümkündür.

Konteynerlerin IP’lerine doğrudan erişim sağlandığı için, bu örnekler Docker Desktop üzerinde birebir aynı şekilde çalışmaz. Test için kısa ömürlü bir sunucu oluşturmak en verimli yöntemdir.

Yerel Port Yönlendirme Nedir? Nasıl Çalışır?

Local port forwarding, yerel makineden çıkan trafiği şifreli bir SSH tüneli üzerinden uzak sunucudaki belirli bir servise taşıyan yapıdır. SSH bağlantısı kurulduğunda, lokal porttan gelen veri tünel içinde korunarak hedef sunucudaki porta yönlendirilir. Böylece doğrudan erişilemeyen veya firewall tarafından engellenen servisler yerel bağlantıymış gibi erişilebilir hale gelir.

Uzak Servise Lokal Port Üzerinden Nasıl Bağlanılır?

Bazı servislerin dış erişime kapalı olması, yönetim ihtiyacı doğduğunda sorun yaratabilir. Örneğin firewall kısıtlamaları yüzünden MySQL’e doğrudan bağlanamadığını düşünelim. Bu engeli aşmak için SSH üzerinden port yönlendirmesi kullanılabilir. Komutu çalıştırdığında SSH tüneli açılır ve bağlantı güvenli şekilde yönlendirilir.

ssh -L 8080:localhost:8080 root@sunucu_ip
  • Laptop’ındaki 8080 → Uzak sunucudaki 8080
  • Trafik tamamen şifreli
  • Port dış dünyaya açılmadan bağlantı sağlanır

MySQL servisi istemcisini açtığında, veritabanı sanki laptopunda çalışıyormuş gibi bağlanırsın. Bu yöntem yönetim paneli, Redis, Elasticsearch gibi servislerde de sıklıkla kullanılır.

Tüneli arka planda açık bırakmak isterseniz aşağıdaki komutu yazabilirsiniz.

ssh -f -N -L ...

Uzak Port Yönlendirme İşlemi Nasıl Çalışır?

ssh -R [remote_addr:]remote_port:local_addr:local_port [user@]gateway_addr

Bu işlem sonrasında SSH sunucusu üzerinde belirtilen port dinlemeye açılır. Bu porta gelen trafiğin tamamı, sizin makinenizdeki servis tarafından işlenir.

Remote Forwarding Ne Zaman Kullanılır?

  • Lokal geliştirdiğin bir web projesini uzak sunucuda görüntülemek için
  • Kurumsal ağ içinde çalışan servislere dışarıdan bağlanmak gerektiğinde
  • Ev ortamındaki IoT cihazlarını dış erişime açmadan yönetmek için
  • Firewall tarafından engellenen API veya dashboard’lara erişmek için
  • VPN kullanmadan belirli portları dış dünyadan erişilebilir hale getirmek için

Özel Ağdan Yapılan Uzak Port Yönlendirme

Birçok kullanıcı evde geliştirdiği projeleri internete açamıyor çünkü NAT ve modem port yönlendirmesi her zaman mümkün olmuyor. Böyle durumlarda SSH tüneli en kolay bypass yöntemidir.

ssh -R 9000:localhost:8000 root@sunucu_ip
  • Uzak sunucunun 9000 portuna gelen trafik, evdeki makinenin 8000 portuna akar

SSH Üzerinden Port Yönlendirme Türleri

Local Forwarding (-L)
Kapalı bir servisin, yerel bilgisayar üzerinden güvenli şekilde kullanılmasını sağlar.

Remote Forwarding (-R)
Bilgisayarındaki bir servisi uzaktaki bir sisteme görünür kılar ve erişilebilir hale getirir.

Dynamic Forwarding (-D)
SSH oturumunu trafik yönlendirme yapabilen bir proxy’ye dönüştürür.

Bu üç mekanizma, tünelleme işlemlerinin tamamını kapsar ve özellikle erişimi kısıtlı servislerle çalışırken büyük kolaylık sağlar. SSH bağlantıları hakkında daha fazla örnek görmek istersen yönlendirdiğimiz rehbere bakabilirsin.

Sık Sorulan Sorular

SSH tüneli kurduğumda bağlantı kopuyor veya zaman aşımına düşüyor?

ClientAliveInterval ve ClientAliveCountMax değerlerinin sunucu tarafında yükseltilmesi bağlantıyı sabitler. Ek olarak NAT arkasında idle bağlantıların düşmesini engellemek için lokal tarafta ServerAliveInterval kullanmak gerekir.

Aynı anda birden fazla tünel nasıl kurabilirim?

SSH protokolü aynı bağlantı içinde birden fazla tüneli taşımayı destekler. Hem birden fazla -L, hem de birden fazla -R parametresi aynı komutta kullanılabilir.

Tünel bağlantısını arkada sürekli çalışır halde tutmak için en iyi yöntem nedir?

Tüneli kalıcı hale getirmek için autossh kullanılabilir. Bu araç bağlantı düştüğünde otomatik yeniden kurar, log üretir ve KeepAlive paketlerini düzenli göndererek tüneli stabil tutar

Yorum yapın