Teknik derinlik
Windows Server DDoS Sıkılaştırma: Neyi Ayarlarsınız, Neyi İşletim Sistemi Zaten Halleder
Son güncelleme: Ağustos 2026 · Autotuning şablonları, WFP, http.sys ve RSS · Okuma süresi ~18 dk

Windows DDoS kayıt defteri tavsiyelerinin çoğu eskimiştir. SynAttackProtect ve TcpMaxHalfOpen gibi anahtarlar Server 2003'ten sonra kaldırıldı, çünkü yığın artık SYN saldırılarını otomatik karşılar. Gerçekte ayarladığınız şey farklıdır: TCP autotuning şablonu, Windows Filtering Platform sınırları, http.sys istek kuyruğu ve adaptör RSS. Kayıt defteriyle değil, PowerShell ve netsh ile doğrulanır.
Bu rehber, Windows Server host’unun kendisini, önünde herhangi bir cihaz olmadan, bir DDoS saldırısının durum ve istek tüketen kısmına karşı sertleştirmekle ilgilidir. Çoğu Windows rehberine göre kayıt defteri düzenlemesi tarafında bilerek daha kısadır, ve bunun tek bir sebebi vardır. Düzenlemelerin çoğu eskimiştir, uygulanması ise işe yaramamaktan zararlı olmaya kadar uzanır.
Windows DDoS sıkılaştırması hakkında bilinmeye değer en önemli şey, ne yapılmayacağıdır. Eski
rehberleri dolduran kayıt defteri anahtarları SynAttackProtect, TcpMaxHalfOpen,
TcpMaxHalfOpenRetried ve sabitlenmiş bir TcpWindowSize ya Windows Server 2003’ten sonra
kaldırıldı ya da autotuning tarafından ezildi. Bunları yazmak en iyi ihtimalle hiçbir şey yapmaz.
Bir pencere boyutunu sabitlemek ise yığının bağlantı başına ayarlamasını fiilen bozar.
| Cihaz | Eski tavsiye (uygulamayın) | Neden geçersiz | Yerine ne yapılır |
|---|---|---|---|
| SynAttackProtect | Kayıt defterinde SynAttackProtect=2 yapın | Server 2003'ten sonra kaldırıldı; SYN koruması otomatiktir | netstat ile doğrulayın; gerekirse WFP'de oran sınırlayın |
| TcpMaxHalfOpen | Kayıt defterinde yarı açık bağlantıyı sınırlayın | Yığın bu değeri artık okumaz | Get-NetTCPConnection -State SynReceived ile gözleyin |
| TCP alım penceresi | TcpWindowSize değerini sabitleyin | Vista/2008'den beri autotuning bağlantı başına boyutlar | Set-NetTCPSetting şablonu kullanın, sabitlemeyin |
| Bağlantı sınırları | İşletim sistemi varsayılanına güvenin | Varsayılan cömerttir; kaynak başına hiçbir sınır yoktur | Kaynak adres başına WFP filtresi veya güvenlik duvarı kuralı |
Soldaki sütunun tamamı internetin biriktirdiği Windows 2003 folklorudur. Modern yığın çoğunu otomatikleştirdi. Kaldırılmış anahtarları yazmak hiçbir işe yaramaz, birkaç sabit değer ise autotuning'i ezerek durumu kötüleştirir.
0. Önce temel ölçüler: değiştirmeden önce sayaçları okuyun
Windows kendi durumunu /proc yerine performans sayaçları ve Get-Net* cmdlet’leri üzerinden
gösterir. Normal bir haftayı şunlardan kaydedin:
# TCP durumuna göre bağlantı sayısı (SynReceived satırı yarı açık backlog'unuzdur)
Get-NetTCPConnection | Group-Object -Property State | Sort-Object Count -Descending
# TCP yığını sayaçları: segment, reset, başarısız bağlantı
Get-Counter '\TCPv4\*' -SampleInterval 5 -MaxSamples 3
# Etkin bağlantı şablonu ve autotuning düzeyi
Get-NetTCPSetting -SettingName Internet | Format-List *
# Adaptör RSS durumu ve kuyruk sayısı
Get-NetAdapterRss | Format-Table Name, Enabled, NumberOfReceiveQueues
Bu çıktıyı saklayın. Aşağıdaki her yargı ona görelidir. “SynReceived sayısı yüksek” ancak normal hafta rakamına göre bir anlam taşır.
1. TCP yığını: kayıt defteri anahtarları değil, şablonlar
Modern Windows Server eski skaler TCP kayıt defteri değerlerini ayar yüzeyi olarak sunmaz. Bunun
yerine bağlantı türü başına bir şablon uygular, ve siz şablonu ayarlarsınız. Şablonlar
Internet, Datacenter, Datacenter Custom, Internet Custom ve Compat’tır.
# Etkin şablonun uyguladığı her ayarı gör
Get-NetTCPSetting -SettingName Internet
# Autotuning alım penceresi — ölçülmüş bir sebep olmadıkça 'normal'de bırakın
Set-NetTCPSetting -SettingName InternetCustom -AutoTuningLevelLocal Normal
# Autotuning'in eski bir sıkılaştırma betiğiyle kapatılmadığını doğrula (sık bir bulgu)
Get-NetTCPSetting | Format-Table SettingName, AutoTuningLevelLocal
netsh int tcp show global
Denetlenen bir Windows sunucusundaki en yaygın gerçek sorun eksik bir ayar değildir. Sorun,
autotuning’i netsh int tcp set global autotuninglevel=disabled ile kapatmış eski bir
sıkılaştırma betiğidir. O tek satır alım penceresini küçük sabit bir değerde tutar ve her meşru
bağlantıyı boğar. Yeniden açmak genelde tek başına en büyük iyileşmedir:
netsh int tcp set global autotuninglevel=normal
SYN seli koruması zaten otomatiktir ve desteklenen bir işletim sisteminde kayıt defterinden anlamlı biçimde iyileştirilemez. Onu yapılandırmaz, baş edip etmediğini doğrularsınız:
# Şu andaki yarı açık bağlantılar
(Get-NetTCPConnection -State SynReceived).Count
# Başarısız bağlantı denemeleri ve reset'ler, yığın sayaçlarından
Get-Counter '\TCPv4\Connection Failures','\TCPv4\Connections Reset'
Bir olay sırasında SynReceived sayısı on binlere doğru tırmanıyorsa cevap bir kayıt defteri anahtarı değildir. Cevap, aşağıda ele alınan WFP katmanında ya da bir üst katmanda kaynak başına bir sınırdır.
2. Windows Filtering Platform: kaynak başına sınırın yaşadığı yer
Linux kaynak başına oran sınırlamasını bir nftables dinamik kümesiyle yapar. Windows karşılığı Windows Filtering Platform içinde yaşar, ve çoğu operatör için onun erişilebilir yüzü bir güvenlik duvarı kuralıdır. nftables’ınki kadar temiz, yerleşik bir “kaynak başına saniyede N bağlantı” öğesi yoktur. Bu yüzden uygulamadaki kalıp, izlemeyle sürülen kapsamlı bir engelleme ile açık yüzeyi küçülten bağlantı güvenliği kurallarıdır.
# Belirli bir kötücül kaynağı engelle (otomatik bir yanıtlayıcının çağıracağı şey)
New-NetFirewallRule -DisplayName "DDoS-block-203.0.113.0/24" -Direction Inbound `
-RemoteAddress 203.0.113.0/24 -Action Block
# Bir servisi yalnızca ona erişmesi gereken adreslere kısıtla — saldırı yüzeyinde
# tek seferde en büyük azalma, ve hiçbir oran mantığı gerektirmez
New-NetFirewallRule -DisplayName "RDP-restrict" -Direction Inbound -Protocol TCP `
-LocalPort 3389 -RemoteAddress 10.0.0.0/8 -Action Allow
# Gerçekte neyin etkin olduğunu incele
Get-NetFirewallRule -Enabled True -Direction Inbound |
Where-Object Action -eq Allow | Format-Table DisplayName, Profile
Dürüst sınır şudur. Windows güvenlik duvarı tek başına, nftables kümesinin yaptığı gibi kaynak başına yeni bağlantıyı oran sınırlamaz. Bunun gerektiği yerde çözüm bir WFP callout sürücüsünden, üçüncü taraf bir katmandan, ya da her ölçekte gerçek cevap olan host’un önündeki şebeke katmanından gelir. Güvenlik duvarının DDoS dayanıklılığına en güçlü katkısı oran sınırlama değildir. Katkısı yüzey azaltmadır, yani her dinleyen portun yalnızca olması gereken yerden erişilebilir olmasını sağlamaktır.
İnternete bakmak zorunda olan servisler için bağlantı güvenliği (IPsec) kuralları, bir bağlantı uygulama kaynağı tüketmeden önce kimlik doğrulaması isteyebilir. Bu, anonim bir seli daha ucuz bir katmanda bir kimlik doğrulama hatasına çevirir:
Get-NetIPsecRule | Format-Table DisplayName, Enabled, Profile
3. http.sys: IIS’in önündeki çekirdek istek kuyruğu
Herhangi bir HTTP iş yükü için bir istek selinin çarptığı ilk kuyruk IIS değildir. O kuyruk
http.sys’tir, yani HTTP isteklerini bir işçi süreci görmeden önce kabul edip kuyruğa alan çekirdek
modundaki sürücüdür. Parametreleri HTTP servisi altında yaşar, ve kuyruğu IIS’in yapılandırdığı her
şeyden ayrı bir kaynaktır.
# Çekirdek istek kuyrukları ve derinlikleri
Get-Counter '\HTTP Service Request Queues(*)\CurrentQueueSize'
Get-Counter '\HTTP Service Request Queues(*)\RejectedRequests'
Anlaşılması gereken temel davranışlar istek kuyruğu uzunluğu, bağlantı zaman aşımı ve başlık bekleme zaman aşımıdır. Bir sayaç aksini kanıtlamadıkça çoğunlukla varsayılanda bırakılırlar. Başlık bekleme zaman aşımı, yavaş başlık saldırılarına (bir bağlantı açıp başlıkları bayt bayt gönderme) karşı http.sys düzeyindeki savunmadır. Sürücü, başlıklarını zaman aşımı içinde tamamlamayan bir bağlantıyı, IIS ona bir işçi ayırmadan önce düşürür.
IIS tarafındaki ayarlar (uygulama havuzu kuyruk uzunluğu, dinamik IP kısıtlamaları, istek filtreleme) ayrı bir katmandır ve kendi IIS sıkılaştırma rehberine sahiptir. Buradaki nokta, http.sys’in IIS’in altındaki kuyruk olduğudur. Bir site işçi doygunken ayakta kalabilir, çünkü http.sys emmektedir; ya da işçi boş görünürken çökebilir, çünkü http.sys reddetmektedir.
4. Receive Side Scaling: paket hızı savunması
Hat dolmadan önce, yüksek bir paket hızı bir işlemci çekirdeğini kesme işlerken yüzde yüze sabitlerken diğerleri boş durabilir. Windows’ta çözüm, gelen paket işlemeyi çekirdekler arasında dağıtan Receive Side Scaling’dir. Fiziksel NIC’lerde genelde açıktır. Sanallaştırılmış NIC’lerde ise sık sık kapalı ya da yetersiz kuyrukludur, ve bir Windows sanal makinesinin nominal bant genişliğinin çok altında bir paket hızı saldırısına sessizce yenilmesi tam o varsayılanda olur.
# RSS açık mı, kaç kuyruk var?
Get-NetAdapterRss -Name * | Format-Table Name, Enabled, NumberOfReceiveQueues, MaxProcessors
# Etkinleştir ve yeterli kuyruk ver (mevcut çekirdeklere göre)
Enable-NetAdapterRss -Name "Ethernet"
Set-NetAdapterRss -Name "Ethernet" -NumberOfReceiveQueues 8
# Test sırasında işlemci başına kesme yükünü izle — tek sıcak çekirdek RSS dağıtmıyor demektir
Get-Counter '\Processor(*)\% Interrupt Time' -SampleInterval 2 -MaxSamples 5
# Receive Segment Coalescing çıktıyı artırabilir ama gecikmeye duyarlı iş yükünü bozabilir; ölç
Get-NetAdapterRsc | Format-Table Name, IPv4Enabled, IPv6Enabled
Yük altında tek sıcak çekirdek, gerisi boşken, RSS’in işini yapmadığının imzasıdır. Bu, Linux’un
softnet_stat çıktısındaki üçüncü sütunun tırmanmasının birebir Windows karşılığıdır.
5. Uygulama katmanı bağlantı davranışı
İki host düzeyi öğe, üstteki web sunucusu ne olursa olsun onu destekler. TCP keep-alive ölü bağlantıları sezip geri alır, ve dinamik port aralığı host’un ne kadar giden/efemer bağlantı sürdürebileceğini belirler:
# Efemer port aralığı — host çok sayıda giden bağlantı yapıyorsa genişletin
netsh int ipv4 show dynamicport tcp
netsh int ipv4 set dynamicport tcp start=1024 num=64511
# TCP keep-alive bağlantı başına bir yığın ayarıdır; şablon onu taşır
Get-NetTCPSetting -SettingName Internet | Select-Object SettingName, *KeepAlive*
Yavaş bağlantı saldırıları nihayetinde işletim sistemiyle değil, web sunucusunun kendi zaman aşımlarıyla cevaplanır. Bunlar IIS için IIS rehberinde, Windows üzerinde nginx ya da Apache çalıştırıyorsanız o rehberlerde yaşar.
İzlemeye bağlanacak sayaçlar
Windows sıkılaştırması da Linux gibi hissedilmez, sayaçtan okunur. Şunları izleme sistemine bağlayın:
# Bir yanıtlayıcının çağırabileceği tek seferlik sağlık okuması
Get-Counter @(
'\TCPv4\Connection Failures',
'\TCPv4\Connections Reset',
'\HTTP Service Request Queues(_Total)\CurrentQueueSize',
'\HTTP Service Request Queues(_Total)\RejectedRequests',
'\Processor(_Total)\% Interrupt Time'
) -SampleInterval 5 -MaxSamples 1
# Yarı açık backlog tek bir sayı olarak
(Get-NetTCPConnection -State SynReceived).Count
Bunlar, bir saldırı sırasında Linux sayaçlarının cevapladığı soruyu cevaplar. Host mu daralıyor, hat mı doluyor?
Bu katmanın dürüst sınırı
Yukarıdaki her şey tek cümleye iner. Bir Windows Server, kendi bağlantı tablolarını, istek kuyruklarını ve çekirdek başına işlemesini tüketen saldırılara karşı savunulabilir. Bunun dışında iki durum vardır ve ikisi de host’ta çözülmez.
Birincisi hat doluluğudur. Erişim hattını aşan hacim Windows yığınına hiç ulaşmaz, ve hiçbir şablon, güvenlik duvarı kuralı ya da RSS kuyruğu bunu değiştirmez.
İkincisi, iyi dağıtılmış çekirdeklerin bile işleyebileceğinin ötesindeki paket hızıdır. RSS bu tavanı yükseltir ama kaldırmaz. Bu iki eşiğin üstünde konu sunucu değil, şebeke mimarisidir. Host sıkılaştırması sunucuyu bir üst katman devreye girene kadar ayakta tutar, ama o katman değildir, ve onu öyle saymak yanlış güven üretir.
Uygulama sırası
- Temel ölçüleri kaydedin (Bölüm 0): duruma göre bağlantılar, TCP sayaçları, şablon, RSS durumu.
- Autotuning’in eski bir betikle kapatılmadığını doğrulayın; kapalıysa açın. En yaygın tek kazanç budur.
- Güvenlik duvarı yüzeyini azaltın: her dinleyen port yalnızca olması gereken yerden erişilebilir olsun.
- RSS’in açık ve yeterli kuyruklu olduğunu doğrulayın, özellikle sanallaştırılmış NIC’lerde.
- Bir sayaç belirli bir darboğazı kanıtlamadıkça http.sys’i ve TCP şablonunu varsayılanda bırakın.
- Sayaçları izleme sistemine alarm olarak bağlayın.
Bu listede eksik olana dikkat edin: uzun bir kayıt defteri bölümü. Desteklenen bir Windows Server’da o bölüm, yirmi yıl önce yazılmış bir rehberin işaretidir.
Sık sorulan sorular
- Windows Server'ı DDoS'a karşı sertleştirmek Linux'tan zor mudur?
- Zor değil, farklıdır. Linux onlarca ayrı ayarlanabilir sysctl düğmesi sunar; Windows eşdeğer kararların çoğunu otomatikleştirmiş ve şablonların arkasına gizlemiştir. Bu, ayarlanacak daha az şey ve bozulacak daha az şey demektir, ama daha az ayrıntılı kontrol de demektir. İş, çekirdek parametrelerini ayarlamaktan Windows Filtering Platform ile http.sys'i yapılandırmaya ve autotuning'in gerçekten açık olduğunu, eski bir sıkılaştırma betiğiyle kapatılmadığını doğrulamaya kayar.
- Hangi kayıt defteri anahtarlarını gerçekten ayarlamalıyım?
- Neredeyse hiçbirini, ve mesele tam olarak budur. Eski rehberleri dolduran SYN saldırısı ve yarı açık bağlantı anahtarları kaldırıldı ve modern Windows Server tarafından yok sayılır. Ayarlanmaya değer istisnalar http.sys kuyruk davranışı için HTTP servis parametreleridir, ve bir ölçüm belirli bir kuyruğun darboğaz olduğunu göstermedikçe onları da varsayılanda bırakmak daha iyidir. Uzun bir kayıt defteri listesiyle açılan her rehberi Server 2003 için yazılmış sayın.
- Windows Filtering Platform'un buradaki rolü nedir?
- Kaynak başına oran sınırlaması Windows'ta asıl olarak WFP içinde yaşar. Windows güvenlik duvarı kuralları onun üstünde durur, ama DDoS için işe yarayan katman kaynak adres başına yeni bağlantıyı sınırlayan bir filtredir. Bunu New-NetFirewallRule ile bir güvenlik duvarı kuralı olarak, ya da daha ince kontrol için doğrudan bir WFP filtresi olarak ifade edersiniz. Linux'un nftables dinamik kümesine en yakın karşılıktır, ve o kural gibi az sayıda kaynaktan gelen sele karşı işe yarar, yayılmış bir sele karşı değil.
- http.sys bir DDoS için neden önemli?
- http.sys, HTTP isteklerini IIS görmeden önce kabul edip kuyruğa alan çekirdek modundaki sürücüdür, dolayısıyla kuyruğu bir istek selinin dolduracağı ilk yerdir. Uygulama havuzu kuyruk uzunluğu, bağlantı ve başlık zaman aşımları ve istek kuyruğu sınırı bu katmanda ayarlanır. Bir IIS sitesinin işçi süreci doygunken ayakta kalabilmesinin, ya da işçi boş görünürken çökmesinin sebebi budur. IIS'e özgü ayarlar ayrı bir rehbere aittir; buradaki nokta, http.sys'in IIS'in yapılandırdığı her şeyden ayrı bir kuyruk olduğudur.
- Adaptör RSS'in DDoS ile ilgisi var mı?
- Yüksek paket hızında var. Receive Side Scaling (RSS), gelen paket işlemeyi işlemci çekirdekleri arasında dağıtır. RSS kapalı ya da yanlış yapılandırılmışken bir paket seli tek çekirdeği yüzde yüze sabitler, diğerleri boş durur ve sunucu nominal kapasitesinin çok altında yanıt vermeyi keser. RSS'in açık ve yeterli kuyruğa sahip olduğunu doğrulamak, Linux'taki alım yolu ayarlamasının Windows karşılığıdır, ve sanallaştırılmış NIC'lerde en sık yanlış varsayılanda bırakılan öğedir.
- Bu ayarlar hacimsel bir saldırıyı durdurur mu?
- Hayır. Erişim hattını dolduran trafik Windows yığınına hiç ulaşmaz ve host üzerinde yapılandırdığınız hiçbir şey bunu değiştirmez. Buradaki her ayar durum ve istek tükenmesine karşıdır: bağlantı tabloları, http.sys kuyruğu, çekirdek başına paket işleme. Hattın üzerindeki hacim şebeke tarafının sorunudur ve sunucuda çözülmez.
- Saldırı olmadan bunların çalıştığını nasıl doğrularım?
- Test ortamında PowerShell sayaçları ve bir yük üreteciyle. Get-NetTCPConnection bağlantıları duruma göre gruplar, Get-Counter TCPv4 ve HTTP Service Request Queue sayaçlarını okur, artan hızda bağlantı açan bir araç ise hangi sayacın önce kımıldadığını gösterir. Önce kımıldayan o sayaç sizin gerçek eşiğinizdir. Üretimde ise aynı sayaçların temel ölçülerinden ayrılması izleme sistemine bağladığınız şeydir.
Yayım: Ağustos 2026
Bu rehber, üreticiler yeni modeller ve fiyatlandırma açıkladıkça güncellenir. Üreticileri nasıl karşılaştırıyoruz