# Dağıtık brute force ve DDoS'a karşı akıllı rate limiting'i nasıl kurarım?

> IP limiti dönen proxy'lere yenilir: Redis sliding-window'u hesap + IP + ASN'de anahtarlayın, hesap kilidi ekleyin, volumetrik seli edge'e bırakın.

- Soruldu: 2026-05-29
- Yanıtlandı: 2026-06-01
- Soran: Murat
- Etiketler: dayaniklilik, guvenlik, redis
- Kaynak: https://muhammetsafak.com/tr/sor-bakalim/dagitik-brute-force-ve-ddos-icin-akilli-rate-limiting/
- Dil: tr-TR
- Yazar: Muhammet Şafak

---
**Soru:** API'ın login endpoint'ine yoğun brute force ve DDoS saldırısı var. Standart IP tabanlı rate limiting (dakikada 60 istek) işe yaramıyor çünkü saldırgan proxy arkasından binlerce farklı IP kullanıyor.

Redis tabanlı sliding window counter ya da token bucket ile; IP, kullanıcı adı, User-Agent ve ülke kodunu kombine eden dinamik ve akıllı bir rate limiter'ı nasıl inşa ederim?


Kısa cevap: IP başına limit, dönen proxy'lere karşı çaresiz — o yüzden ölçeklemeyi yalnızca IP üzerinden yapmayın. Saldırıyı çok boyutlu anahtarlama ve katmanlı savunma ile kırın.

## Kısa cevap

Asıl problem şu: saldırgan binlerce IP'yi rotasyona soktuğu için "IP başına 60" kuralı her bireysel IP için asla tetiklenmez. Saldırının ortak paydasını yakalamanız lazım. Aynı "kapıda reddederek arkadakini koru" mantığının yük tarafındaki hâlini [graceful degradation kaydında](/tr/sor-bakalim/graceful-degradation-kritik-olmayan-servisleri-izole-etmek/) ele almıştım.

## Neden

1. **Tek boyutlu sayaç, dağıtık saldırıyı göremez.** Her IP eşiğin altında kalırken toplam trafik hedefi ezer; sayacı saldırının gerçekten ortak olduğu boyutta tutmanız gerekir.

2. **Sabit eşik, saldırı sinyalini kullanmaz.** Başarısız login oranı fırladığında hâlâ normal zaman limitleriyle çalışmak, saldırıya normal muamele etmektir.

3. **Uygulama katmanı volumetrik seli ememez.** L3/L7 flood'u Redis limiter'ıyla durdurmaya çalışmak, yanlış katmanda savaşmaktır.

## Ne yapmalı

1. **Redis sliding-window'u çok boyutta anahtarlayın.** Tek sayaç değil, birkaç boyutta sayaç tutun: kullanıcı adı (tek hesap spray'leniyorsa), IP, IP subnet'i / ASN, User-Agent parmak izi, ülke kodu. Bir IP temiz görünse de aynı `username`'e binlerce farklı IP'den vuran trafik o boyutta patlar. Token bucket da bu problemi çözer; boyutları tek bir yapıda birleştirmek için sliding-window'u tercih ediyorum.

2. **Başarısızlık oranı yükselince dinamik sıkın.** Normalde gevşek olan limitleri, başarısız login oranı ani yükseldiğinde otomatik daraltın.

3. **Credential stuffing'e karşı hesap kilidi ve challenge ekleyin.** Başarısız login'lerde hesap bazında kademeli gecikme/kilit uygulayın; N denemeden sonra CAPTCHA veya proof-of-work isteyin.

4. **Gerçek volumetrik DDoS'u edge'e itin.** Hacimsel saldırıyı Cloudflare gibi bir edge katmanına bırakın; Redis limiter'ınız akıllı ve hedefli kötüye kullanımı durdurur.

5. **Login yolunu fail-closed yapın, hangi boyutun tetiklendiğini sızdırmayın.** Limiter ya da Redis hata verirse login'i kapatın. Reddederken "IP'iniz engellendi" gibi hangi boyutun patladığını saldırgana söylemeyin.

**Sonuç:** Ben olsam Redis'te `hesap + IP + ASN` üzerinde sliding-window kurar, credential stuffing için hesap kilidi ekler, volumetrik kısmı edge'e bırakırdım. Tek boyut (IP) hiçbir zaman yetmez; saldırının ortak paydasını yakalayan kombinasyon işi çözer.

## İlgili Yazılar

- [Container'ı non-root çalıştırınca mount edilen storage dizinine yazamıyorum, izinleri nasıl çözerim?](https://muhammetsafak.com/tr/sor-bakalim/containeri-non-root-calistirinca-mount-edilen-storage-dizinine-yazamiyorum-izinleri-nasil/) — Sor Bakalım
- [Hata oranı artınca otomatik rollback yapan (self-healing) deploy altyapısını nasıl tasarlarım?](https://muhammetsafak.com/tr/sor-bakalim/hata-artisinda-otomatik-rollback-ve-kendi-kendini-iyilestiren-deploy/) — Sor Bakalım
- [Fintek API'si için Canary mi, Blue-Green deployment mı?](https://muhammetsafak.com/tr/sor-bakalim/canary-mi-blue-green-mi-fintek-api-icin-deploy-stratejisi/) — Sor Bakalım
