SSH Tunnel Nedir? Nasıl Kullanılır?

Güncelleme Yayın

SSH sayesinde bilgisayarımızla sunucu ya da sunucular arasındaki bağlantıları tünelleyerek ağ trafiğinin şifreli bir şekilde gerçekleşmesini sağlayabiliriz. Neden ve nasıl sorularının cevaplarını örnekler eşliğinde detaylıca vermeye çalışacağım. Ancak öncelikle bu işlemlerin hangi durumlar için kullanılabileceğine bakalım1 2.

  • Düşük güvenlik seviyesine sahip ya da güvensiz bir internet bağlantısı (kafeler, iş yerleri, açık alanlar… gibi) kullanmak durumunda kaldığımızda bağlantımızın şifrelenerek güvenli hale getirmek,
  • Ağ sınırlandırmalarına (filtreleme) takılmamak,
  • NAT arkasından soket açmak,
  • Farklı ülkeler üzerinden erişim testleri gerçekleştirmek,
  • Zıplama noktaları oluşturmak

Evet, maddelerden biri, birkaçı ya da hepsi için SSH Tunnel kullanmak isteyebiliriz. Nedenlerimiz elbette bunlarla sınırlı değil3 4 5. Peki, bu işlemleri nasıl sağlayabiliriz?

  • Yerel port yönlendirme (Local port forwarding)
  • Uzak port yönlendirme (Remote port forwarding ya da Reverse Tunnelling)
  • Dinamik port yönlendirme (Dynamic port forwarding)

Yukarıdaki 3 başlığa detaylıca değineceğim6.

Bu yazı kapsamındaki örneklerde DigitalOcean altında oluşturacağım sunucuları, telefon üzerinden verdiğim örneklerde ise JuiceSSH uygulaması kullanacağım. Ön bilgilendirmeyi de yaptığıma göre artık başlayabiliriz.

Yerel Port Yönlendirme (-L, Local Port Forwarding)

ssh -L [kullanacagimiz-port]:[baglanmak-istediginiz-domain-ya-da-ip-adresi]:[baglanacagimiz-port] [kullanacaginiz-ssh-sunucu]

Bağlı bulunduğunuz ağdan [baglanmak-istediginiz-domain-ya-da-ip-adresi] için (örneğin yasaklı sitelerden wikipedia.com olsun) HTTP (Port 80) bağlantı sağlayalım. O halde kullanacağımız komut şu şekilde olacaktır.

ssh -L 9000:wikipedia.com:80 root@[kullanacaginiz-ssh-sunucu]

Bu komut üzerindeki wikipedia.com erişimimiz için browser’ınızın adres barına localhost.com:9000 yazmanız yeterli olacaktır, bu sayede aslında wikipedia.com:80 erişimi sağlamış oluyorsunuz.

Uzak Port Yönlendirme (-R, Remote Port Forwarding ya da Reverse Tunneling)

ssh -R [kullanacagimiz-port]:localhost:[baglanacagimiz-port] [kullanacaginiz-ssh-sunucu]

NAT7 ve/ya Firewall arkasından erişim sağlayabilirsiniz. Temelde sunucu IP adresine istek gönderilmesine karşılık tünelin ucundaki makinenin cevap vermesi olarak ifade edilebilir. Aşağıdaki örnekte, güvenli ağ arkasındaki makineden [kullanacaginiz-ssh-sunucu] sunucusunun 80. portuna uzak port yönlendirme işlemi (ters tünel) uygulanmış olmakta. Bu sayede sunucu üzerindeki adresi görüntüleyenlere aslında güvenli ağ ardındaki makineniz cevap vermiş olmakta.

ssh -R 9001:localhost:80 [kullanacaginiz-ssh-sunucu]

Bu sayede bilgisayarınızdaki bir uygulama ya da veritabanı sunucu üzerinden sağlanan bağlantı ile başkalarının erişimine sunulabilir, intranet sayfalarını farklı noktalardan görüntülenebilir8 9. Ek bir not, SSH ön tanımlı olarak uzak sunucudan port yönlendirme işlemini işleme almamakta.

Bu özelliği aktifleştirmek için /etc/ssh/sshd_config dosyasını açıp GatewayPorts yes satırını eklemeli ve ssh servisini yeniden başlatmalısınız.

sudo nano ~/etc/ssh/sshd_config #GatewayPorts yes satırı eklenecek
sudo service ssh restart

Dinamik Port Yönlendirme (-D, Dynamic Port Forwarding)

ssh -D [kullanacagimiz-port] [kullanacaginiz-ssh-sunucu]

Lokal makinede açılan bir soket ile sunucu üzerinden istenen bağlantı işlemleri güvenli bir şekilde gerçekleştirilebilir. Bu süreçte SOCKS kullanılarak bağlantı karşı tarafa ulaştırılır10.

ssh -D 9001 [kullanacaginiz-ssh-sunucu]

Bu işlemler için Firefox kullanılabilir11. Bu madde ve Firefox yapılandırmasını bir başka yazı içerisinde anlatacağım.

SSH Özellikleri

SSH işinizi kolaylaştıracak12, daha güvenli hale getirecek daha pek çok özellik barındırmakta. SSH Tunnel bunlardan sadece bir tanesiydi13 14 15. Daha detaylı bilgi için man ssh komutunu kullanabilirsiniz.