İçeriğe geç
Muhammet Şafak
en
Soran: Murat Cevaplandı:

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


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?

Cevap

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 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.

Paylaş:

Yorumlar

Yorum yapmak için GitHub hesabınızla giriş yapmanız yeterli. Yorumlar GitHub Discussions üzerinde saklanır.

Diğer Sorular

Tüm sorular

Sitede Ara

Yazı, proje ve sayfalarda arama yapmak için yazmaya başlayın.

Esc ile kapat Pagefind ile güçlendirildi