İçeriğe geç

DoH (DNS over HTTPS) Nedir ve Nasıl Çalışır?

Kategori: Ağ Yönetimi

İnternet trafiğinin gizliliğini sağlamak için kullanılan DNS sorguları, şifrelenmediği için saldırıya açıktır. Bu güvenlik açığını kapatmanın en etkili yolu, DNS sorgularını HTTPS üzerinden şifreleyerek ileten DoH teknolojisidir.

DoH (DNS over HTTPS) Nedir?

DNS sorguları, UDP port 53 üzerinden düz metin formatında iletilir. Bu durum, trafiğinizin ağ operatörleri, servis sağlayıcılarının izlenmesine veya değiştirilmesine neden olur.

DoH, bu sorunu çözer. DNS taleplerini TLS katmanı ile şifrelenmiş HTTPS trafiği içerisine gizleyerek gönderir.

DoH Neden Önemli?

Şifreli DNS protokolleri DNS spoofing saldırılarını engelleyerek verilerin kurcalanmasının önüne geçer. Bu şifreleme işlemi bağlantıyı yavaşlatmaz, hatta DNS yanıt sürelerini daha da kısaltır.

Trafik standart HTTPS (Port 443) ile karıştığı için engellenmesi oldukça zordur. Sistemdeki şifreli trafiğin verimliliğini ölçmek içinse iPerf üzerinden ağ hızı ve paket kaybı ile performans doğrulanabilir.

DNS Protokolleri Karşılaştırması

Hangi teknolojinin size uygun olduğunu anlamak için aşağıdaki tabloya göz atabilirsiniz

ÖzellikGeleneksel DNSDNS over TLS (DoT)DNS over HTTPS (DoH)
Port53 (UDP/TCP)853 (TCP)443 (TCP/HTTP)
ŞifrelemeYokTLSTLS (HTTPS üzerinden)
GörünürlükTamamen açıkŞifreli (ama porttan belli)Normal web trafiğiyle aynı
EngellenebilirlikÇok KolayKolay (Port bazlı)Çok Zor
PerformansDüşük GecikmeTLS yükü varHTTP/2-3 ve TLS yükü var

BIND9 Üzerinde DoH Kurulumu

BIND9, yaygın DNS sunucu yazılımlarından biridir. DoH desteğini aktif etmek için sunucunuzda libnghttp2 kurulu olması gerekir.

BIND9 Paketlerini Yükleyelim

Sistemi güncelleyip gerekli araçları kuralım

sudo apt update && sudo apt install bind9 bind9utils

SSL Sertifikası Alımı

HTTPS üzerinden hizmet verebilmek için geçerli bir sertifikaya ihtiyacımız var. Let’s Encrypt ile hızlıca ücretsiz sertifika oluşturabiliriz

sudo certbot certonly --standalone -d alanadiniz.com

Yapılandırma Dosyasını Düzenleyelim

named.conf.options dosyasını düzenleyerek TLS ve HTTP parametrelerini eklememiz gerekiyor.

sudo nano /etc/bind/named.conf.options

Dosya içeriğini şu şekilde yapılandıralım.

tls local-doh-tls { 
    cert-file "/etc/letsencrypt/live/alanadiniz.com/fullchain.pem"; 
    key-file "/etc/letsencrypt/live/alanadiniz.com/privkey.pem"; 
};

http doh-endpoint { 
    endpoints { "/dns-query"; }; 
};

options {
    directory "/var/cache/bind";
    dnssec-validation auto;
    auth-nxdomain no;
    listen-on-v6 { any; };

    forwarders {
        1.1.1.1;
        8.8.8.8;
    };

    # DoH Dinleyicisi
    listen-on port 443 tls local-doh-tls http doh-endpoint { any; };
};

Local Yapılandırma Dosyasını Düzenleyelim

Gerekli tanımlamaları yapmak için şu dosyayı açalım

sudo nano /etc/bind/named.conf.local

İçerisine şu satırları ekleyelim.

zone "alanadiniz.com" {
    type master;
    file "/etc/bind/db.alanadiniz.com";
};

Zone Dosyasını Oluşturalım

Alan adı kayıtlarını tutacağımız dosyayı hazırlayalım

sudo nano /etc/bind/db.alanadiniz.com

Ardından şu örnek verileri dosyaya aktaralım

$TTL    604800
@       IN      SOA     ns.alanadiniz.com. admin.alanadiniz.com. (
                              2         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      ns.alanadiniz.com.
ns      IN      A       SUNUCU_IP_ADRESI
@       IN      A       SUNUCU_IP_ADRESI

BIND9 Servisini Yeniden Başlatalım

Tüm yapılandırmayı tamamladıktan sonra değişikliklerin aktif olması için servisi baştan başlatalım

sudo systemctl restart bind9

Nginx ve Caddy ile Yönetim

Bazen DNS sunucusunu doğrudan dış dünyaya açmak yerine bir Reverse Proxy kullanmak daha avantajlı olabilir.

Nginx ile DoH-to-DNS

Nginx, 443 portunda gelen HTTPS isteklerini karşılar, içindeki DNS paketini deşifre eder ve arka plandaki standart DNS sunucusuna (Port 53) iletir.

Caddy ve Otomatik HTTPS

Caddy, sertifika yönetimini kendisi yapar. Özellikle Layer 4 eklentisi ile DoT trafiğini port 853 üzerinde karşılayıp yerel sunucuya aktarmak için aşağıdaki kodu kullanalım.

{
    layer4 {
        :853 {
            @dot tls sni dns.example.com
            route @dot {
                proxy localhost:53
            }
        }
    }
}

Sık Sorulan Sorular

DoH ve DoT (DNS over TLS) arasındaki fark nedir?

DoT, 853 portunu kullanır ve ağ yöneticileri tarafından kolayca engellenebilir. DoH ise standart web trafiğiyle aynı portu (443) kullandığı için normal internet trafiğinden ayırt edilemez ve engellenmesi çok daha zordur.

BIND9 önüne neden Nginx veya Caddy gibi bir proxy koymalıyım?

BIND9 zaten DoH görevini tek başına yapar. Ancak sunucunuzda hazırda Nginx veya Caddy kuruluysa, SSL sertifika yönetimini bu araçlara bırakıp DNS trafiğini port 443 üzerinden BIND9’a yönlendirebilirsiniz.

Şifreli DNS kullanırken ISS hala hangi verilere erişebilir?

ISS hangi alan adına gittiğini göremese de bağlandığın sunucunun IP adresini görebilir. Tam gizlilik için bu sistemin genellikle bir VPN veya güvenli proxy ile desteklenmesi önerilir.

İlk Yorumu Siz Yapın

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir