İ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
| Özellik | Geleneksel DNS | DNS over TLS (DoT) | DNS over HTTPS (DoH) |
| Port | 53 (UDP/TCP) | 853 (TCP) | 443 (TCP/HTTP) |
| Şifreleme | Yok | TLS | TLS (HTTPS üzerinden) |
| Görünürlük | Tamamen açık | Şifreli (ama porttan belli) | Normal web trafiğiyle aynı |
| Engellenebilirlik | Çok Kolay | Kolay (Port bazlı) | Çok Zor |
| Performans | Düşük Gecikme | TLS yükü var | HTTP/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 bind9utilsSSL 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.comYapı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.optionsDosya 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.comArdı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_ADRESIBIND9 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 bind9Nginx 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.
