Rate Limiting — Teknik Derinlik

Yönetici
Yönetim Kurulu Başkanı
Chairman of the Board
Katılım
10 Nisan 2025
Mesajlar
742
Reaksiyon puanı
81

Temel Prensip:​


Rate limiting, kaynak IP veya kullanıcı bazında belirlenen süre aralığında (window) gelen istek sayısını sınırlar. Amaç, saldırganın aşırı trafik üreterek uygulama veya servis kaynaklarını tüketmesini engellemektir.


Algoritmalar:​


  • Fixed Window Counter
    Her zaman dilimi (örneğin 1 dakika) için sayacı sıfırlayan basit sayaç.
    Dezavantaj: Saldırgan sınırın hemen öncesi ve sonrası istek yollayarak kaçabilir.
  • Sliding Window Log
    İsteklerin timestamp’leri tutulur, ilgili zaman aralığında istek sayısı dinamik hesaplanır. Daha doğru, ama performans maliyeti yüksek.
  • Sliding Window Counter
    Zaman penceresi birkaç küçük parçaya bölünür. Bu parçalar baz alınarak oran hesaplanır, dengeli sonuç verir.
  • Token Bucket
    Belirli oranla token üretip bucket’a koyar. İstek geldiğinde token harcanır. Token bitince istek reddedilir.
    Örnek: 10 rps (requests per second) için saniyede 10 token eklenir.
  • Leaky Bucket
    Kuyruğa alınan istekler sabit hızda işlenir, kuyruk dolunca istekler reddedilir.



Linux Uygulaması:​


Kod:
# 1 saniyede en fazla 10 yeni bağlantı (limit burst 20)
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m limit --limit 10/second --limit-burst 20 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j DROP

Burada, saniyede 10 yeni bağlantıya izin veriliyor. Limit aşılırsa paketler düşürülüyor.




Nginx Rate Limiting (HTTP)​


Kod:
# 10 istek/saniye, burst 20, nodelay ile gecikme olmadan
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;

server {
    location /api/ {
        limit_req zone=one burst=20 nodelay;
    }
}

  • $binary_remote_addr: IP adresini binary formatta alır (performans için).
  • zone=one:10m: 10 MB'lık shared memory alanı ile 160,000 IP takibi yapabilir.
  • burst=20: Ani trafik artışlarına kısa süre tolerans.
  • nodelay: limit aşımı durumunda bekletmeden doğrudan reddet.


2. Connection Throttling — Teknik Derinlik​


Temel Prensip:​


Aynı IP’den veya subnet’ten gelen eşzamanlı bağlantı sayısını veya yeni bağlantı kurma hızını sınırlar. Amaç, TCP SYN flood ve benzeri ağ tabanlı DDoS saldırılarını engellemektir.




TCP Katmanı Koruması​





  • SYN Cookies
    TCP üç yönlü el sıkışmasında sunucunun kaynaklarını korur. Bağlantı yarıda kalırsa kaynak kullanılmaz.

    Linux’da etkinleştirmek için

    Kod:
    sysctl -w net.ipv4.tcp_syncookies=1




  • Backlog ve Queue Ayarları
    TCP bağlantı isteklerinin tutulduğu syn_backlog kuyruğu büyüklüğü artırılır.


    Kod:
    sysctl -w net.ipv4.tcp_max_syn_backlog=4096

    • Connection Rate Limiting
      Aynı IP’den yeni bağlantı kurulma hızına sınır konur.



    Kod:
    # Aynı IP'den eşzamanlı maksimum 10 bağlantı
    iptables -A INPUT -p tcp --syn -m connlimit --connlimit-above 10 --connlimit-mask 32 -j REJECT
    
    # Yeni bağlantı hızını saniyede 20 ile sınırla
    iptables -A INPUT -p tcp --syn -m limit --limit 20/s --limit-burst 40 -j ACCEPT
    iptables -A INPUT -p tcp --syn -j DROP

  • --connlimit-above 10: Aynı IP’den 10’dan fazla bağlantı kabul etme.
  • --connlimit-mask 32: IP adresi seviyesinde kontrol (tek IP).
  • --limit 20/s: Saniyede 20 yeni bağlantıdan fazlası reddedilir.

CDN ve WAF Seviyesinde Uygulama​

  • CDN altyapısı TCP seviyesinde bağlantı sınırlandırma ve SYN flood koruması uygular.
  • Uygulama katmanında ise Rate Limiting kuralları belirlenir.
  • Trafik, coğrafi bölge, User-Agent, Cookie ve diğer başlıklara göre analiz edilir.
  • Otomatik challenge (CAPTCHA, JS zorlama) tetiklenir.

Özet Teknik Mimarisi​

KatmanKoruma MekanizmasıProtokol / Teknoloji
Ağ (Network) KatmanıSYN Cookies, iptables connlimit, TCP backlog ayarlarıTCP/IP, iptables/nftables
Transport KatmanıTCP Connection ThrottlingTCP
Uygulama KatmanıRate Limiting (HTTP Request Limiting)HTTP, Nginx, HAProxy, CDN WAF
CDN SeviyesiAnycast, Global Trafik Dağıtımı, Bot FilteringCDN Platformları (Cloudflare, Akamai)
 
Üst