Daha önce birkaç kamuya açık sunucudaki DNS trafiğini denetlerken, UDP/53 üzerinden açık sorguların üst düzey çözümleyicilere sızıntı gösterdiğini gördüm. Bu durumda sistem seviyesinde isim çözümlemesini sıkılaştırmak için systemd-resolved kullanmaya karar verdim. Çoğu modern dağıtımda yerleşik olan bu stub çözümleyici, DNS-over-TLS (DoT) ve DNSSEC doğrulamasını varsayılan olarak destekliyor.
systemd-resolved'in aktif olup olmadığını kontrol et
Öncelikle hizmetin çalışıp çalışmadığını doğrula. Ubuntu/Debian gibi dağıtımlarda genellikle varsayılan olarak etkindir, ancak minimale kurulumlar veya özel yapılandırmalarda devre dışı bırakılmış olabilir.
systemctl is-active systemd-resolved
Eğer inactive dönerse, hizmeti başlat ve otomatik başlatmayı etkinleştir:
sudo systemctl start systemd-resolved
sudo systemctl enable systemd-resolved
Ardından durumu kontrol et:
sudo systemctl status systemd-resolved
127.0.0.53:53 adresini dinlediğini görmelisin — bu yerel stub çözümleyici adresi.
DNS-over-TLS sunucularını yapılandır
/etc/systemd/resolved.conf dosyasını düzenleyerek üst düzey DoT çözümleyicilerini tanımlayorum. Cloudflare ve Quad9 gibi gizlilik politikaları ve DNSSEC desteği sunan hizmetleri tercih ediyorum.
[Resolve]
DNS=1.1.1.1#cloudflare-dns.com 9.9.9.9#dns.quad9.net
FallbackDNS=8.8.8.8 8.8.4.4
DNSOverTLS=yes
DNSSEC=yes
#hostname sözdizimi, systemd-resolved'ın TLS sertifikasını bu isim karşılığında doğrulamasını söyler — bu da DoT kimlik doğrulamasının çalışma prensibi. Bu olmadan şifreleme olur ama sunucu kimliği doğrulanmaz.
Değişikliği kaydettikten sonra hizmeti yeniden başlat:
sudo systemctl restart systemd-resolved
DNS-over-TLS'in çalıştığını doğrula
Mevcut DNS ayarlarını sorgulamak ve çözümlemeyi test etmek için resolvectl komutunu kullan:
resolvectl status
Şunlara bak:
- Current DNS Server: 1.1.1.1, 9.9.9.9
- DNSSEC Supported: yes
- DNS-over-TLS: yes
Sonra bir alan adıyla test yap:
resolvectl query example.com
DNSSEC doğrulaması geçerse, ad bayrağı (kimliği doğrulanmış veri) olan güvenli bir yanıt görmeni gerekiyor.
Bilinen hatalı bir alan adıyla DNSSEC'i doğrula
DNSSEC'in gerçekten doğrulama yaptığını onaylamak için imzası bozuk bir alan adıyla test yap:
resolvectl query dnssec-failed.org
Bu komut SERVFAIL döndürmeli, çünkü bölge doğrulamadan geçemiyor. Eğer bir yanıt alırsan, DNSSEC çalışmıyor demektir.
İsteğe bağlı: Çözümleyici çakışmaları için yerel yedek kullan
Bazı araçlar (Docker veya VPN istemcileri gibi) /etc/resolv.conf dosyasını üzerine yazabiliyor. Çakışmayı önlemek için bu sembolik bağın systemd-resolved'ın stub dosyasını göstermesini sağla:
ls -l /etc/resolv.conf
Bu bağın /run/systemd/resolve/stub-resolv.conf işaret etmesi gerekiyor. İşaret etmiyorsa düzelte:
sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
tcpdump ile DNS trafiğini izle
Sorguların gerçekten TLS üzerinden mi gittiğini kontrol etmek için port 853'te paket yakala:
sudo tcpdump -i any port 853 -v
TLS el sıkışması ve şifreli DNS sorgularını görmeni beklemeliyim. Açık DNS sorgularının port 53 üzerinden hosttan çıkışı görmemeli, açıkça izin vermediğin sürece.
Yaygın pułaplar
- Yerel DNS geçersiz kılmaları yoksayılıyor:
/etc/hostsveya yerel dnsmasq kullanıyorsan, systemd-resolved bunları atlayabilir.DNSStubListenerayarını değiştir veyaresolved.confiçindeListenDNSkullanarak başka bir arayüze bağla. - Yeniden başlatmada DNS bozuluyor: Genellikle
/etc/resolv.confüzeri yazma işlemi nedeniyle olur. NetworkManager dispatcher komut dosyası veya systemd path birimiyle bu sembolik bağın korunmasını sağlayabilirsin. - Cloudflare zaman aşımı: Nadiren 1.1.1.1#cloudflare-dns.com zaman aşımı yapar. Güvenilir bir yedek olarak 9.9.9.9#dns.quad9.net'i tut.
Son düşünceler
systemd-resolved'ı DoT ve DNSSEC için kullanmak, ek proxy veya ajans eklemeden DNS'yi şifrelemek ve doğrulamak için en basit yöntemlerden biri. Hafif, işletim sistemiyle entegre edilmiş ve başsız sunucular, konteynerler ve sanal makinelerde iyi çalışıyor. Bu yapılandırmayı ayıktaki düğümler ve iç altyapımda aylarırdan beri kullanıyorum — sızdırmazlık, doğrulama bypass'i yok ve journalctl üzerinden net denetim izleri elde ediyorum.
Güvenilir olmayan ağlara açık Linux sistemleri yönetiyorsan, bu temel seviye bir önlem olmalı. Hizmetler arası iletişimi güvence altına alma konusunda daha fazla bilgi için, [Linux tc VoIP DSCP işaretleme](https://furkanikkan.com/urun/linux-tc-ile-voip-icin-dscp-ef-isaretleme-ve-oncelik-kuyrugu-yapilandirmasi-91) adlı önceki yazıma bakabilirsin.
Kapak görseli: USDAgov · PDM (Openverse / kamu malı) · https://www.flickr.com/photos/41284017@N08/52288964396
