SSH Tunnel ve SOCKS5 Proxy İle Güvenli ve Engelsiz İnternet

Kamusal alanlar1 ve ortak ulaşım araçları (muniwifi / mölgesel kablosuz ağlar)2, alışveriş merkezleri3, kafelerde4, konaklama alanlarında5 ve daha pek çok yerde ücretsiz bir şekilde sunulan internet bağlantıları hakkında ne düşünüyorsunuz?

AA

Örneğin sizce bu tür alanlarda sağladığınız bağlantılar güvenli mi6? Gerçekleşen trafik farklı amaçlar doğrultusunda izleniyor olabilir mi7 8? Diğer yandan site engellemeleri konusunda da (son olarak Wikipedia9 ile) bir hayli aktifiz. Hatta, engellenen sitelerin listelendiği engelliweb'in10 bile engellendiği günleri gördük11. Durum böyle olunca hem erişim hakkı hem de güvenlik konularında, SSH yazı serisinin devamı olarak SSH Tunnel ve SOCKS5 Proxy ile güvenli ve engelsiz gezinti‘den bahsedeceğim.

SSH Tunnel ve SOCKS5 Proxy İle Güvenli ve Engelsiz İnternet

Online kimliğimizi mümkün olduğu kadar anonim tutup, kişisel bilgiler, şifreler ve kredi kartı bilgilerimizi gizleyerek internette gezinmenin, ekrangezerliğin bir çok yolu mevcut. Son dönemde en çok aşina olduğumuz yöntemlerden biriyse VPN kullanımı. VPN sağlayıcıların sundukları kapsamlar dahilinde istediğiniz ülkeden IP alıp internete erişebilirsiniz. Tabi, burada da internet akışınızın sağlayıcı sunucularından geçeceğini unutmamalısınız. Kendiniz de biraz uğraşarak VPN server’ınızı kurabilirsiniz elbette, şimdilik bu konu listemde mevcut değil. Bu yazının asıl konusu erişim engellinden ziyade güvenli erişim sağlayabilmek. O halde başlayalım. SSH Tunnel ve SOCKS5 Proxy ile oldukça pratik bir şekilde internette şifreli gezinmeye başlayabilirsiniz.

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

SSH Tunneling yazısına ek olarak bu yazıda yardımcı aracımız Firefox internet tarayıcısı. SOCKS5 protokolüyle internet tarayıcısı ile server arasında şifreli bir iletişim sağlanır. Tarayıcı dışından gönderilen veriler ise şifrelenmez. Bu sayede lokasyon filtrelerinden de kurtulabilirsiniz. Üzerinden bağlantı sağlayacağımız sunucu için DigitalOcean'dan faydalanacağım. Sunucu oluşturma işlemleri için ilgili yazıdaki yönergeleri takip etmeniz yeterli. Size uygun server’ı aktifleştirip IP adresinizi aldığınızı varsayarak, terminal üzerinden dinamik port yönlendirme işlemimizi yapabiliriz12. Ben 8123 üzerinden işlemleri gerçekleştireceğim13.

ssh -D 8123 -f -C -q -N root@server-ip-adresi
Firefox ag vekil sunucusu

Ardından Firefox internet tarayıcınızın Tercihler (about:preferences) bölümünde yer alan Ağ vekil sunucusu ayarlarına giriş yapabilirsiniz. Açılacak Bağlantı Ayarları penceresinde, SOCKS Sunucusu için tanımladığımız port numarasını girelim. Aşağıda kontrol edebilmeniz için ayarların yer aldığı pencere görüntüsünü iletiyorum.

Firefox baglanti ayarlari

Firefox bağlantı ayarlarından SOCKS tanımlandığında DNS sorguları bu proxy üzerinden geçirilmez. Ek bir ayarla DNS sorgularının da tünelden geçmesi sağlayabiliriz. Firefox konfigürasyon ayarlarından (about:config) network.proxy.socks_remote_dns için tanımlanan değeri true yapmanız yeterli.

Firefox about config

Bu ayarlamayla birlikte Firefox üzerinden gerçekleştirdiğiniz trafik oluşturulan SSH tünel üzerinden şifreli olarak sunucuya iletilecek, sunucu da isteklere verilen cevapları alıp şifreli tünelden size ulaştıracak. SSH oturumu sonlandığında Firefox üzerinden internet erişimi gerçekleştiremezsiniz. Ancak, yukarıdaki ssh kodunu tekrar terminal üzerinden girerseniz (aktif sunucuya ait IP üzerinden elbette) tekrar SSH tünelini oluşturmuş ve bağlantı sağlamış olursunuz. İşinizi kolaylaştırmak adına macOS için BitBar yazımda yer alan script'i kullanabilirsiniz.

Gelişmiş Tünelleme

Yukarıdaki işlemler pratik bir şekilde güvenli bağlantı sağlayabilmeniz için yeterli olacaktır. Ancak, çok daha detaylı bir süreç izlemek isterseniz çoklu atlayış noktaları oluşturabilirsiniz. Elbette bu doğrultuda birden fazla server erişimine sahip olmanız gerekecektir. Dolayısıyla biraz maliyetli olabilir. Günlük kullanım dışında, yüksek güvenlik gerektiren geçici durumlar için tercih edebilirsiniz. Uygulama senaryomuz şu şekilde olacak. Tarayıcı üzerinden isteklerimiz yerel port yönlendirme (-L, local port forwarding) ile server1’e ileteceğiz. server1 kendine iletilen isteği server2’ye iletecek. server2’de aynı şekilde gelen isteği alıp server3’e aktaracak. server3 ise dışarıya olan çıkışımızı gerçekleştirip websitesine bağlanacak ve aldığı cevabı aynı yol üzerinden geri iletecek. Her server’ı farklı lokasyonlarda oluşturabilirsiniz.

server2 2000. port server3 22. porta;

ssh -N -L 2000:localhost:22 root@server3-ip-adresi

server1 3000. port server2 2000. porta;

ssh -N -L 3000:localhost:2000 root@server2-ip-adresi

Bilgisayarın 4000. portu server1 3000. porta;

ssh -N -L 4000:localhost:3000 root@server1-ip-adresi

Son olarak bilgisayarın 4000. portu üzerinden yapılan isteğin 8080 porta iletilmesi için şu konu uygulamalıyız;

ssh -p 4000 -N -L 8080:localhost:80 -o HostKeyAlias="server3" user@localhost

Firefox SOCKS proxy ayarlarını localhost:8080 üzerinden gerçekleştirdiğimizde trafiğimiz belirtilen şekilde sağlanacaktır. Elbette bilgisayar yerine telefonunuzu da kullanabilirsiniz. SSH standart portu 22, ancak değişiklik yapmak isteyebilir ya da var olan bir değişiklik üzerinden işlemler gerçekleştirecek olabilirsiniz. Bu aşamada port bilgisi ileterek komutları kullanabilirsiniz.