API Rate Limiting (Hız Sınırlandırma) ve Sunucu Koruma Rehberi
API Rate Limiting (Hız Sınırlandırma) ve Sunucu Koruma Rehberi
Son Güncelleme: Mayıs 2026
API rate limiting (hız sınırlandırma), sunucularınızı aşırı istekler, kötüye kullanım ve hizmet aksaması risklerinden koruyan temel bir tekniktir. Bu rehberde rate limiting algoritmaları, uygulama yöntemleri, pratik senaryolar ve izleme/adım adım test örnekleri ile uygulama aşamaları ele alınacaktır.
İçindekiler
- API Rate Limiting Nedir?
- Rate Limiting Algoritmaları
- Uygulama Yöntemleri
- Tasarım ve Dikkat Edilmesi Gerekenler
- Pratik Kullanım Senaryoları ve Örnekler
- İzleme, Loglama ve Uyarı
- Test Etme ve Doğrulama
- Sıkça Sorulan Sorular
- Sonuç
API Rate Limiting Nedir?
Rate limiting, bir istemcinin belirli bir zaman diliminde yapabileceği istek sayısını sınırlama yöntemidir. Amaç; servis sürekliliği, kaynak koruması ve kötü amaçlı trafiğin sınırlanmasıdır. Rate limiting, hem ağ düzeyinde (ör. reverse proxy) hem de uygulama düzeyinde uygulanabilir.
Rate Limiting Algoritmaları
Aşağıdaki algoritmalar yaygın olarak kullanılır. Her birinin avantajları ve dezavantajları vardır.
| Algoritma | Açıklama | Avantaj | Dezavantaj |
|---|---|---|---|
| Fixed Window | Sabit zaman aralığında (ör. 1 dakika) istek sayısını sayar. | Basit, kolay uygulanır. | Pencere sonlarında ani artışlara (burst) hassas. |
| Sliding Window | Zaman penceresini kayan bir şekilde hesaplar; daha düzgün sınır sağlar. | Daha adil dağılım, burst kontrolü daha iyi. | Uygulaması biraz daha karmaşıktır. |
| Token Bucket | Belirli bir kapasitede token üretilir, istek token tüketir; burst izin verir. | Yüksek esneklik, burst kontrolü. | Token depolama/ayarlama gerekir (örn. Redis). |
| Leaky Bucket | İstekler kuyruğa alınır ve sabit oranda işlenir; ani yükü düzleştirir. | Kararlı çıkış hızı sağlar. | Gecikmeyi yükseltebilir; kuyruk yönetimi gerekir. |
Uygulama Yöntemleri
Rate limiting için farklı katmanlarda uygulanabilecek yöntemler vardır. Aşağıda üstten alta doğru (edge -> uygulama) örnek yöntemler sıralanmıştır.
- Edge/Proxy Düzeyi: Reverse proxy veya WAF üzerinde limit uygulamak en etkili yoldur; sunucuya ulaşan trafiği hemen keser.
- Load Balancer / CDN: Cloud tabanlı CDN veya load balancer üzerinde global limitler konulabilir.
- Sunucu/Kernel Düzeyi: iptables/conntrack gibi araçlarla bağlantı sayısı sınırlandırılabilir.
- Uygulama Düzeyi: API anahtarına göre veya kullanıcı bazlı kontroller uygulama katmanında yapılır.
- Dağıtık Cache Desteği: Redis veya Memcached ile küresel sayaçları tutup, çoklu sunucu ortamında tutarlılık sağlanır.
Nginx ile Basit Rate Limiting
Nginx üzerinde limit_req_zone ve limit_req kullanımı yaygındır. Aşağıda temel bir örnek bulunmaktadır:
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
server {
location /api/ {
limit_req zone=one burst=20 nodelay;
proxy_pass http://backend;
}
}
}
HAProxy ile Rate Limiting
HAProxy frontend'te connection veya request rate kontrolü yapılabilir. Örnek:
frontend http-in
stick-table type ip size 1m expire 10s store conn_cur,conn_rate(10s)
acl abuse src_rate(http-in) gt 100
tcp-request connection track-sc1 src
tcp-request connection reject if abuse
iptables ile Basit Bağlantı Sınırı
Kernel düzeyinde eşzamanlı bağlantı veya bağlantı hızı sınırlamak için connlimit veya recent modülleri kullanılabilir:
iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 50 -j REJECT
# veya saniyede en fazla 20 yeni bağlantı
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m limit --limit 20/second -j ACCEPT
Redis + Token Bucket (Dağıtık Yapı)
Dağıtık ortamlarda Token Bucket genellikle Redis ile uygulanır. Aşağıda Lua ile örnek bir token çekme mantığı yer almaktadır (örnek amaçlı):
-- redis token bucket (pseudo-lua)
local key = KEYS[1]
local rate = tonumber(ARGV[1]) -- token/s
local capacity = tonumber(ARGV[2])
local now = tonumber(redis.call('TIME')[1])
local data = redis.call('HMGET', key, 'tokens', 'last')
-- mantık: token üret, tüket, sonucu döndür
Tasarım ve Dikkat Edilmesi Gerekenler
Rate limiting tasarlarken aşağıdaki maddeleri dikkate alın:
- Hedef Kitle (Scope): IP bazlı mı, API anahtarı bazlı mı yoksa kullanıcı hesabı bazlı mı olacağına karar verin.
- Hassas Endpoint'ler: Giriş (login), şifre sıfırlama, ödeme gibi kritik endpointlere daha sıkı limit uygulayın.
- Burst ve Adil Paylaşım: Token bucket veya sliding window ile adil dağılım sağlayın.
- HTTP Kod ve Header: İstek reddedildiğinde
429 Too Many Requestsdöndürün veRetry-Afterheader'ı gönderin. - Whitelist / Blacklist: Güvenilir IP'leri whitelist'e alın; kötü amaçlı IP'leri otomatik blacklist'e ekleyin.
- Fail-open vs Fail-closed: Cache (Redis) erişilemiyorsa nasıl davranılacağına karar verin; genellikle kritik API'lar için fail-closed uygun olabilir.
Pratik Kullanım Senaryoları ve Örnekler
Aşağıda gerçek dünyada sık karşılaşılan senaryolar ve uygulanabilecek stratejiler yer alıyor.
1) Brute-force ve Login Koruması
- Başlık: Hesap başına 10 başarısız deneme / saat
- Uygulama: Başarısız login denemelerini kullanıcı veya IP bazında sayarak 429 döndürün ve geçici kilitleme uygulayın.
2) API Anahtarı Bazlı Adil Paylaşım
- Başlık: Her API anahtarına 1000 isteği/gün sınırı
- Uygulama: API gateway veya uygulama katmanında günlük sayaç tutun; aşılırsa 429 dönün.
3) DDoS Önleyici Basit Filtre
- Başlık: Aynı IP'den saniyede 50'den fazla yeni bağlantı engellensin
- Uygulama: iptables veya edge WAF üzerinde bu tür metrikleri takip edip otomatik kural ekleyin.
İzleme, Loglama ve Uyarı
Rate limiting uygulamasının etkinliği, doğru bir izleme ve loglama altyapısı ile ölçülür. Öneriler:
- Başlık: Yüksek seviyeli metrikler (429 sayısı, redis hata oranı, blocked IP sayısı)
- Başlık: Loglarda hangi endpointlerin limitleri tetiklediğini tutun; bu, yanlış yapılandırma tespitinde yardımcı olur.
- Başlık: Alarm eşiği: 429 oranı toplam trafiğin %1'ini aşıyorsa uyarı üretin.
Örnek metric stack: Prometheus ile metrik toplayın, Grafana ile dashboard oluşturun ve kritik durumlar için e-posta/Slack uyarısı kurun.
Test Etme ve Doğrulama
Rate limiting'i test etmek için gerçekçi yük testleri ve senaryo bazlı testler yapın. Aşağıdaki komut örnekleri işinize yarar.
Curl ile Basit Test
for i in {1..30}; do
curl -s -o /dev/null -w "%{http_code}\n" https://api.example.com/endpoint
done
Bu komut başarılı istek sayısını ve 429 dönenleri hızlıca gösterir.
ApacheBench (ab) ile Yük Simülasyonu
ab -n 1000 -c 50 https://api.example.com/endpoint
Yük testi sırasında 429 sayısını ve gecikmeyi gözlemleyin.
Sıkça Sorulan Sorular
Rate limiting ile caching (önbellekleme) çakışır mı?
Hayır, doğru yapılandırıldığında önbellekleme ve rate limiting birbirini tamamlar. Önbelleğe alınmış cevaplar backend yükünü azaltır; rate limiting ise kötü amaçlı veya aşırı talepleri sınırlar.
Hangi durumda IP bazlı limit yetersiz kalır?
Proxy veya NAT arkasındaki kullanıcılar aynı IP'den çok sayıda gerçek kullanıcıya hizmet ediyorsa IP bazlı limit haksızlık yaratabilir. Bu durumda API anahtarı veya kullanıcı bazlı limit tercih edilmelidir.
429 döndürmek UX (kullanıcı deneyimi) açısından sorun olur mu?
Doğru mesaj ve Retry-After header'ı ile kullanıcı bilgilendirilirse sorun olmaz. Ayrıca kritik uç noktalara esneklik tanıyın.
Rate limiting performans maliyeti yüksek midir?
Basit implementasyonlar düşük maliyetlidir. Ancak dağıtık token bucket gibi çözümler için Redis gibi bileşenlerin ölçeklenmesi gerekir; bu da altyapı maliyeti doğurur.
Rate limiting uygularken nelere öncelik vermeliyim?
Öncelikle kritik endpointleri, login/payments ve API anahtar yönetimini koruyun. Ardından edge/ proxy katmanında genel limitleme kurun. İzleme ve otomatik uyarılar kurmayı unutmayın.
Sonuç
Özetle, API rate limiting sunucu güvenliği ve servis sürekliliği için temel bir yöntemdir. Mimarinizin gereksinimlerine göre edge ve uygulama düzeyinde kombine çözümler uygulayın; Redis veya benzeri dağıtık sayaçlarla tutarlılığı sağlayın. Test, izleme ve loglama süreçlerini atlamayın.
Corelux olarak ihtiyacınıza göre Proxy Sunucu çözümleri ve ölçeklenebilir altyapı için Türkiye VPS Sunucu seçenekleri sunuyoruz. Rate limiting stratejinizin uygulanması veya değerlendirilmesi için Proxy Sunucu hizmetimiz üzerinden destek alabilirsiniz.
Yazar
Boran BAR