DDoS (Dağıtık Hizmet Engelleme), bir hizmeti çok sayıda kaynaktan gelen istekle boğarak erişilemez hâle getirme saldırısıdır. "Dağıtık" olmasının anlamı şudur: trafik tek bir adresten gelmez, bu yüzden tek bir IP'yi engelleyerek çözemezsiniz.
Korunma yöntemini seçmeden önce hangi katmanın hedef alındığını anlamak gerekir; çünkü ikisi tamamen farklı yerlerde çözülür.
Ağ katmanı saldırıları (L3/L4)
Amaç, hattınızı doldurmaktır. Sunucunuzun bağlantı kapasitesi 1 Gbit ise, size 10 Gbit trafik göndererek hattı tıkarlar.
Yaygın biçimleri: UDP flood, SYN flood, DNS ve NTP yansıtma (amplification) saldırıları.
Kritik nokta: Bu saldırılar sunucu içinden çözülemez. Trafik sunucunuza ulaştığında hat zaten dolmuştur; iptables kuralı yazmak, dolmuş bir hattın arkasında hiçbir işe yaramaz. Çözüm, trafiğin sunucuya varmadan önce ağ seviyesinde temizlenmesidir — bu, sağlayıcınızın altyapısında yapılır.
Uygulama katmanı saldırıları (L7)
Amaç, hattı değil sunucunun işlem gücünü tüketmektir. Görünüşte normal HTTP istekleri gönderilir, ama bunlar sunucuyu en çok yoran uç noktaları hedefler: arama sayfaları, giriş formları, filtrelenmiş ürün listeleri.
Trafik hacmi düşük olabilir; yine de sunucu diz çöker. Bu saldırılar meşru trafiğe benzediği için ayırt edilmesi zordur.
Bu katmanda sunucu tarafında yapabilecekleriniz vardır: hız sınırlama, WAF kuralları, önbellekleme, bot doğrulama.
Saldırı altında mısınız, yoksa trafik mi arttı?
İkisi karışır. Ayırt etmek için şunlara bakın:
- Trafiğin kaynağı: Meşru trafik artışı genellikle bilinen kaynaklardan gelir. Saldırıda coğrafi dağılım anlamsız görünür.
- İstenen sayfalar: Gerçek ziyaretçiler siteyi gezer. Saldırıda tek bir uç nokta ısrarla istenir.
- Kullanıcı aracıları (user agent): Aynı user agent'ın binlerce kez tekrar etmesi güçlü bir işarettir.
- Dönüşüm oranı: Trafik on kat arttıysa ama sipariş sayısı sabitse, gelen şey ziyaretçi değildir.
Sunucuda hızlı bir bakış için:
bash# En çok istek gönderen IP adresleri
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20
# Anlık bağlantı sayısı
ss -ant | awk '{print $6}' | cut -d: -f1 | sort | uniq -c | sort -rn | headKorunma katmanları
1. Ağ seviyesinde temizleme. Hacimsel saldırılar için tek gerçek çözümdür ve sağlayıcınızın sunması gerekir. Sunucu kiralarken DDoS korumasının kapsamını ve hangi hacme kadar koruduğunu sorun.
2. Ters vekil / CDN. Cloudflare gibi bir katman, sunucunuzun gerçek IP adresini gizler ve trafiği kendi ağında filtreler. Bunun işe yaraması için gerçek IP'nizin sızmaması şarttır — eski DNS kayıtları, doğrudan IP'ye çözümlenen alt alan adları ve sunucudan gönderilen e-postaların başlıkları en sık sızma yollarıdır.
3. Hız sınırlama. Nginx tarafında basit ama etkilidir:
textlimit_req_zone $binary_remote_addr zone=genel:10m rate=10r/s;
server {
location /giris {
limit_req zone=genel burst=20 nodelay;
}
}4. Önbellekleme. Önbellekten dönen bir sayfa PHP çalıştırmaz. İyi yapılandırılmış bir önbellek, L7 saldırılarının etkisini ciddi biçimde azaltır.
5. Uygulama sertleştirme. Pahalı sorguları sınırlayın, arama uç noktalarına kimlik doğrulama ya da gecikme ekleyin, giriş formlarına deneme sınırı koyun.
Saldırı anı için önceden plan yapın
Saldırı sırasında plan yazacak vakit olmaz. Şimdiden hazırlayın:
- Sağlayıcınızın acil durum iletişim kanalı ve yanıt süresi
- Panik hâlinde açılacak "koruma modu" ayarınız (Cloudflare'de Under Attack Mode gibi)
- Kimin karar vereceği ve kimin uygulayacağı
- Erişim kesilirse müşterilere hangi kanaldan haber verileceği
- Günlüklerin (log) saklandığı yer — saldırı sonrası inceleme için gereklidir
Gerçekçi olun
Hiçbir koruma "DDoS'a karşı tam bağışıklık" sağlamaz; yeterince büyük bir saldırı her yapıyı zorlar. Amaç, sıradan ölçekteki saldırıları fark edilmeden karşılamak ve büyük olanlarda kesinti süresini kısaltmaktır.
Projenizin ihtiyacına uygun koruma kapsamını belirlemek için DDoS koruma sayfamıza bakabilir ya da ekibimize danışabilirsiniz.
