Kameralara izinsiz kayıtlara karşı önlem olarak yanıp sönen kırmızı kayıt ışıkları eklerken ya da notebook kameralarımızı bantla kapatırken mikrofon gibi fazlasıyla büyük bir tehditi nasıl unutabildiysek, web trafiğini HTTPS ile güvenli hale getirmeye çalışırken en başta doğru siteye bağlanmamızı sağlamakla yükümlü DNS trafiğinin 1983'ten beri her türlü gözetlenmeye, izlenmeye, değiştirilmeye açık bir şekilde gittiğini az daha unutuyorduk. Neyse ki, çok geç olmadan öyle ya da böyle bir adım attık.

DNS over HTTPS yani HTTPS üzerinden DNS, kısaca DoH, alan adı sorgularını HTTPS ile bağlandığınız bir endpoint ile çözümlemenize olanak sağlıyor. Bu sayede bağlanmak istediğimiz adreslerin ağdaki herhangi birisi tarafından gözetlenmesini önleyip internet trafiğinize reklam ya da kötü niyetli amaçlar için müdahale etmek isteyenleri de bu yöntemle savuşturabilirsiniz. Birçok işletim sistemi ve dağıtımda da DoH için dahili bir istemci bulunmadığından, bizim gönderdiğimiz DNS paketlerini karşılayıp, bunları HTTPS üzerinden gönderilebileceği uygun bir formata sokan, aldığı cevabı bize yine DNS protokolünde bir cevap olarak yollayacak bir şeye ihtiyacımız var. Bu yazıda bu işlemi bizim yerimize Cloudflare'ın geliştirdiği cloudflared sağlayacak.

https://developers.cloudflare.com/argo-tunnel/downloads/#windows adresinden sistemimize uygun ZIP dosyasını indirerek işe koyuluyoruz. Arşivden çıkarttığımız cloudflared.exe dosyasını komut satırından kullanabiliyoruz. Uygun seçenekleri görmek için, parametresiz olarak  ya da -h parametresi ile çalıştırmak yeterli.

C:\Users\Batuhan\Downloads\cloudflared-stable-windows-amd64>cloudflared.exe

NAME:
	cloudflared - Cloudflare's command-line tool and agent

USAGE:
	cloudflared.exe [global options] command [command options] origin-url

VERSION:
	2019.2.0 (built 2019-02-11-2011 UTC)

DESCRIPTION:
	cloudflared connects your machine or user identity to Cloudflare's global network.You can use it to authenticate a session to reach an API behind Access, route web traffic to this machine,and configure access control.

COMMANDS:
        update     Update the agent if a new version exists
        version    Print the version
        proxy-dns  Run a DNS over HTTPS proxy server.
        service    Manages the Argo Tunnel Windows service
        help, h    Shows a list of commands or help for one command
	Access (BETA):
		access  access 
	Tunnel:
		tunnel  Make a locally-running web service accessible over the internet using Argo Tunnel.

GLOBAL OPTIONS:
	--help, -h         show help (default: false)
	--version, -v, -V  Print the version (default: false)

COPYRIGHT:
    (c) 2019 Cloudflare Inc.Use is subject to the license agreement at
	https://developers.cloudflare.com/argo-tunnel/license/

Burada gördüğümüz üzere, proxy-dns komutu bize 53. yerel portumuzdan gelen DNS trafiğini varsayılan olarak Cloudflare'ın HTTPS DNS çözümleyicisine gönderecek yerel proxy sunucusunu ve endpoint ile iletişim için kullanacağı DoH istemcisini başlatacak.

C:\Users\Batuhan\Downloads\cloudflared-stable-windows-amd64>cloudflared.exe proxy-dns

INFO[0000] Adding DNS upstream                           url="https://1.1.1.1/dns-query"
INFO[0000] Adding DNS upstream                           url="https://1.0.0.1/dns-query"
INFO[0000] Starting metrics server                       addr="127.0.0.1:57799"
INFO[0000] Starting DNS over HTTPS proxy server          addr="dns://localhost:53"

Bu aşamada hiçbir hata mesajıyla karşılaşmadıysanız, DNS proxy sunucumuz başarılı bir şekilde başlatıldı demektir. Varsayılan olarak hiçbir parametre vermediğimizde, Cloudflare kendi HTTPS endpoint'lerini ekliyor ve localhost'ta 53. porta gelen talepleri karşılayacak bir sunucu başlatıyor.

Farklı DNS sunucularını ve verecekleri cevapları test etmek için Windows'un nslookup aracını kullanabiliriz. nslookup ilk parametre olarak sorgulanması için bir alan adı, ikinci opsiyonel bir parametre olarak da bir DNS sunucusu adresi alıyor ve varsayılan olarak sistem ayarları kullanılıyor. DNS trafiğinin normalde herhangi bir şifreleme olmadan, izlenmeye ve saldırıya tamamen açık bir şekilde aktığını gösterebilmek adına, nslookup ile çeşitli DNS sunucularına google.com için DNS sorguları gönderdim ve bu paketleri Wireshark ile yakalayıp bir ekran görüntüsü aldım.


C:\Users\Batuhan>nslookup google.com
Server:  dsldevice.lan
Address:  192.168.1.1

Non-authoritative answer:
Name:    google.com
Addresses:  2a00:1450:4017:809::200e
          216.58.212.46


C:\Users\Batuhan>nslookup google.com 8.8.8.8
Server:  google-public-dns-a.google.com
Address:  8.8.8.8

Non-authoritative answer:
Name:    google.com
Addresses:  2a00:1450:4017:806::200e
          172.217.169.110


C:\Users\Batuhan>nslookup google.com 1.1.1.1
Server:  one.one.one.one
Address:  1.1.1.1

Non-authoritative answer:
Name:    google.com
Addresses:  2a00:1450:4017:809::200e
          172.217.169.174

Hangi DNS sunucunu kullanırsak kullanalım, DNS trafiğinin izlemeye açık bir şekilde bütün interneti dolaştığını görebiliyoruz. Bunun kişisel gizliliğimize büyük bir tehdit oluşturması halihazırda yeterince büyük bir sorunken, standart DNS paketlerinin cevabın bütünlüğünü ve el değmemişliğini doğrulamak için hiçbir alana sahip olmadığını hatırlayacak olursak bu bizi DNS bazlı saldırılara, bu paketlere yapılabilecek müdahalelere ve manipülasyonlara karşı da savunmasız bırakıyor. Normal şartlarda bu trafiği izlemek ve bu trafiğe müdahale etmek yasalara aykırı olsa ve suç teşkil etse de, günümüzde birçok kişi, şirket, kurum ve kuruluşun bu değerleri hiçe saydığını görebiliyoruz. Kişisel gizliliğimiz ve güvenliğimiz için bu gibi tehditlere karşı kendi kendimize alabileceğimiz önlemleri almamız, tabiri caizse önce eşeğimizi sağlam kazığa bağlamamız gerektiği konusunda sanırım herkes hemfikirdir.

DNS trafiğimizin sistemimizde çalışan ve localhost üzerinden bağlantıları dinleyen cloudflared üzerinden güvenli bir şekilde geçtiğini doğrulamak için bu sefer nslookup aracına DNS sunucu adresi olarak 127.0.0.1 vererek testi tekrarlayabiliriz.


C:\Users\Batuhan>nslookup google.com 127.0.0.1
Server:  localhost
Address:  127.0.0.1

Non-authoritative answer:
Name:    google.com
Addresses:  2a00:1450:4017:806::200e
          172.217.169.174

Bu şekilde google.com için DNS talebini yerel sunucumuzdaki cloudflared istemcisine nslookup ile göndermiş olduk.  Cloudflared kendisine gelen bu talebi güvenli bir HTTPS bağlantısı üzerinden dökümantasyonunda da belirtilen uygun bir formatla 1.1.1.1 adresine gönderiyor. Bu gönderilen talebe verilen cevap, cloudflared tarafından bir DNS cevabına dönüştürülüyor ve nslookup'a geri gönderiliyor.

Bu kez Wireshark'a baktığımızda az öncekilere ek olarak hiçbir DNS talebi gönderilip alındığını göremiyoruz. Gerçi Wireshark paket yakalamak için Windows'ta WinPcap kullandığı ve WinPcap yerel makineden yerel makineye kurulan bağlantıları gösteremediği için nslookup'tan cloudflared'a giden DNS paketini de göremiyoruz ancak bunun bir önemi yok.

Bunlar yerine, birkaç filtreyi değiştirdiğimizde cloudflared'dan 1.1.1.1 adresindeki DoH sunucusuna giden HTTPS paketlerini görüyoruz. Paket yakalama öncesinde sisteme Wireshark'ın self-signed sertifikasını ekleyip cloudflared'ı bu sertifikayı kullanmaya zorlamadıkça, bu paketleri ben bile göremem.

Bu sayede bir önceki örnekte ağa gönderip aldığımız gözetleme ve manipülasyonlara açık DNS paketleri hiçbir zaman bilgisayarımızdan ayrılmamış oluyor ve adres çözümleme işlemleri ağ üzerinde HTTPS ile şifreli bir şekilde gidip geldiği için bunları gözetlemek, dijital imza bozulacağı ve paket geçersiz sayılacağı için de herhangi bir şekilde değiştirmek veya maniple etmek ağ üzerindeki hiç kimse için mümkün olmuyor.

Şimdi ağ bağdaştırıcımızın DNS sunucusu adresini bu doğrultuda değiştirmeliyiz ki sistemimizdeki bütün uygulamalar 127.0.0.1 adresini kullansın.

Dilerseniz Diğer DNS Sunucusu alanına varsayılan ağ geçidinizin IP adresini ya da 8.8.8.8 veya 1.1.1.1 gibi farklı IP adreslerini de yazabilirsiniz. Birinci DNS sunucusunun ulaşılamaz olduğu bir durum olursa, bu DNS sunucusu kullanılabilir. Fakat çok dikkatli olun, çünkü sistemin hangi DNS sunucusunu hangi durumlarda kullanacağı ve hangisini tercih edeceği her zaman öngörülemiyor. Öncelikli amacınız gizlilikse bu alanlara yazacağınız adreslere gönderilen paketlerin hala standart DNS paketleri olduğunu aklınızdan çıkartmayın ve diğer alanı boş bırakın. 127.0.0.1 adresinin güvenli olmasının nedeni bu adrese gönderilen paketlerin hiçbir zaman sistemimizden ayrılmayacak olması.

Elbette ta yazının en başında açtığımız konsol penceresindeki cloudflared proxy-dns komutu hala çalışıyor. Bu komutu durdurmak ya da komut penceresini kapatmak cloudflared'ın da tabii ki kapanmasına sebep olur. Sistem başlangıcında arkaplanda çalışması, bir hata durumunda otomatik olarak yeniden başlatılması için bir sistem servisi kurup ayarlamamız gerekiyor. cloudflared'ı parametresiz çalıştırdığımızda aldığımız çıktıda, "service" şeklinde bir komutun mevcut olduğunu görüyoruz. Bu komutun çıktısı, cloudflared'ı sistem servisi olarak kurmak ve kurulu servisi kaldırmak için birkaç komut olduğunu gösteriyor.


C:\Users\Batuhan\Downloads\cloudflared-stable-windows-amd64>cloudflared service
...
USAGE:
   cloudflared service command [command options] [arguments...]

COMMANDS:
     install    Install Argo Tunnel as a Windows service
     uninstall  Uninstall the Argo Tunnel service
     help, h    Shows a list of commands or help for one command
...

Bu demek oluyor ki, cloudflare service install komutu ile tam da istediğimiz şeyi yapmak mümkün.

C:\Users\Batuhan\Downloads\cloudflared-stable-windows-amd64>cloudflared service install
INFO[0000] Installing Argo Tunnel Windows service
ERRO[0000] Cannot establish a connection to the service control manager  error="Erişim engellendi."

Eğer böyle bir hata alırsanız bunun sebebi komut satırını dolayısıyla da cloudflared'ı yönetici olarak başlatmamış olmanız. Komut Satırını yönetici olarak başlattıktan sonra komutu tekrarladığımızda, aşağıdaki gibi bir çıktı vermiş olması gerekiyor.

C:\Users\Batuhan\Downloads\cloudflared-stable-windows-amd64>cloudflared service install
INFO[0000] Installing Argo Tunnel Windows service
INFO[0000] Argo Tunnel agent service is installed

Windows'un Servisler penceresini arama çubuğuna yazarak ya da services.msc komutunu çalıştırarak açabilirsiniz. Açılan listede "Argo Tunnel" isimli bir servis görüyorsak servisin başarıyla kurulduğunu doğrulayabiliriz.

22 Şubat 2019 itibariyle yazdığım bu yazıda, ne yazık ki servisimiz kurulmuş olmasına rağmen hemen çalışmakta sorun yaşıyor. Servisi başlatmaya çalıştığımızda işlemin beklenmeyen bir şekilde sonlandığına dair hata mesajı almaktayız. Bunun sebebi, "Çalıştırılabilir dosyanın yolu" etiketi altında gösterilen yolun "proxy-dns" parametresini içermemesinden kaynaklanıyor. Hal böyle olunca, cloudflared nasıl başlayacağını bilemediği için hem başlamıyor, hem de 0'dan farklı bir çıkış kodu döndürerek hizmetin çalışmasını engelliyor. Hizmet Özellikleri penceresinin alt kısmındaki "Başlangıç parametreleri" kutucuğuna proxy-dns yazıp bu sefer Başlat dediğimizde servisin şimdilik başladığını görüyoruz. Şimdilik diyorum, çünkü bu başlangıç parametresi sistem yeniden başladığında silineceğinden bu parametreyi bir şekilde kalıcı hale getirmemiz gerekiyor. Kayıt Defteri Düzenleyicisi regedit'i açıp HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Cloudflared anahtarını açıyoruz ve sağ tarafta gördüğümüz "ImagePath" değerini düzenleyip mevcut değerin sonuna "proxy dns" parametresini ekliyoruz.

Her şeyin yerli yerine oturması ve iyi şans için, bu aşamada sisteminizi yeniden başlatmanızı tavsiye ederim. Elbette zorunlu değil ancak her şeyin doğru olduğuna emin olmak için yapabileceğimiz en kolay ve en hızlı yol olabilir. Artık nslookup aracını DNS sunucu adresi kısmı boş olacak şekilde kullanacak olursak, trafik cloudflared üzerinden akacaktır. Bunu tam olarak gösterebilmenin bu yazı içerisinde hızlıca değinebileceğim başka bir yolu olmadığı için, bu yazının yazıldığı tarih itibariyle hakkında gönderilen DNS paketlerinin engellendiği wikipedia.org adresini "nslookup wikipedia.org" komutu ile çözümlemeye çalışabilirsiniz. Eğer geriye bir yanıt döndüyse, her şey doğru bir şekilde çalışıyor demektir.


Bu yazıda sisteminize pek sevgili Cloudflare'ın 1.1.1.1 DNS sunucusunu DNS over HTTPS ile kullanabilmeniz için cloudflared proxy/DoH istemcisini Windows üzerinde kullanmayı, ağ bağdaştırıcınızı DNS trafiğini cloudflared üzerinden göndermesi için yapılandırmayı ve cloudflared'ı sistem başlangıcında otomatik olarak başlaması için sistem servisi olarak kurmayı detaylarıyla anlattım. Bu konuda fikir, soru ve görüşlerinizi kısacası söylemek istediğiniz her şeyi aşağıda söyleyebilirsiniz.

Bir sonraki yazımda biraz daha fazla gizlilik için sisteminizden sızabilecek DNS trafiğini Windows Güvenlik Duvarı kuralları ile nasıl engelleyebileceğinizi anlatmaya çalışacağım.