Nginx Rate Limiting Gerçek Kullanıcıları Neden Engeller?
Nginx rate limiting yanlış yapılandırıldığında gerçek kullanıcıları engelleyebilir. False positive sebepleri ve doğru yapılandırmayı anlatıyorum.
Nginx Rate Limiting Gerçek Kullanıcıları Neden Engeller?
Nginx rate limiting, modern web sistemlerinde güvenlik için en çok kullanılan yöntemlerden biridir. Ama production ortamında sık gördüğüm bir problem var:
Doğru çalışıyor gibi görünen sistemler aslında gerçek kullanıcıları da engelliyor.
Bu durum “false positive” olarak bilinir ve kullanıcı deneyimini ciddi şekilde bozabilir.
Nginx Rate Limiting Nedir?
Nginx rate limiting, belirli bir IP adresinden gelen istekleri sınırlandırmak için kullanılır.
Basit bir örnek:
limit_req_zone $binary_remote_addr zone=global:10m rate=5r/s;
Bu yapı, bir IP’nin saniyede 5 request’ten fazla yapmasını sınırlar.
Ama burada kritik bir varsayım vardır:
Her IP tek bir kullanıcıdır.
Gerçekte İnternet Böyle Çalışmıyor
Production ortamında IP = kullanıcı demek çoğu zaman yanlış bir varsayımdır.
Özellikle:
- Mobil operatör NAT yapıları
- Kurumsal network proxy sistemleri
- CGNAT altyapıları
- VPN kullanıcıları
aynı IP’yi yüzlerce kişi paylaşabilir.
False Positive Nasıl Oluşur?
False positive şu şekilde oluşur:
- Aynı IP üzerinden birden fazla kullanıcı login olur
- Rate limit devreye girer
- Sistem saldırı sanır
- Gerçek kullanıcılar bloklanır
Bu durum özellikle login ve API endpoint’lerinde çok sık görülür.
İlk Production Hatası Deneyimi
Bir projede login endpoint’i için agresif bir limit kullanmıştım:
rate=2r/s
Başta sistem çok stabil görünüyordu.
Ama kısa süre sonra kullanıcı şikayetleri başladı:
- Giriş yapamıyorum
- Sürekli timeout alıyorum
- Bazı istekler başarısız oluyor
İlk düşüncem saldırı olduğu yönündeydi.
Ama logları incelediğimde gerçek sebep farklıydı.
Asıl Problem NAT Trafiğiydi
Mobil operatörler ve kurumsal ağlar aynı IP üzerinden yoğun trafik üretiyordu.
Sistem ise bunu şöyle yorumladı:
“Tek IP aşırı istek gönderiyor → saldırı var”
Ama gerçek şuydu:
Tek IP arkasında yüzlerce gerçek kullanıcı vardı
Endpoint Bazlı Rate Limiting Daha Doğru
Global rate limiting yerine endpoint bazlı yapı daha sağlıklıdır.
Örnek:
location /login {
limit_req zone=login burst=10 nodelay;
}
Bu yapı:
- Sadece kritik endpoint’i korur
- Tüm sistemi etkilemez
- False positive riskini azaltır
Burst Parametresi Kritik Bir Detaydır
Burst yanlış kullanıldığında sistem ya çok gevşek olur ya da çok agresif.
burst=10
Burst değeri:
- Ani trafik artışlarını tolere eder
- Ama saldırganlara da kısa pencere açabilir
Denge çok önemlidir.
Rate Limiting Tek Başına Yeterli Değildir
Production ortamında zamanla şunu öğrendim:
Rate limiting tek başına güvenlik çözümü değildir.
Modern sistemlerde birlikte kullanılması gerekir:
- WAF (Web Application Firewall)
- ASN filtering
- Bot detection
- Behavioral analysis
- Cache optimizasyonu
Monitoring Olmadan Rate Limit Kör Çalışır
Rate limiting aktif olsa bile şu metrikler izlenmelidir:
- 429 response oranı
- IP dağılımı
- ASN yoğunluğu
- Endpoint bazlı trafik
- User-agent pattern
Bunlar görülmezse sistem yanlış kararlar verir.
Gerçek Çözüm: Akıllı Limitleme
En sağlıklı yaklaşım şudur:
- Global limit hafif tutulmalı
- Kritik endpoint’ler korunmalı
- Bot analizi eklenmeli
- IP tek başına karar kriteri olmamalı
Sonuç
Nginx rate limiting güçlü bir güvenlik aracıdır ancak yanlış kullanıldığında gerçek kullanıcıları engelleyen bir probleme dönüşebilir.
Production ortamında önemli olan sadece saldırıyı engellemek değil, kullanıcı deneyimini bozmadan koruma sağlayabilmektir.
Doğru yapı:
- Endpoint bazlı
- Davranış analizli
- Monitoring destekli
- Katmanlı güvenlik yaklaşımıdır
Basit görünen bu konu aslında modern web mimarisinin en kritik parçalarından biridir.
Yorumlar
İlgili Yazılar
Cloudflare Origin IP Gizleme: Gerçek Güvenlik Yöntemleri
Cloudflare origin IP gizleme doğru yapılandırılmazsa güvenlik açığı oluşur. Reverse proxy bypass, firewall ve DNS hatalarını gerçek deneyimle anlatıyorum.
2 dkGenelCloudflare Googlebot 403: Country Block Çözümü
Cloudflare country block Googlebot'a 403 hatası verdirince ne yapmalı? User-Agent yerine ASN (AS15169) tabanlı hibrit çözümle kuralları doğru yapılandırma rehberi.
3 dkGenelYüksek Trafikte PHP-FPM Darboğaz Analizi
Production'da gerçek darboğaz Nginx değil PHP-FPM worker yönetimidir. Yavaşlama sorunlarının debugging metodolojisi ve çözümleri.
3 dk