AD DNS: Forward/Reverse Zone, Conditional Forwarder ve Scavenging
AD'nin bel kemiği olan DNS'i yapılandırıyoruz. AD-integrated zone'lar, reverse zone ve PTR kayıtları, forwarder ile conditional forwarder ve eski kayıtları temizleyen scavenging bu yazıda.
Önceki yazıda site, subnet ve site link'leri yapılandırarak AD'ye ağımızın fiziksel yapısını anlatmıştık. İstemcilerin hangi DC'ye gideceğini bulmasının arkasında ise tek bir servis var: DNS. Active Directory'de karşılaştığınız sorunların büyük bölümü aslında DNS sorunudur. Bu yazıda firma.local domain'inin DNS yapısını inceleyecek, reverse zone ekleyecek, dış çözümlemeyi düzenleyecek ve eski kayıtları otomatik temizleyen scavenging özelliğini güvenli şekilde açacağız.
AD-Integrated Zone'ları İncelemek
AD DS kurulumu sırasında DNS rolünü de kurduğumuz için firma.local zone'u otomatik oluştu. Bu zone Active Directory-integrated bir zone'dur; yani veriler ayrı bir dosyada değil, AD veritabanında tutulur ve AD replikasyonuyla tüm DNS sunucusu olan DC'lere dağıtılır. Mevcut zone'ları listeleyin:
Get-DnsServerZone -ComputerName DC01 | Select-Object ZoneName, ZoneType, IsDsIntegrated, ReplicationScope, DynamicUpdate
Çıktıda iki önemli zone göreceksiniz:
- firma.local: Domain'deki sunucu ve istemcilerin A kayıtları ile DC'leri bulmaya yarayan SRV kayıtları burada bulunur. Kapsamı Domain'dir.
- _msdcs.firma.local: DC locator için kritik kayıtları tutar ve forest genelinde replike edilir. Kapsamı Forest'tır.
AD-integrated zone'larda dinamik güncellemenin Secure olması gerekir. Böylece yalnızca domain'e kayıtlı bilgisayarlar kendi kayıtlarını oluşturabilir:
Set-DnsServerPrimaryZone -Name "firma.local" -DynamicUpdate Secure
Reverse Lookup Zone Oluşturmak
Kurulum reverse zone oluşturmaz. Reverse zone olmadan nslookup her açılışta "Can't find server name" uyarısı verir ve IP'den isim çözümlemesi yapan araçlar çalışmaz. 192.168.1.0/24 ve şube ağı için AD-integrated reverse zone'ları oluşturalım:
Add-DnsServerPrimaryZone -NetworkId "192.168.1.0/24" -ReplicationScope Domain -DynamicUpdate Secure
Add-DnsServerPrimaryZone -NetworkId "192.168.2.0/24" -ReplicationScope Domain -DynamicUpdate Secure
Bu komutlar 1.168.192.in-addr.arpa ve 2.168.192.in-addr.arpa zone'larını oluşturur. Mevcut istemcilerin PTR kayıtlarını hemen oluşturması için istemcide:
ipconfig /registerdns
Kayıt Eklemek
Statik IP kullanan sunucular ve servisler için A kaydını PTR ile birlikte ekleyebilirsiniz:
Add-DnsServerResourceRecordA -ZoneName "firma.local" -Name "intranet" -IPv4Address 192.168.1.30 -CreatePtr
Add-DnsServerResourceRecordCName -ZoneName "firma.local" -Name "dosya" -HostNameAlias "fs01.firma.local"
Get-DnsServerResourceRecord -ZoneName "firma.local" -Name "intranet"
Elle eklenen kayıtlar statiktir; zaman damgaları yoktur ve scavenging tarafından silinmez.
Forwarder ve Conditional Forwarder
DC'leriniz firma.local dışındaki bir adı, örneğin microsoft.com adresini çözmek zorunda kaldığında varsayılan olarak root hints sunucularına gider. Bunun yerine sorguları güvendiğiniz bir DNS sunucusuna yönlendirebilirsiniz:
Set-DnsServerForwarder -IPAddress 1.1.1.1, 8.8.8.8 -UseRootHint $true
Get-DnsServerForwarder
Forwarder ayarı AD ile replike edilmez; her DNS sunucusunda ayrı ayrı yapmanız gerekir. DC02 için komutu -ComputerName DC02 ile tekrar çalıştırın.
Conditional forwarder ise yalnızca belirli bir domain'e ait sorguları belirli sunuculara yönlendirir. Örneğin iş ortağınız partner.local ile VPN üzerinden bağlıysanız:
Add-DnsServerConditionalForwarderZone -Name "partner.local" -MasterServers 10.20.0.10, 10.20.0.11 `
-ReplicationScope Forest
ReplicationScope parametresi sayesinde conditional forwarder AD'de saklanır ve tüm DC'lere otomatik dağıtılır. Bu, normal forwarder'a göre önemli bir avantajdır.
Scavenging ile Eski Kayıtları Temizlemek
Dinamik olarak kaydedilen her kaydın bir zaman damgası vardır. Bilgisayar ağdan ayrıldığında veya adı değiştiğinde eski kayıt kalır ve zamanla DNS'te yanlış IP'yi gösteren kayıtlar birikir. Scavenging, belirli bir süre güncellenmeyen dinamik kayıtları otomatik olarak siler. İki süre kavramını bilmeniz gerekir:
- No-Refresh Interval: Kayıt oluşturulduktan sonra zaman damgasının yenilenmediği süredir. Gereksiz replikasyon trafiğini önler. Varsayılan 7 gündür.
- Refresh Interval: No-refresh süresi bittikten sonra kaydın yenilenmesi için tanınan süredir. Bu süre içinde de yenilenmeyen kayıt silinmeye aday olur. Varsayılan 7 gündür.
Altın kural: No-Refresh + Refresh toplamı, DHCP kira süresinden uzun olmalıdır. DHCP yazısında kira süresini 8 gün yapmıştık; 7 + 7 = 14 gün güvenli bir değerdir.
Önce zone seviyesinde aging'i açın:
Set-DnsServerZoneAging -Name "firma.local" -Aging $true -NoRefreshInterval 7.00:00:00 -RefreshInterval 7.00:00:00
Set-DnsServerZoneAging -Name "1.168.192.in-addr.arpa" -Aging $true -NoRefreshInterval 7.00:00:00 -RefreshInterval 7.00:00:00
Ardından scavenging işlemini yalnızca bir DNS sunucusunda çalıştırın. Böylece sorun yaşandığında hangi sunucunun kayıt sildiğini bilirsiniz:
Set-DnsServerScavenging -ComputerName DC01 -ScavengingState $true -ScavengingInterval 7.00:00:00
Get-DnsServerScavenging -ComputerName DC01
Aging açıldıktan sonra ilk scavenging için sunucu bir refresh süresi kadar bekler. Bu, açtığınız gün tüm kayıtların silinmesini engelleyen bir güvenlik önlemidir. Elle tetiklemek isterseniz:
Start-DnsServerScavenging -ComputerName DC01 -Force
DNS Sağlığını Test Etmek
Resolve-DnsName -Name "_ldap._tcp.dc._msdcs.firma.local" -Type SRV
Resolve-DnsName -Name 192.168.1.10
nslookup fs01.firma.local
dcdiag /test:dns /v /s:DC01
nltest /dsregdns
nltest /dsregdns komutu, DC'nin SRV kayıtlarını DNS'e yeniden kaydetmesini sağlar. DC kayıtları silindiğinde veya bozulduğunda ilk başvurulacak komuttur. Netlogon servisini yeniden başlatmak da aynı etkiyi yaratır.
Sorun giderirken istemci ile sunucu tarafını ayrı ayrı düşünün. Resolve-DnsName komutuna -Server DC02 ekleyerek sorguyu doğrudan belirli bir DNS sunucusuna gönderebilir, böylece iki DC'nin aynı cevabı verip vermediğini karşılaştırabilirsiniz. Cevaplar farklıysa sorun büyük olasılıkla AD replikasyonundadır; önceki yazılarda gördüğümüz repadmin /replsummary komutuyla kontrol edin.
Zone Transferlerini Kısıtlamak
AD-integrated zone'lar verilerini AD replikasyonuyla dağıttığı için klasik zone transfer mekanizmasına ihtiyaç duymaz. Ancak zone transfer açık kalırsa, ağınıza erişen biri firma.local içindeki tüm sunucu adlarını ve IP adreslerini tek bir sorguyla listeleyebilir. Bu, saldırganlar için hazır bir ağ haritası demektir. Transferleri kapatın veya yalnızca bilinen ikincil sunuculara izin verin:
Set-DnsServerPrimaryZone -Name "firma.local" -SecureSecondaries NoTransfer
Get-DnsServerZone -Name "firma.local" | Select-Object ZoneName, SecureSecondaries
Aynı değerlendirmeyi reverse zone'lar için de yapın. Ayrıca DNS sunucusunun hangi arayüzlerde dinlediğini kontrol etmek faydalıdır. Birden fazla ağ kartına sahip DC'lerde DNS'in yalnızca iç ağ arayüzünde dinlemesi gerekir; bunu Get-DnsServerSetting -All | Select-Object ListeningIPAddress ile görebilirsiniz.
Sık Karşılaşılan Hatalar
- DC'lerin veya istemcilerin dış DNS kullanması: İstemciler
firma.local'u çözemez, domain'e katılma ve oturum açma başarısız olur. Dış çözümleme için forwarder kullanın, istemcilere yalnızca DC'leri dağıtın. - Scavenging'i her sunucuda açmak: Hangi sunucunun kayıt sildiğini takip edemezsiniz. Tek bir sunucuda açın.
- Aralıkları DHCP kira süresinden kısa tutmak: Hâlâ ağda olan istemcilerin kayıtları silinir.
- Önemli bir sunucunun kaydının kaybolması: Statik IP'li sunucu kaydını dinamik olarak oluşturmuştur. Sunucular için kaydı statik yapın veya sunucunun düzenli kaydettiğinden emin olun.
- Forwarder'ın DC02'de olmaması: Forwarder ayarı replike edilmez. Her DNS sunucusunda ayrıca yapılandırın.
- Kayıtların güncellenmemesi: Önceki çözümleme önbellekte kalmış olabilir. İstemcide
ipconfig /flushdns, sunucudaClear-DnsServerCachekullanın.
Bir sonraki yazıda Delegation of Control ile OU bazında yetki devrini uygulayacağız.