Home / Genel Haberler / HTTP Proxy veya internet kısıtlamaları nasıl aşılabilir?

HTTP Proxy veya internet kısıtlamaları nasıl aşılabilir?

Diyelim ki, bir yerde çalışıyorsunuz ve çalıştığınız ofiste internete erişmek için size verilen http proxy ayarını girmek durumunda kalıyorsunuz.

EchoLinkProxyDiagram

Ve bulunduğunuz yerin sistem yöneticileri pop3, smtp portlarına erişimi de kapattığı için Outlook kullanamıyorsunuz. Proxy girmediğiniz zaman hiçbir siteye erişemiyor, IP lerini pingleyemiyor ya da telnet ile 80 ve 443 portlarını kontrol ettiğinizde bağlanamadığınızı görüyorsunuz. Ve “sadece outlook ile e-postalarımı kontrol etmek, e-posta gönderebilmek istiyorum” şeklindeki çok masum bir isteğinizi dile getirdiğinizde sistem yöneticilerinden aldığınız cevap “e-postalarınızı web üzerinden kontrol edebilirsiniz” gibi eskilerin “malumu ilan etmek” dedikleri türden anlamsız yanıtlar alıyorsunuz. Bu durumda ne yapmalısınız ki Outlook’u tıpkı o eski güzel günlerde olduğu gibi 🙂 kullanabilesiniz?

Yukarıdaki paragrafta anlatılanlar gerçek bir hikayeden alınmıştır. Soruyu soran kişi yukarıda bahsettiğim durumu yaşayan bir arkadaşım, bu yardım çağrısının muhatabı da bendim:) Kendisine öncelikle önereceğim çözümü kısaltmak için Outlook yerine Thunderbird kullanmasını önerdim. Çünkü Outlook bildiğim kadarı ile SOCKS proxy desteklemiyor. Fakat Outlook ile sadece e-postalarına değil de exchange server üzerinden güncellediği takvimine de ulaşmak ve exchange serverın diğer bazı özelliklerini de kullanmak istediği için çok ısrar edemedim.

Bu sorunu aşmak için en belirgin yöntemlerden biri putty ile size verilen proxy ayarları ile girerek 443 ya da 80 portundan çalışan bir SSH sunucusuna kullandığınızın makinanın bir portunu bağlamak ve bu sayede bir SOCKS proxy oluşturabilmektir. Yani kullandığımız proxy’nin engelleyemeyeceği bir port üzerinden (443 – https gibi) bizi herhangi bir şekilde kısıtlamadan internete açacak bir SSH sunucusuna bağlanacağız. Ve kullanacağımız uygulamaları proxy içinden güvenli bir şekilde geçecek bu “tünel”e (SOCKS proxy) bağlayarak proxy’nin kurallarını aşmış olacağız.

Fakat arkadaşın içinde bulunduğu durumda aşılması gereken iki sorun daha mevcut idi. Birincisi, Outlook’un hazırlayacağımız SOCKS proxyi kullanamaması; ikincisi ise, arkadaşın kullandığı proxy’nin Microsoft ISA Server olması idi. Kullanılan proxy uygulaması kimlik doğrulaması için NTLM protokolünü kullanıyordu. Başka bir deyişle, kullanıcı proxy ayarlarını girerken içinde bulunduğu windows network domain’i de kimlik doğrulama açısından önemli bir rol oynuyordu.

İlk problemi gidermek için “Sockscap” isimli ücretsiz bir programı kullandık. Böylece herhangi bir “exe” nin belirteceğimiz SOCKS proxy ayarları ile internete erişimini sağladık.

İkinci problemi gidermek için ise, “NTLM Authorization Proxy Server” isimli açık kaynak kodlu python’la hazırlanmış programı kullandık.

Şimdi sıra ile yukarıda belirttiğim koşullar altındaki bir makinadan nasıl MS Outlook’u hiçbir kısıtlama olmaksızın çalıştırabileceğimizi aktaracağım. Eğer Outlook yerine Thunderbird çalıştırıyor olsa idik Sockscap programını kullanmamıza gerek kalmayacaktı. Ve eğer kullanılan http proxy NTLM ile kimlik doğrulama yapmasa idi python kurulumu ve NTLM Authorization Proxy Server ile uğraşmayacaktık.

Kullandığımız proxy’nin bağlandığımız portu 8080 ise ve bilgisayarımızın bulunduğu networkte bir windows domain’e bağlı isek muhtemelen proxy NTLM protokolü kullanıyor demektir. Ya da putty’e proxy ayarlarınızı girdiğinizde “Error 407 Proxy Authentication Required” hatası alıyorsak muhtemelen NTLM kullanılıyor demektir.

Şimdi öncelikle örneğimizde kullanacağımız parametreleri belirleyerek sıra ile yapılması gereken aşamalara geçelim.

Kullandığımız proxy server ayarları ve diğer parametreler:

Kullandığımız proxy ayarları aşağıdaki şekilde olsun:

Proxy IP : 192.168.1.10

Proxy Port : 8080

Proxy Kullanıcı Adı : user1

Proxy Şifre : sifre1

Bağlı olduğumuz windows domaini : domain1.ofis

Şimdi de makinamızda kullanacağımız 2 adet port belirleyelim. Port numaraları normalde bilgisayarımızda kullanılan herhangi bir port olmasın diye ben 9000 ve 9999 portlarını örnek olarak kullanacağım. 9000 portunu normalde internete çıkmak için kullandığımız proxy’e kimlik doğrulamasını otomatik yaparak girebilmek için NTLM Authorization Proxy Server kurulumunda kullanacağım. 9999 portunu ise SOCKS proxy portu olarak kullanacağım. Eğer bu portlar bilgisayarınızda kullanımda ise (command prompt açarak “netstat -na” komutu ile kullanımdaki portları görebilirsiniz) daha yüksek numaralı iki portu da seçebilirsiniz.

Dışarda bize internete girmemizi sağlayacak ssh sunucusu olan ve ssh a bağlanmak için 443 portunu kullanabildiğimiz bir Linux makina ya da virtual host (VPS) için kullanacağımız örnek bilgiler aşağıdaki gibi olsun.

Makina IP si : 208.77.188.166 (example.com)

SSH portu : 443

SSH kullanıcı adı : sshuser

SSH password : sshpass

NTLM Authorization Proxy Server Kurulumu:

NTLM APS bir python uygulaması olduğu için öncelikle python yorumlayıcısı (interpreter) kurmamız gerekiyor. Bu nedenle aşağıdaki adresten işletim sistemimize uygun bir installer indirip kuruyoruz. Kurulum esnasında kurulumu yaptığımız yerin adresini unutmayalım. (Ben C:Python25 altına kurduğunuzu varsayacağım)
http://www.python.org/download/

Command promptu açarak kurulum yaptığınız klasöre gidip “python.exe –version” komutunu çalıştırdığınızda karşınıza “Python 2.5.2″ gibi bir versiyon bilgisi geliyorsa python yorumlayıcınız çalışıyor demektir.

Şimdi ise NTLM APS’i aşağıdaki linkten indirerek daha sonra yazacağımız komutun kısa olması açısından C:altına indirdiğimiz zip dosyasını açalım. Dolayısıyla zip dosyası içindeki main.py dosyasının adresi C:ntlmaps-0.9.9main.py olsun. (Daha güncel versiyonlar varsa indirmek için şu adrese gidebilirsiniz : http://ntlmaps.sourceforge.net/)

NTLM Authorization Proxy Server

Açtığımız zip dosyasının içinde server.cfg isimli bir dosya olacaktır. Bu dosyada bulunan aşağıdaki parametreleri kullandığınız proxy ayarlarına göre örnekteki gibi değiştirmeniz gerekmektedir. Aşağıdakiler sadece örnektir, parametrelerin karşısına kendi bilgilerinizi girmelisiniz. Yukarıda da belirttiğim gibi ben NTLM APS için 9000 portunu örnek olarak kullanacağım, sizde seçtiğiniz uygun bir portu kullanabilirsiniz.

LISTEN_PORT:9000
PARENT_PROXY:192.168.1.10
PARENT_PROXY_PORT:8080
NT_DOMAIN:domain1.ofis
USER:user1
PASSWORD:sifre1

server.cfg dosyasını kaydetmeden önce isterseniz dosya içindeki “User-Agent:” parametresini aşağıdaki şekilde değiştirerek sistem yöneticilerinizin “Çok ilginç, birisi hala Windows 98 ve Internet Explorer 5.5 kullanıyormuş” diyerek araştırma yapmasını engelleyebilirsiniz. Aşağıdaki parametreyi değiştirdiğinizde, yapacağımız diğer ayarlar ile Outlook kullanmaya başladığınızda kullandığınız proxy server sizin Windows XP’de Internet Explorer 6.0 ile https bir sayfa açtığınızı sanacaktır.

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)

Şimdi NTLM APS’yi çalıştıracağız. Bunun için bir command prompt açarak python yorumlayıcısını parametre olarak yukarıda bahsettiğim main.py’nin tam adresini vererek aşağıdaki gibi çalıştıracağız.

C:>Python25python.exe c:ntlmaps-0.9.9main.py
NTLM authorization Proxy Server v0.9.9
Copyright (C) 2001-2004 by Dmitry Rozmanov and others.
Now listening at webdev on port 9000

Yukarıdaki gibi bir çıktı alıyorsanız NTLM APS çalışıyor demektir. Açık olan command prompt’u kapatmamamız gerekiyor. Hem command prompt un açık kalmasını istemiyorsanız hem de daha kolay bir şekilde NTLM APS’yi başlatmak istiyorsanız C:ntlmaps-0.9.9 klasörü altındaki runserver.bat dosyasını açarak ikinci satırını yukarıda çalıştırdığınız komutla değiştirip kaydedebilirsiniz. Böylece sadece runserver.bat dosyasına tıklayarak NTLM APS’yi başlatabilirsiniz.

Bu noktada herşeyin doğru şekilde çalıştığını kontrol etmek için Firefox’u açarak Tools->Options->Network menüsüne gelip “Settings” butonuna tıklayarak aşağıdaki gibi HTTP proxy olarak 127.0.0.1 IP sini ve 9000 portunu (NTLM’i çalıştırdığınız port) ayarlayın. Daha sonra google.com’a girmeye çalışın. Eğer Google size merhaba diyorsa herşey doğru demektir. Eğer “Proxy server refusing connection” gibi bir hata alıyorsanız ve NTLM APS’nin doğru şekilde çalıştığından eminseniz, ya server.cfg içindeki proxy ayarlarınızı yanlış girdiniz ya da firefox için yaptığınız ayarda bir hata yapıyorsunuz demektir.

 

Putty ile SOCKS proxy hazırlanması:

Yukarıdaki aşamayı başarılı bir şekilde geçtikten sonra putty programı ile uzaktaki SSH sunucumuza bağlanarak bir SOCKS proxy oluşturacağız. Bu proxy’i makinamızın 9999 portuna bağlayacağız. Bu aşamada özet olarak putty’e NTLM APS’nin bize sağladığı proxy bilgilerini gireceğiz. Sonra 9999 portu için bir tünel oluşturacağız. SSH bağlantısının sürekli kesilmemesi için de bağlantı için keep-alive özelliğini aktif hale getireceğiz. Bu aşamanın sonunda internet kısıtlamalarını aşmış olacağız. Geriye sadece istediğimiz programın sockscap sayesinde SOCKS proxy ile çalışmasını sağlamak kalacak.

Putty’i aşağıdaki adresten indirip çalıştıralım.

http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe

Aşağıdaki gibi bağlanacağımız makinanın IP ve portunu girerek bu bağlantıya bir isim verelim.

Daha sonra soldaki menüden Connection’a tıklayarak “Enable TCP keepalives” seçeneğini seçili hale getirelim.

Sonra, “Connection” altındaki “Proxy” başlığına tıklayarak NTLM APS’ye bağlanacağımız proxy ayarlarını yapalım. Burada “Proxy Hostname” olarak “127.0.0.1”,  Port olarak “9000” (ntlm aps’i çalıştırdığımız port) girecek ve Proxy Type olarak da “HTTP”yi seçececeğiz.

Şimdi ise “Connection->SSH->Tunnels” başlığına tıklayarak bir port forwarding ayarı yapacağız. Böylece SOCKS proxy için gereken portu SSH bağlantımıza yönlendirmiş olacağız. Bu kısımda yapacağımız şey “Source Port” yazan kısma “9999” (ya da istediğiniz başka bir uygun port) yazmak ve “Destination” bölümünde hem “Dynamic” hem de “Auto” seçeneklerinin seçili hale getirmek olacak. Bunları yaptıktan sonra “Add” butonuna tıklayarak portu yönlendirme için gereken ayarı tamamlamış olacağız.

Son olarak yapacağımız işlem soldan en üstteki “Session” başlığına tıklayarak sağdaki “Save” butonuna tıklayarak tüm ayarlarımızı bağlantıya verdiğimiz isim ile kaydetmek olacak. Böylece her seferinde tekrar tekrar ayarları yapmak durumunda kalmayacağız. Şimdi “Session” bölümünden ayrılmadan sağdaki “Saved Sessions”ın altında artık yer alan kaydettiğimiz bağlantıya çift tıklayarak bağlantıyı açacağız. Bu işlem esnasında mutlaka NTLM APS’in çalışıyor olması gerekiyor.Çünkü putty bağlantı için NTLM APS’in sağladığı bağlantıyı kullanacak.

Eğer herşey yolunda gitti ise, karşınıza “Login as:” yazan bir ekran gelecektir. Bu ekrana SSH kullanıcı adı ve şifrenizi (örneğimizde “sshuser” ve “sshpass”) girerek SSH sunucusuna giriş yapacaksınız. Böylece bilgisayarımızın 9999 portu bizim için SOCKS proxy bağlantımız olacak. Ve bu bağlantı ile internet üzerindeki tüm kısıtlamaları kaldırmış olacağız.

Eğer bu aşama sonucunda bağlantı sağlayamadı iseniz:

  • putty ayarlarınızı doğru yaptığınızdan,
  • NTLM APS’nin putty’de proxy olarak ayarladığınız portta çalışıyor olduğundan,
  • NTLM APS’nin normalde kullandığınız proxy serverınızla bağlantı kurabildiğinden (yukarıda Firefox ile nasıl test edeceğinizi yazmıştım),
  • SSH sunucunuzun 443 portundan erişilebilir ve çalışır durumda olduğundan,
  • SSH sunucunuza erişmek için kullandığınız putty’e session bölümünden “hostname” olarak girdiğiniz alan adı ya da IP’nin kullandığınız proxy tarafından engellenmediğinden emin olmalısınız.

Eğer herşey yolunda gitti ve ssh sunucunuza giriş yapabildiyseniz putty’yi çalışır halde bırakarak bir sonraki aşamaya geçebilirsiniz.

Sockscap ile MS Outlook’un SOCKS proxy ile çalıştırılması

Örneğimizde arkadaşım Outlook kullanmak istediği için Sockscap programı ile Outlook’un nasıl çalıştırılacağını anlatacağım. Aslında bir exe’si olan herhangi bir programı Sockscap ile çalıştırmak Outlook çalıştırmaktan farklı değil. Sockscap’ın güzel bir özelliği programa istediğiniz kadar program ekleyebiliyor olmanız. Böylece Sockscap’ı açıp kaydettiğiniz programları tek bir butona tıklayarak tekrar ayar yapmadan çalıştırabilirsiniz.

Öncelikle Sockscap isimli programı indirmemiz gerekiyor. Aşağıdaki linke tıklayarak programın 2.40 versiyonunu bu site üzerinden temin edebilirsiniz.

Sockscap 2.4 link

Programı kurup çalıştırdığınızda genel ayarların yapılacağı bir pencere gelecektir. Bu ayarlara istediğiniz zaman  “File->Settings” menüsü ile erişebilirsiniz. Ayarlar kısmında SOCKS server olarak “localhost”, port olarak putty’de “tunnels” bölümünde yönlendirdiğiniz portu (örneğimizde 9999 portu) girmelisiniz. Sonra “SOCKS Version 5″i seçerek “Name Resolution” kısmında “Resolve all names locally” seçeneğini işaretlemeniz gerekmektedir. Bu ayarları yaptıktan sonra “OK” diyerek ayarlarını kaydedin.

Daha sonra yapacağımız şey programın normal ekranında sol üstteki “New” butonuna tıklayarak Outlook programını programa kaydetmek olacak. Bunun için “New”e tıkladıktan sonra gelen pencerede “Profile Name” olarak herhangi birşey (örnek : “Outlook with Sockscap”) yazıp, “Browse” butonuna tıklayarak Outlook programının exe’sini bulup göstermek gerekecek. Ya da Outlook’u çalıştıran exe’nin tam adresini biliyorsanız “Browse” yapmadan “Command Line” bölümüne elle de yazabilirsiniz. Eğer “Browse” ile exe’yi seçerseniz “Working Directory” otomatik olarak tamamlanacaktır. Burada önemli olan sadece doğru exe yi ve bu exe’nin bulunduğu klasörü girmektir. Daha sonra “OK” diyerek programı sockscap’a kaydedebilirsiniz.

MS Outlook için ayarlarımızı yukardaki şekilde kaydettikten sonra, eğer NTLM APS ve putty çalışıyorsa Sockscap programı ana ekranında kaydettiğimiz Outlook profiline tıklayıp sağ üstteki “Run!” butonuna tıklayarak programı hazırladığımız SOCKS proxy ile çalıştırabiliriz. Böylece amacımıza ulaşmış olduk.

Notlar :

Yukarıda anlattığım yöntemi test ederek ben SSH sunucusu olarak Debian Sarge işletim sistemine sahip bir VPS kullandım.

Putty’de session kısmında hostname olarak ben direkt domain yazdım ancak eğer problem olursa direkt IP yazmak daha sağlıklı olabilir.

SSH sunucu olarak evdeki Linux makinanızı kullanmak isterseniz mutlaka modeminizde 443 portu ile ilgili yönlendirmelerinizi yapmış olmanız ve sabit bir IP’nizin olması gerekir.

Bu yöntemle yapacağınız tüm bağlantılar SSH bağlantısı yaptığınız makinaya da aynen yansıyacaktır. Yani 1 gb trafik yaptı iseniz, SSH sunucusu olduğunuz makina da en az 1 gb trafik yapmış olacaktır.

Bu yöntemde SSH kullandığımız için giden gelen tüm veriler enkripte edilecektir. Dolayısıyla da normalde 10 KB olan bir e-postayı bu yöntemle çekerken şifreleme nedeniyle 10KB den daha fazla bir data trafik olarak yansıyacaktır.

Bu yöntemde izin verilen portlardan biri (443) kullanıldığı için teorik olarak bulunduğunuz network’ün güvenliğine bir kasıt ve tehdit oluşturmamış olursunuz. Ancak sonuçta bulunduğunuz yerdeki kurallar çok farklı olabileceği için bu yöntemi kullandığınızda başınız belaya girebilir. Bu nedenle ya bu yöntemin bulunduğunuz yerin kurallarına aykırı olmadığından emin olun, ya da bu yöntemi kullanmayın. Ben işin teorik yönünü paylaşmaya çalıştım, yöntemi kullanıp kullanmamak tamamen sizin kararınızdır. Uyarmış olayım da sonra başınıza bir sıkıntı gelmesin.

Bu yöntem MSN için de kullanılabilir mi? Evet kullanılabilir. Hatta Pidgin (eski adı ile Gaim) SOCKS proxy desteklediği için Sockscap’a gerek kalmadan MSN için bu yöntemi kullanabilirsiniz.

SSH sunucumuzda 443 yerine başka bir port kullansak olur mu? Bu bulunduğunuz yerde kullandığınız proxy’nin kısıtlamalarına bağlı. Hemen her HTTP proxy HTTP (port 80) ve HTTPs (port 443) protokollerini kısıtlamadığı için bu portları SSH sunucu portu olarak kullanmak en sağlıklı yöntemdir. Ancak eğer proxy’niz başka bir porta erişim sağlıyorsa o portlar da kullanılabilir. Ancak 443 ya da 80 kullanmak proxy’e internette bir site açtığınızı zannettireceği için farkedilmesi daha zor olacaktır. Örneğin 22 portu açık bile olsa, hergün 22 portunda sürekli bağlı kalmak sistem yöneticilerinin ilgisini daha çabuk çekebilir.

Kullandığım proxy sadece belirli sitelere girmeme izin veriyor, hala bu yöntemi kullanabilir miyim? Eğer girebildiğiniz siteler ya da IP’ler arasında kullanacağınız SSH sunucunun IP’si ya da adresi de yer alıyorsa kullanabilirsiniz. Ancak zaten proxy ile SSH sunucunuzun IP sine ulaşamıyorsanız, bu yöntem SSH sunucunuza bağlanamadığınız için doğal olarak işe yaramayacaktır.

Bu konuda aklınıza takılanları yorum olarak iletebilirsiniz.

About admin

Check Also

Sahibinden.com çöktü!

İkinci el denilince akla ilk gelen sitelerden olan sahibinden.com, bugün erişim sorunları yaşıyor. Sunucu kaynaklı olduğu …

Bir cevap yazın