Genel3 dk okuma537 kelime

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.

Alperen Şah

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

Yorum Yaz

0/1000

Yorumlar incelendikten sonra yayımlanır. Link ve reklam içeren yorumlar kabul edilmez.