İçindekiler

    Yazıyı Dinle

    Hazır
    Tarayıcınızın yerleşik ses sentezi özelliğini kullanır.

    Yazı Boyutu

    Küçük Aa
    Normal Aa
    Büyük Aa
    Çok Büyük Aa

    Kaydet

    📑

    Bu makaleyi daha sonra okumak için kaydedin

    Windows DNS Server’ın socket pool (UDP kaynak port havuzu) davranışı

    Windows DNS Server’ın socket pool (UDP kaynak port havuzu) davranışı
    Yazıyı dinlemek için oynat butonuna tıklayın

    Windows DNS Sunucusu’nun Gizli Kahramanı: Socket Pool ile Cache Saturation Saldırılarına Karşı Koymak

    Bir güvenlik duvarının günlüklerinde veya ağ izleme araçlarınızda hiç, Windows DNS Sunucunuzdan çıkan, sürekli değişen kaynak port numaralı DNS sorguları gördünüz mü? Bu, rastgele bir davranış değil; bu, Microsoft'un **"Socket Pool"** (Yuva Havuzu) adı verilen akıllı ve proaktif bir güvenlik mekanizmasının iş başındaki işaretidir.

    Peki nedir bu Socket Pool, ne işe yarar ve neden önemsemelisiniz? Gelin, DNS güvenliğinin bu önemli bileşenini birlikte inceleyelim.

    Temel Problem: DNS Önbellek Zehirlenmesi (Cache Poisoning)

    Sorunu anlamak için önce tehdidi tanıyalım. Klasik bir DNS Cache Poisoning (önbellek zehirlenmesi) saldırısında, bir saldırgan hedef DNS sunucusuna, *"google.com'un IP adresi 1.2.3.4'tür"* gibi sahte bir cevap göndermeye çalışır.

    DNS, UDP üzerinde çalışan istemci-istemci olmayan (stateless) bir protokoldür. Sunucu bir sorgu gönderdiğinde, gelen cevabın hangi sorguya ait olduğunu anlamak için üç bilgiye bakar:
    1.  Hedef IP Adresi** (Sunucunun kendi IP'si)
    2.  Hedef Port** (Genellikle standart 53)
    3.  DNS Sorgu Kimliği (Transaction ID - TXID)** - 16 bitlik rastgele bir sayı

    Saldırgan, sunucunun gönderdiği sorguyu görürse (veya tahmin ederse), kaynak IP'si ve portunu taklit ederek (*spoofing*), doğru TXID'ye sahip sahte bir cevap gönderebilir. Eğer bu sahte cevap, gerçek cevaptan önce sunucuya ulaşırsa, sunucu zehirlenmiş veriyi önbelleğine alır ve sonraki tüm kullanıcıları yanlış (ve genellikle kötü amaçlı) bir siteye yönlendirir.

    Buradaki zayıf nokta, **kaynak portunun sabit olmasıydı.** Geleneksel olarak DNS sunucuları, recursive sorgularını her zaman 53. kaynak portundan gönderirdi. Bu, saldırganın tahmin etmesi gereken değişkenleri sadece TXID (65.536 olasılık) ile sınırlıyordu.

    Çözüm: Socket Pool (Yuva Havuzu) Devreye Giriyor

    Microsoft, bu güvenlik açığını kapatmak için Windows Server 2008 R2 ve sonrasında **Socket Pool** özelliğini getirdi. Mantığı basit ama etkilidir:

    DNS Sunucusu, recursive sorgularını gönderirken artık sabit bir kaynak portu (53) kullanmak yerine, önceden ayrılmış rastgele bir port havuzundan dinamik olarak bir port seçer.

    Bu nasıl çalışır?
    1.  DNS Sunucusu hizmeti başladığında, işletim sistemi tarafından belirlenen bir aralıktan (varsayılan olarak 49152-65535) binlerce rastgele kaynak portu "rezerve eder". Buna **Socket Pool** denir.
    2.  Sunucu her yeni bir recursive sorgu gönderdiğinde, bu havuzdan rastgele bir kaynak portu seçer ve sorguyu o port üzerinden gönderir.
    3.  Gelen cevabın, doğru hedef IP, doğru hedef port **ve** doğru kaynak porta gelmesi gerekir.

    Bu Neden Bu Kadar Etkili?

    Socket Pool'ün gücü, saldırganın başarı şansını katlanarak düşürmesinden gelir. Artık saldırganın sadece TXID'yi değil, aynı zamanda **kullanılan rastgele kaynak portu** da tahmin etmesi gerekir.

    • Tahmin Edilmesi Gereken Olasılık Uzayı:
      • DNS Sorgu Kimliği (TXID): 16 bit = **65.536** olasılık
      • Socket Pool Portu: Havuz boyutuna bağlı. Varsayılan olarak ~**11.000** port (örneğin, 2500 ile 30000 arası havuz boyutları yaygındır).
    • Toplam Olasılık:** 65.536 (TXID) x 11.000 (Port) = **720 milyondan fazla** olası kombinasyon!

    Bu, saldırganın başarı şansını astronomik seviyelerde düşürerek, saldırıyı pratikte uygulanamaz hale getirir.

    Socket Pool Yapılandırması ve Yönetimi

    DNS 2016'nın Nasıl Dağıtılır ve Yapılandırılır'ının son iki bölümünde, gelişmiş DNS seçenekleri ve güvenliği ile devam edeceğiz.

    Bu bölüm neleri kapsar

    • DNS Soket Havuzu ve DNS Sunucu Önbellek Kilitlemesini Yapılandırın
    • DNS Kaydını Yapılandırma
    • Yanıt Hızı Sınırlandırması
    • Seçici Özyineleme ve DNS Sorgu Filtreleme
    • DNS Performans Ayarı

    Socket Pool, Windows DNS Sunucusu'nda varsayılan olarak etkindir ve çoğu durumda herhangi bir müdahaleye gerek kalmaz. Ancak, güvenlik gereksinimlerinize göre ince ayar yapabilirsiniz.

    Havuz Boyutunu Görüntüleme ve Değiştirme:
        Havuz boyutu, `MaxUserPort` ve `TcpTimedWaitDelay` gibi sistem kayıt defteri (`HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters`) ayarları tarafından dolaylı olarak belirlenir. DNS Sunucusu, bu aralıktan rastgele portlar seçer.

        Ancak, DNS Server hizmetinin kendine özgü bir yapılandırması da vardır. PowerShell kullanarak mevcut Socket Pool boyutunu görebilir ve değiştirebilirsiniz:

        

    Varsayılan olarak, socketpoolsize 2500'dür ve bunu dnscmd /info /socketpoolsize komutuyla kontrol edebiliriz

    Mevcut Socket Pool durumunu görüntüleme
    Get-DnsServerSocketPool
    Socket Pool boyutunu 3000 olarak ayarlama
    Set-DnsServerSocketPool -SocketPoolSize 3000

    Varsayılan olarak, socketpoolsize 2500'dür ve bunu dnscmd /info /socketpoolsize komutuyla kontrol edebiliriz


    Bunu değiştirmek isterseniz dnscmd /config /socketpoolsize — örneğin 5000 için > çalıştırarak yapabilirsiniz

    screenshot.2.jpg

    TimeToLive değeri süresi dolmadan önce gerçekleşebilir; bazıları saldırganın önbellek girişini üzerine yazması olabilir ya da saldırganın gerçek TimeToLive değerinin ne zaman dolduğunu görmek için sunucudan sürekli bilgi talep etmesiyle ve önbelleği kendi yanlış değeriyle hemen güncellesi olabilir. Önbellek kilitleme, önbellekte bulunan bu girişlere ek bir koruma katmanı ekler; çünkü bu girişlerin tüm TimeToLive değerinin bir yüzdesinde üzerine yazılmasını engeller. Varsayılan olarak, bu %100 olacak. TimeToLive değeri, gerçek girdi için o dönemin tamamı için üzerine yazılamaz. Bunu TimeToLive değerinin bir yüzdesine indirebilirsiniz, ancak %100 aslında varsayılan değerdir. Bunu koşarak kontrol edebilirsiniz

    dnscmd /info /cachelockingpercent

     

    screenshot.24.jpg

    Çoğu ortamda bunu asla ayarlamayacaksınız, çünkü varsayılan olarak yapılandırılmıştır, ancak bir nedenle önbellekteki bir kaydın üzerine yazılabileceği süreyi azaltmak isterseniz, bunu dnscmd /config /cachelockingpercent ve ardından belirli bir değerle, yani 50 veya 75 ile yapabilirsiniz, Önbellek kilitlenme yüzdesini ayarlayacağım.

    screenshot.25.jpg

    Kısacası, önbellek kilitleme, bilmeniz gereken ama muhtemelen asla ayarlanmayacak bir özellik.

     Not:Havuz boyutunu artırmak güvenliği daha da güçlendirir, ancak çok fazla artırmak nadir durumlarda kaynak tüketimini etkileyebilir. Varsayılan değerler genellikle optimaldir.

    Socket Pool Etkin mi? Nasıl Anlarım?

    En basit yolu, sunucunuzdan çıkan DNS sorgularını bir ağ analiz aracı (Wireshark gibi) ile incelemektir. Eğer recursive sorguların "Source Port" alanı sürekli değişiyor ve 1024'ten büyük rastgele değerler alıyorsa, Socket Pool aktif demektir.

    Bir Diğer Silah: Socket Pool Ekzoz Koruması (Socket Pool Exhaustion Protection)

    Socket Pool'a ek olarak, Windows Server 2012 R2 ve sonrasında bir başka akıllı özellik daha geldi: **Socket Pool Exhaustion Protection**.

    Saldırganlar, havuzdaki portları "tüketmeye" çalışabilir. Sunucu her sorgu için yeni bir socket açar. Eğer saldırgan çok sayıda sahte sorgu gönderip sunucuyu sürekli recursive sorgu göndermeye zorlarsa, havuzdaki kullanılabilir portlar tükenebilir.

    Bu koruma mekanizması, sunucunun aşırı yük altında olduğunu algıladığında, belirli bir süre için aynı kaynak portunu yeniden kullanmaya başlar. Bu, performansı ve hizmet sürekliliğini korumak için tasarlanmış bir davranıştır. Saldırı durumu sona erdiğinde, sunucu normal, rastgele port kullanımına geri döner.

     

    1. SocketPoolSize = 0

     
    reg add "HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters" /v SocketPoolSize /t REG_DWORD /d 0 /f

    Ne işe yarar?

    Windows DNS Server, DNS sorguları için rastgele kaynak port kullanır. Bu davranış DNS Cache Poisoning saldırılarını önlemek içindir.

    SocketPoolSize, DNS Server’ın kullanabileceği port sayısını belirler.

    • 0 → Socket pool tamamen kapatılır.

    • DNS Server tek bir statik port (genelde 53 veya küçük bir port aralığı) kullanmaya başlar.

    Bu ne anlama gelir?

    • Güvenlik ciddi şekilde azalır.

    • DNS kaynak port randomization kapalı olur.

    • DNS spoofing / cache poisoning saldırıları çok daha kolay hale gelir.

    Kısaca: DNS Server “rasgele port kullanma” özelliğini kaybeder.

    SocketPoolExcludedPortRanges = "1-60000"

     
    reg add "HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters" /v SocketPoolExcludedPortRanges /t REG_MULTI_SZ /d "1-60000" /f

    Ne işe yarar?

    Bu ayar, socket pool tarafından kullanılmaması gereken UDP port aralıklarını tanımlar.

    Burada:

    • 1-60000 aralığı dışlanmış.

    • Yani DNS Server bu portları kullanamaz.

    Bu ne anlama gelir?

    • 1–60000 arası tüm UDP portları yasaklanınca DNS Server’ın kullanabileceği sadece 60001–65535 arası kalıyor.

    • Ancak SocketPoolSize=0 olduğundan bu havuz zaten devre dışı.

    Bu durumda DNS Server:

    • Ya tek bir port kullanır,

    • Ya da çoğu zaman başlatılamaz / çalışamaz, event log'da socket bind hataları verir.

    Bu iki ayar bir araya gelince ne olur?

    • SocketPoolSize=0 → DNS rastgele port kullanamaz
    • 1–60000 dışlandı → neredeyse tüm portlar yasak
    • Geriye sadece 60001–65535 arası küçük bir alan kalır (ama pool zaten kapalı)

    Bu durum:

    • Çoğu yapılandırmada DNS Server’ın doğru çalışmamasına

    • UDP port bind hatalarına (Event ID 408, 404, 4010)

    • DNS sorgularının cevap verememesine

    • Çok yüksek güvenlik zafiyeti oluşmasına
      sebep olur.

    Bu ayarlar neden yapılır?

    Genelde yanlışlıkla, hatalı bir güvenlik talimatından veya "tüm portları blokla" gibi düşüncelerden dolayı.

    Bazı durumlarda ise:

    • Firewall’da özel bir saldırı testi

    • IDS/IPS davranışı gözlemlemek için

    kısmi olarak yapılır; ama üretim DNS sunucusunda kesinlikle kullanılmaz.

    Önerilen güvenli değerler (Microsoft Standartları)

    SocketPoolSize = 2500    (varsayılan: 2500)
    SocketPoolExcludedPortRanges = boş bırak / sadece çakışan portları dışla
    
     
    DNS Ayarlarını Varsayılan Yap (Microsoft Recommended)
    1) SocketPoolSize varsayılan: 2500
     
    reg add "HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters" /v SocketPoolSize /t REG_DWORD /d 2500 /f
    2) SocketPoolExcludedPortRanges temizle (varsayılan: boş)
     
    reg delete "HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters" /v SocketPoolExcludedPortRanges /f

    DNS Servisini Yeniden Başlat

    Ayarların etkin olması için DNS servisini yeniden başlat:

     
    net stop dns net start dns

    veya PowerShell:

     
    Restart-Service DNS

    DNS Kaydını Yapılandırma

    DNS sunucusunu her DNS sunucusu ayarı değiştirildiğinde, her DNS bölgesi ayarı değiştirildiğinde veya DNS kaynak kaydı değiştirildiğinde olay günlüğüne olay yazacak şekilde yapılandırabilirsiniz. Şimdi, yüksek güvenlikli ortamlarda DNS sunucunuzda neler olup bittiğini takip etmek istediğinizde, kesinlikle kayıt işlemlerinin etkin olması gerekir.

    DNS kayıtlarının yapılandırılabileceği iki farklı yer vardır; DNS sunucunuzdan almaya çalıştığınız bilgi türüne bağlı olarak, her ikisi de sunucu adının Özellikleri altında yapılandırılmıştır; ilki Olay Kaydı sekmesidir. Şimdi Olay Kaydı, bu aslında DNS sunucusunda olan idari ve büyük ölçekli olayları kaydedecek. Tüm olayları, olayları ve uyarıları yapılandırabilirsiniz; sadece hata veya hiç etkinlik yok ve bunları DNS servislerini çalıştıran sunucunun Windows Olay Günlüğü'nde bulacaksınız. Bunlar da büyük ölçekli etkinliklerdir.

     screenshot.26.jpg

     

    Hata Kaydı

    DNS istemleyicileriniz ile DNS sunucunuz arasındaki iletişimi biraz daha derinlemesine incelemeniz gerekebilir ve bunu nasıl yapabileceğiniz, bilgi kaydı olan Debug Logging sekmesi altındadır; bu sekme bilgileri olay günlüğüne kaydetmiyor. Bunun yerine, belirli bir dosya yolu ve ismine kaydeder. Bu cihaz varsayılan olarak devre dışı bırakılıyor çünkü çok gürültülü oluyor ve çok fazla bilgi üretiyor. Genellikle, paket yönü, protokol türü ve içerik gibi tam olarak aradığınız bilgileri belirlemek istersiniz ve kayıtlarınızı mümkün olduğunca temiz tutmak için belirli IP adreslerine de uyarlamak isteyebilirsiniz. Şaşırtıcı bir şekilde, bazen bir sunucuda hata ayıklama girişi yapmanız gerekecek. Bu, göçler olduğunda, belirli bir bölgenin terk edilip edilmediğini belirlemeye çalışıldığında ve o bölgedeki kaynaklar hakkında bilgi talep etmeye çalışan müşterilerin olmadığında oldukça yaygın olarak gerçekleşebilir. Bir bölgeyi devre dışı bırakmak istiyorsanız, o bölgede hâlâ bilgiye ihtiyacı olan birinin olup olmadığını belirlemek için. Bu Hata Hata Kaydı sekmesi, hangi müşterilerin hangi bilgileri talep ettiğine dair uzun bir bilgi listesini sunduğu için bu bilgileri bulmak için en iyi yerdir.

    screenshot.27.jpg

    Ne oldu şimdi?

    • DNS rastgele kaynak port kullanmaya geri döndü → Güvenlik tekrar sağlandı

    • Tüm port engellemeleri temizlendi

    • DNS Server artık port bind hatası vermez

    • Cache poisoning riskleri minimuma iner

    DNS Registry Kontrol & Otomatik Fix Scripti (PowerShell)

    <#  
        DNS Registry Health Check & Auto-Fix Script
        Checks for:
        - SocketPoolSize
        - SocketPoolExcludedPortRanges
        - DNS port bind issues
        - Non-default high-risk settings
        - https://ondernet/net
    
    #>
    
    Write-Host "=== DNS Registry Health Check Başladı ===" -ForegroundColor Cyan
    
    $RegPath = "HKLM:\SYSTEM\CurrentControlSet\Services\DNS\Parameters"
    
    # SocketPoolSize kontrol
    $SocketPoolSize = Get-ItemProperty -Path $RegPath -Name "SocketPoolSize" -ErrorAction SilentlyContinue
    
    if ($SocketPoolSize) {
        if ($SocketPoolSize.SocketPoolSize -eq 0) {
            Write-Host "⚠ SocketPoolSize = 0 (TEHLİKELİ)" -ForegroundColor Red
            $FixSocket = $true
        }
        elseif ($SocketPoolSize.SocketPoolSize -lt 1024) {
            Write-Host "⚠ SocketPoolSize çok düşük: $($SocketPoolSize.SocketPoolSize)" -ForegroundColor Yellow
            $FixSocket = $true
        }
        else {
            Write-Host "✔ SocketPoolSize normal: $($SocketPoolSize.SocketPoolSize)" -ForegroundColor Green
        }
    }
    else {
        Write-Host "⚠ SocketPoolSize bulunamadı. Varsayılana çekilecek." -ForegroundColor Yellow
        $FixSocket = $true
    }
    
    # SocketPoolExcludedPortRanges kontrol
    $Excluded = Get-ItemProperty -Path $RegPath -Name "SocketPoolExcludedPortRanges" -ErrorAction SilentlyContinue
    
    if ($Excluded) {
        Write-Host "⚠ Port dışlama aktif: $($Excluded.SocketPoolExcludedPortRanges)" -ForegroundColor Red
        $FixRanges = $true
    }
    else {
        Write-Host "✔ Port dışlama ayarı yok (normal)." -ForegroundColor Green
    }
    
    # Fix işlemine başla
    if ($FixSocket -or $FixRanges) {
        Write-Host "`n=== Düzeltme İşlemi Başlıyor ===" -ForegroundColor Cyan
        
        if ($FixSocket) {
            Write-Host "→ SocketPoolSize varsayılan değere (2500) çekiliyor..." -ForegroundColor Yellow
            reg add "HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters" /v SocketPoolSize /t REG_DWORD /d 2500 /f | Out-Null
        }
    
        if ($FixRanges) {
            Write-Host "→ SocketPoolExcludedPortRanges temizleniyor..." -ForegroundColor Yellow
            reg delete "HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters" /v SocketPoolExcludedPortRanges /f | Out-Null
        }
    
        Write-Host "DNS servisi yeniden başlatılıyor..." -ForegroundColor Yellow
        Restart-Service DNS
    
        Write-Host "✔ Düzeltme Tamamlandı!" -ForegroundColor Green
    }
    else {
        Write-Host "✔ Sistem sağlıklı. Düzeltme gerekmedi." -ForegroundColor Green
    }
    
    Write-Host "=== İşlem Bitti ===" -ForegroundColor Cyan
    

    Script Ne Yapıyor?

    Kontrol Sorun Çözüm
    SocketPoolSize 0 veya çok düşük 2500’e çeker
    ExcludedPortRanges Aralık tanımlı Tamamen siler
    DNS’yi yeniden başlatır Ayarlar aktif olur

    PowerShell’i Run as Administrator aç:

    powershell -ExecutionPolicy Bypass -File DNS-Fix.ps1
    
     

    DNS Sağlık Kontrol Scripti

    ✔ Log tutar
    ✔ Mail gönderir
    ✔ GUI ekranı ile sonuçları gösterir

    Add-Type -AssemblyName PresentationFramework
    
    <# =========================================================
        DNS Advanced Checker  
        ✔ Registry Health Check  
        ✔ Loglama  
        ✔ Email Bildirimi  
        ✔ GUI Sonuç Ekranı
    ========================================================= #>
    
    # ======= Ayarlar (DÜZENLE) =======
    $LogPath = "C:\DNS-Fix-Logs"
    $SmtpServer = "smtp.domain.com"
    $SmtpFrom = "dns-monitor@domain.com"
    $SmtpTo   = "admin@domain.com"
    $MailEnable = $false     # Mail gönderimi için: $true yap
    # ==================================
    
    if (!(Test-Path $LogPath)) { New-Item -ItemType Directory -Path $LogPath | Out-Null }
    $LogFile = "$LogPath\DNS_Check_$(Get-Date -Format 'yyyyMMdd_HHmmss').log"
    
    function Log {
        param($msg)
        $time = (Get-Date -Format "yyyy-MM-dd HH:mm:ss")
        $line = "[$time] $msg"
        Add-Content -Path $LogFile -Value $line
        Write-Host $line
    }
    
    Log "DNS Sağlık Kontrolü Başladı"
    
    $RegPath = "HKLM:\SYSTEM\CurrentControlSet\Services\DNS\Parameters"
    $FixNeeded = $false
    $Report = ""
    
    # ========== 1) SocketPoolSize ==========
    try {
        $SocketPool = Get-ItemProperty -Path $RegPath -Name "SocketPoolSize" -ErrorAction Stop
        if ($SocketPool.SocketPoolSize -eq 0) {
            $Report += "⚠ SocketPoolSize = 0 (Tehlikeli)`n"
            Log "Tehlike: SocketPoolSize = 0"
            $FixSocket = $true
        }
        elseif ($SocketPool.SocketPoolSize -lt 1024) {
            $Report += "⚠ SocketPoolSize düşük ($($SocketPool.SocketPoolSize))`n"
            Log "Uyarı: SocketPoolSize düşük"
            $FixSocket = $true
        }
        else {
            $Report += "✔ SocketPoolSize normal ($($SocketPool.SocketPoolSize))`n"
            Log "SocketPoolSize normal"
        }
    }
    catch {
        $Report += "⚠ SocketPoolSize bulunamadı`n"
        Log "SocketPoolSize kayıt anahtarı yok"
        $FixSocket = $true
    }
    
    # ========== 2) SocketPoolExcludedPortRanges ==========
    try {
        $Ranges = Get-ItemProperty -Path $RegPath -Name "SocketPoolExcludedPortRanges" -ErrorAction Stop
        $Report += "⚠ Port dışlama aktif: $($Ranges.SocketPoolExcludedPortRanges)`n"
        Log "Port dışlama bulundu"
        $FixRanges = $true
    }
    catch {
        $Report += "✔ Port dışlama ayarı yok (Normal)`n"
        Log "Port dışlama yok"
    }
    
    # ========== Düzeltme ==========
    if ($FixSocket -or $FixRanges) {
        $FixNeeded = $true
        Log "Düzeltme işlemleri başlatılıyor..."
    
        if ($FixSocket) {
            Log "SocketPoolSize 2500 olarak ayarlanıyor"
            reg add "HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters" /v SocketPoolSize /t REG_DWORD /d 2500 /f | Out-Null
        }
    
        if ($FixRanges) {
            Log "SocketPoolExcludedPortRanges siliniyor"
            reg delete "HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters" /v SocketPoolExcludedPortRanges /f | Out-Null
        }
    
        Log "DNS servisi yeniden başlatılıyor..."
        Restart-Service DNS
        Log "Düzeltme tamamlandı"
        $Report += "`n✔ Düzeltme yapıldı ve DNS yeniden başlatıldı.`n"
    }
    else {
        Log "Düzeltme gerekmiyor."
        $Report += "`n✔ Sistem tamamen sağlıklı.`n"
    }
    
    # ========== Email Gönderimi ==========
    if ($MailEnable -eq $true) {
        try {
            Log "Mail gönderiliyor..."
            Send-MailMessage -To $SmtpTo -From $SmtpFrom -Subject "DNS Health Report" -Body $Report -SmtpServer $SmtpServer
            Log "Mail başarıyla gönderildi."
        }
        catch {
            Log "Mail gönderilemedi: $_"
        }
    }
    
    # ========== GUI Ekranı ==========
    [System.Windows.MessageBox]::Show($Report, "DNS Sağlık Raporu", "OK", "Information")
    
    Log "DNS Sağlık Kontrolü Bitti"
    

    Script Ne Yapar?

    Registry taraması

    • SocketPoolSize kontrol

    • ExcludedPortRanges kontrol

    • Risk seviyelerini analiz eder

    Log dosyası oluşturur

    Şuraya kaydeder:

     
    C:\DNS-Fix-Logs\DNS_Check_YYYYMMDD_HHMMSS.log

    Mail gönderir

    SMTP ayarlarını doğru girersen:

     
    $MailEnable = $true

    raporu sana mail atar.

    GUI popup ile sonuç gösterir

    Windows üzerinde MessageBox açılır.

    Windows DNS Sunucusu'ndaki Socket Pool, sessiz sedasız çalışan, arka planda DNS altyapınızı modern tehditlere karşı koruyan hayati bir güvenlik katmanıdır. Sadece bir kayıt defteri anahtarının veya PowerShell komutunun ardındaki bu basit fikir, DNS önbellek zehirlenmesi gibi kritik bir saldırı vektörünü neredeyse imkansız hale getirmiştir.

    Bir sonraki sefer güvenlik duvarı log'larınızı incelerken, o değişken kaynak portlarını gördüğünüzde, içiniz rahat olsun. Bu, Windows'un sizin için arka planda güvenliğinizi sağlamlaştırdığının bir göstergesidir.

    Derinlemesine Analiz için bu yazıma bakınız

    DNS Performans Ayarı

    Şimdi DNS sunucunuzun çok yüksek seviyede çalışmasını isteyebilirsiniz. Kutudan çıktığı gibi, Windows Server DNS kullanıldığı trafiğin büyük çoğunluğunu yönetiyor. Çoğu organizasyon için saniyede birkaç yüz ya da belki birkaç bin sorgu olabilir ve sadece bununla uğraşıyorsanız, sorun yok. Saniyede on binlerce ya da yüzbinlerce sorguya bakarsanız, DNS sunucu performans ayarınızı düşünmeye başlıyorsunuz, bu yüzden Microsoft'un DNS sunucusunun performans ayarı konusunda verdiği birkaç tavsiye var. İlki, özyinelemeyi devre dışı bırakıyorsunuz.

    DNS sunucunuzun performans ayarlaması açısından iyi bir diğer ipucu ise, başka hiçbir şeye gerçekten etkisi olmadan uygulayabileceğiniz bir diğer iyi ipucu, DNS sunucu sorgusunu kabul eden arayüz IP adresi için 53 portunda UDP trafiğine izin veren açık bir firewall kuralı oluşturmak. Bunu yapmak güvenlik duvarının CPU kullanımını azaltır. Çünkü varsayılan kural, UDP port 53 kadar açık değil. Temelde TCP port trafiğine izin veriyor. Ama gelip özel bir güvenlik duvarı kuralı oluşturursanız, trafik güvenlik duvarına düşer ve bu da DNS sunucunuzdaki CPU kullanımınızı azaltır.

    Eğer 12'den fazla işlemci çekirdeği olan bir DNS sunucunuz varsa, UDP iş parçacığı sayısını sekiz olarak ayarlamalısınız ve bunu HKLM\System\CurrentControlSet\ Services\DNS\Parameters\UdpRecvTreadCount kayıt defterini değiştirerek yapabilirsiniz. O yüzden kayıt kaydı anahtarını değiştir ve sekize ayarla. Çünkü 12'den fazla çekirdeğe sahip olduğunda UDP'nin ipliklerinin en iyi seviyesi bu olur. 12 çekirdekten az varsa, varsayılan olarak bırak.

    Microsoft'un DNS sunucu performans ayarı için verdiği diğer tavsiye ise ağ adaptör tamponlarını maksimuma göre yapılandırmak. Bunu Set-Network Adapter Gelişmiş Özellik- ,PowerShell Komut Set-Ağ Komutunu kullanarak yapabilirsiniz; burada ağ arayüzünüzün adını, Display Name'i Receive Buffers olarak ve Display Değerini Maksimum olarak belirtirsiniz. Bu, DNS Sunucunuzun mümkün olduğunca iyi çalışmasını istiyorsanız Alım Tamponlarını Maksimuma ayarlıyor.

    Önceki Yazı Ağ Sorunları ile başa çıkma
    Ağ Sorunları ile başa çıkma

    Bu kaynak, sistem y&ouml;neticilerine Linux tabanlı ağ sorunlarını hızlıca...

    Sonraki Yazı IAM mı PAM mı?
    IAM mı PAM mı?

    IAM mı PAM mı? İşte Sistem G&uuml;venliğinizin Anahtarı! Kurumsal dijital ...