fix, güvenlik, internet, ipucu, Linux

DNS Sunucusunda TLS Üzerinden DNS ve HTTPS Üzerinden DNS’yi Yapılandırma

DNS istemcilerinin kullandığı UDP veya TCP protokollerinin, veri trafiğinin izinsiz dinlenmeye yatkın olması nedeniyle, Man in the Middle (MitM) saldırıları ve internet sansürü bulunan bir çok ülkede ISS’ler tarafından sıklıkla istismar edilmektedir. Yeni TLS üzerinden DNS (DoT) ve HTTPS üzerinden DNS (DoH) protokolleri, son kullanıcının gizliliğini ve güvenliğini sağlamak için kullanılabilir.

Cloudflare & Quad9 gibi genel DNS sağlayıcıları, zaten bu protokolleri, bütünleşik DoH desteğini sunan Mozilla Firefox ile sunmuştu. Ancak, çoğu işletim sistemi ve uygulama bunları desteklememektedir. Ancak son kullanıcılar yine de bu protokolleri bilgisayarlarında bir DNS sunucusu kurup yapılandırarak ve herhangi bir DoT veya DoH sağlayıcısını ISS’nin DNS üzerindeki kontrolünü atlamak için kullanabilirler.

Bu protokollerin ikisi de IETF standartlarıdır ve HTTPS’nin TLS üzerinden çalıştığı gerçeği göz önüne alındığında eşit derecede güvenlidir. Bununla birlikte, her iki protokolün de fikir ayrılıkları vardır ve RFC 7766 rehberini uygulayan daha üstün bir DoT protokolü varken, DoH protokolünün ilk sırada yer almasının nedeni üzerine birçok tartışma vardır. DoH’ye ilişkin DNS talepleri, 443 portundaki normal HTTPS trafiğine benzeyen ve 853 numaralı bağlantı noktasında çalışan DoT’un aksine durması zor olduğundan, DoH’yi daha politik kılmaktadır. Bu, DoH protokolünü İnternet sansürü olan ülkelerdeki kullanıcılar için cazip kılmaktadır. (tümü için bkz. -> RFC 8484 , RFC 7858 , RFC 8310 )

Bu yazıda, bir DNS sunucusuda her iki protokolü de yapılandırmaya çalışacağız. Her iki hizmet de, tüm büyük web tarayıcıları tarafından güvenilen, Let’s Encrypt sertifika yetkilisini kullanarak ücretsiz olarak elde edilebilecek SSL sertifikaları gerektiriyor. Certbot’u, otomatik olarak Let’s Encrypt yenilemesi için yapılandırabilir veya Get HTTPS For Free yardımcı programını kullanarak elle bir tane oluşturabilirsiniz.

 

TLS üzerinden DNS (DNS-over-TLS / DoT)

TLS üzerinden DNS standardı, RFC 7858‘de belirtildiği gibi uygulanır. Temel olarak, standart, çoğu DNS sunucusunda zaten bulunan ve TCP üzerinden DNS protokolü desteğini kullanmayı ve buna TLS eklediğini belirtir. DoT desteği, DNS sunucusunda bir eklenti özellik olarak kullanılabilir veya etkinleştirmek için Nginx web sunucusunu kullanabilirsiniz.

Bu kurulum için Ubuntu Server 18.04 LTS kullanılacaktır, ancak herhangi bir Linux dağıtımında benzer bir yapılandırma yapabilirsiniz.

İlk olarak nginx web sunucusu kurmakla başlayalım:

 

sudo apt-get -y install nginx

 

Şimdi DoT’yi yapılandırmak için, /etc/nginx/nginx.conf dosyasına aşağıdaki stream config bloğunu kopyalamak ve sertifika ve anahtar dosyalarını config dosyasında verilen yola kaydetmek. Upstream DNS sunucusu IP adreslerini mevcut DNS sunucularınıza güncellemeyi unutmayın.

 

stream {
    upstream dns-servers {
        server    10.10.1.5:53;
        server    10.10.1.6:53;
    }

    server {
        listen 853 ssl;
        proxy_pass dns-servers;

        ssl_certificate            /etc/nginx/ssl/dot-server.crt;
        ssl_certificate_key        /etc/nginx/ssl/dot-server.key;

        ssl_protocols        TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers          HIGH:!aNULL:!MD5;
        
        ssl_handshake_timeout    10s;
        ssl_session_cache        shared:SSL:20m;
        ssl_session_timeout      4h;
    }
}

 

Bu işlemi yaptıktan sonra, yapılandırmayı tamamlamak için nginx web sunucusunu reload edin:

 

sudo service nginx reload

 

HTTPS üzerinden DNS’yi yapılandırma (DNS-over-HTTPS / DoH)

DNS üzerinden HTTPS standardı RFC 8484‘te belirtilmiştir ve HTTP protokolünü kullandığından uygulamak için biraz farklıdır. DNS sorguları HTTP POST yöntemi veya base64 kodlu bir HTTP GET parametresi olarak gönderilir. GET metodunun kullanılması, istenmeyen muhtemel yanıtın önbelleğe alınmasına, DNS protokolünün, HTTP tabanlı bir önbellek sunucusu tarafından geçersiz kılınabilecek TTL değerlerini kullanarak sona ermesini kontrol ettiğini göz önünde bulundurarak izin verir.

Herhangi bir DNS sunucusuyla kullanılabilecek DNS-over-HTTPS (DoH) açık kaynaklı web uygulaması, Windows IIS Web Sunucusuna veya cross-platform .NET Core sürümü, desteklenen herhangi bir platformda (Windows / macOS / Linux) kullanılabilir.

Windows IIS Web Sunucusuna kurulum, oldukça kolaydır. Sadece web sitesini IIS konsolundan oluşturun, DNS-over-HTTPS ASP.NET web application zip dosyasını indirin ve web sitesi kök klasörüne çıkarın. Herhangi bir web sitesi için yaptığınız gibi, IIS için SSL sertifikasını yapılandırın. Son olarak, web uygulamasını DNS sunucunuza yönlendirmek için aşağıda gösterilen Web.config uygulama ayarlarını yapılandırmanız gerekir. Belirtilen DNS sunucusuna bağlanmak için desteklenen protokollerden herhangi birini (Udp, Tcp, Tls veya Https) kullanabilirsiniz.

 

<applicationSettings>
    <DNS_over_HTTPS.Properties.Settings>
      <setting name="DnsServerProtocol" serializeAs="String">
        <value>Udp</value>
      </setting>
      <setting name="DnsTimeout" serializeAs="String">
        <value>2000</value>
      </setting>
      <setting name="DnsServer" serializeAs="String">
        <value>127.0.0.1</value>
      </setting>
    </DNS_over_HTTPS.Properties.Settings>
</applicationSettings>

 

DoH cross-platform web uygulaması ASP.NET Core’u kullanarak çalışır ve Windows, Linux veya macOS’ta bulunmaktadır. Örneğimizde bu web uygulamasını deploy etmek için Ubuntu Server 18.04 LTS kullanacağız, ancak diğer Linux dağıtımlarında da benzer adımları takip edebilirsiniz. ASP.NET Core Web Applications bütünleşik web sunucusu ile ayrı bir process olarak çalışır. HTTPS protokolünü desteklemek için bu web uygulaması için nginx’i SSL termination için bir araya getirmemiz gerekir.

DoH ASP.NET Core uygulamasını deploy için önce en son .NET Core Runtime‘ı kurmanız gerekir. Bundan sonra, DoH web uygulamasını yüklemek için aşağıdaki adımları izleyin.

 

sudo mkdir /var/aspnetcore
sudo mkdir /var/aspnetcore/doh
cd /var/aspnetcore/doh
sudo wget https://technitium.com/download/doh/doh-aspnetcore.zip
sudo apt-get -y install unzip
sudo unzip doh-aspnetcore.zip

 

DNS sunucunuzu ve desteklenen protokolünüzü belirtmek için appsettings.json uygulama ayarları yapılandırma dosyasını düzenleyin. Belirtilen DNS sunucusuna bağlanmak için desteklenen protokollerden herhangi birini (UDP, TCP, TLS veya HTTPS) kullanabilirsiniz.

 

sudo nano appsettings.json

 

DoH web uygulamasını bir systemd servisi olarak kurun:

 

sudo cp systemd.service /etc/systemd/system/doh.service
sudo systemctl enable doh.service
sudo systemctl start doh.service

 

Ya da sisteminiz systemd desteklemiyorsa supervisor kullanın:

 

sudo apt-get -y install supervisor
sudo cp supervisor.conf /etc/supervisor/conf.d/doh.conf
sudo service supervisor restart

 

DoH web uygulamasının 8053 portunda çalışıp çalışmadığını artık görebilirsiniz:

 

sudo netstat -nlpt | grep ":8053"

 

Son adımda nginx web sunucusunu SSL termination için yapılandıracağız. Önce nginx web sunucusunu kuralım:

 

sudo apt-get -y install nginx

 

Alan adınız için /etc/nginx/sites-enabled/doh.example.com adresinde, aşağıda gösterilen yapılandırma ile bir yapılandırma dosyası oluşturun. Sertifika ve anahtar dosyalarını yapılandırmada verilen yola kaydedin.

 

server {
    listen 443 ssl;
    server_name doh.example.com;

    ssl_certificate /etc/nginx/ssl/doh-server.crt;
    ssl_certificate_key /etc/nginx/ssl/doh-server.key;

    location / {
        proxy_pass http://127.0.0.1:8053;
    }
}

 

Yapılandırmayı tamamlamak için nginx web sunucusunu reload edin:

 

sudo service nginx reload

Ve Hazır!

Artık DoT servisini (dot.example.com:853) veya DoH servisini (https://doh.example.com/dns-query) kullanabilirsiniz.

Umarım faydalı olur.

 

 

 

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d blogcu bunu beğendi: