yandex metrika
Nginx Rate Limit Nasıl Çalışır? Botları ve Saldırıları Yavaşlatan Yöntem - Tecrübe Güncesi
Genel

Nginx Rate Limit Nasıl Çalışır? Botları ve Saldırıları Yavaşlatan Yöntem

Bir gece bloguma aniden saniyede 500 istek gelmeye başladı. Normal trafik saniyede 3-5 istek. Sunucu yavaşlamıştı, sayfalar 10 saniyede açılıyordu. Cloudflare DDoS koruması henüz tetiklenmemişti — istekler “meşru” görünüyorlardı. O an Nginx rate limit kurmamış olmama lanet ettim. Sonra hızla kurdum ve sorun çözüldü. O günden beri rate limit hayat kurtaran bir güvenlik katmanı oldu.

Rate Limiting Nedir?

Rate limiting, bir IP adresinden belirli bir zaman diliminde yapılabilecek istek sayısını sınırlama tekniğidir. Örneğin, bir IP saniyede en fazla 10 sayfa isteyebilir — fazlası reddedilir. Bu, brute-force saldırılarını, aşırı scraping’i ve DDoS saldırılarını yavaşlatan en basit ve etkili yöntemlerden biri. Nginx’e göre, doğru yapılandırılmış rate limiting ile kötü niyetli trafiğin %80’i sunucuya ulaşmadan engellenebiliyor (Nginx, “Rate Limiting Guide”, 2026).

Nginx rate limiting diagram - istek akışı ve sınırlandırma görselleştirmesi

Nginx Rate Limit Kurulumu — Adım Adım

Benim uyguladığım yapılandırmayı adım adım anlatayım:

Adım 1: Zone Tanımlama

Önce http bloğunda bir zone tanımlayın. Zone, IP adreslerini ve istek sayılarını hafızada tutan bir alan:

http {
    limit_req_zone $binary_remote_addr zone=genel:10m rate=10r/s;
    limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;
}

Burada ne yaptık?

  • zone=genel: Her IP saniyede en fazla 10 istek yapabilir
  • zone=login: Login sayfası için dakikada 5 istek
  • 10m: Zone için 10 MB bellek (yaklaşık 160.000 IP adresi tutabilir)

Benim sunucumda 10 MB yeterli. Daha yoğun siteler için 50-100 MB gerekebilir.

Adım 2: Kural Uygulama

Server bloğunda kuralları uygulayın:

server {
    # Genel rate limit
    limit_req zone=genel burst=20 nodelay;

    # Login sayfası için sıkı limit
    location /wp-login.php {
        limit_req zone=login burst=5 nodelay;
    }

    # API endpoint'leri için orta limit
    location /api/ {
        limit_req zone=genel burst=10 nodelay;
    }
}

burst=20 ne demek? Kullanıcı anlık olarak 20 istek gönderebilir (traffic spike), ama sonraki istekler sınırı aşarsa reddedilir. nodelay ise burst isteklerini hemen işler, beklemez.

Adım 3: Özel Hata Sayfası

Rate limit’e takılan kullanıcılara güzel bir hata sayfası gösterin:

error_page 429 /rate-limit.html;

location = /rate-limit.html {
    internal;
    return 429 'Çok fazla istek gönderiyorsunuz. Lütfen bekleyin.';
}

Ben özel bir HTML sayfası oluşturdum — “Biraz yavaşladın gibi” diye esprili bir mesaj var. Kullanıcı dostu olmak önemli.

Farklı Senaryolar İçin Rate Limit Ayarları

Senaryo Rate Limit Burst Açıklama
Blog/İçerik sitesi 10r/s 20 Normal gezinti için yeterli
Login sayfası 5r/m 5 Brute-force engelleme
API endpoint 30r/s 50 Ajans ve mobil uygulamalar için
Dosya yükleme 2r/m 3 Spam ve aşırı yükleme engelleme
Arama sayfası 3r/m 5 Bot scraping engelleme

Bu ayarları kendi sitenizin trafiğine göre ayarlayın. Benim blogum düşük trafikli olduğu için limitler sıkı tutulabilir. Yüksek trafikli sitelerde daha gevşetmek gerekir.

Nginx rate limit grafik - istek akışı ve burst davranışı

Rate Limit İzleme — Nasıl Anlıyorum Çalışıyor?

Rate limit’in çalışıp çalışmadığını izlemek için:

# Nginx loglarında rate limit olaylarını filtrele
grep "limiting requests" /var/log/nginx/error.log | tail -20

Ben ayrıca Nginx status sayfasını da kullanıyorum:

location /nginx-status {
    stub_status on;
    allow 127.0.0.1;
    deny all;
}

Bu sayfadan aktif bağlantı sayısını ve toplam istek sayısını görebiliyorum. Prometheus + Grafana ile görselleştirme de mümkün ama ben basit bir bash script ile günlük rapor alıyorum.

Rate Limit vs Cloudflare vs WAF — Hangisi Ne Zaman?

Bu üçü farklı katmanlarda çalışır ve birbirini tamamlar:

  • Nginx Rate Limit: Sunucu katmanında, IP bazlı, çok hızlı, düşük kaynak tüketimi
  • Cloudflare WAF: CDN katmanında, trafik sunucuya ulaşmadan engellenir, daha akıllı
  • ModSecurity/WAF: Uygulama katmanında, kural bazlı, en detaylı ama en yavaş

Ben hepsini birlikte kullanıyorum: Cloudflare ilk filtre, Nginx rate limit ikinci filtre, WAF üçüncü filtre. Katmanlı güvenlik en iyi yaklaşım.

Karşılaştığım Sorunlar ve Çözümleri

Sorun 1: CDN arkasındaki IP’ler: Cloudflare arkasında çalışırken, Nginx tüm istekleri Cloudflare IP’lerinden geliyor sanır. Çözüm: set_real_ip_from ile Cloudflare IP’lerini tanıyın ve gerçek IP’yi X-Forwarded-For header’ından alın.

set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
# ... diğer Cloudflare IP'leri
real_ip_header CF-Connecting-IP;

Sorun 2: Meşru kullanıcılar etkilenebilir: Rate limit çok sıkıysa, hızlı gezinen meşru kullanıcılar 429 hatası alabilir. Ben burst değerini artırarak çözdüm. Ayrıca login sayfası için limit sıkı tutup, genel sayfalar için gevşetiyorum.

Sorun 3: Hafıza tüketimi: Zone büyüklüğü yetersizse, eski IP’ler temizlenir ve limit sıfırlanır. Ben 10 MB’ı yetersiz buldum ve 50 MB’a çıkardım. 160.000’den fazla IP adresi takip edebiliyor artık.

Sıkça Sorulan Sorular

Rate limit SEO’yu etkiler mi?

Hayır, arama motoru botları (Googlebot vb.) çok hızlı istek göndermez. Ayrıca Googlebot için ayrı bir limit tanımlayabilir veya whitelist’e alabilirsiniz.

Rate limit DDos engeller mi?

Küçük ölçekli DDoS saldırılarını yavaşlatabilir ama büyük botnet saldırılarını tek başına engelleyemez. Cloudflare gibi bir CDN ile birlikte kullanılmalı.

Rate limit login brute-force’u engeller mi?

Evet, dakikada 5 deneme gibi bir limit koyarsanız, brute-force saldırıları pratik olarak imkansız hale gelir. Saniyede 100 deneme yapan bir saldırgan, dakikada sadece 5 deneme yapabilir.

Nginx rate limit konfigürasyonunu test edebilirmiyim?

Evet, Apache Benchmark (ab) ile: ab -n 100 -c 10 https://siteniz.com/. İlk 10-20 istek başarılı, sonrası 429 dönmeli.

Birden fazla Nginx sunucusunda rate limit paylaşılabilir mi?

Evet, Nginx Plus’ta (ücretli) shared zone ile Redis kullanarak birden fazla sunucu arasında rate limit paylaşabilirsiniz. Açık kaynak Nginx’te bu özellik yok, her sunucu kendi limitini tutar.

Sonuç

Nginx rate limiting basit, hızlı ve etkili bir güvenlik aracı. Benim sunucuma o gece gelen saldırıyı dakikalar içinde durdurdu. O günden beri hiç rate limit’siz bir sunucu kurmadım.

Kurulumu 10 dakika sürüyor ve ciddi bir güvenlik katmanı ekliyor. Eğer sunucunuzda Nginx çalışıyorsa ve rate limit kullanmıyorsanız, hemen başlayın. O saldırı anında “keşke” demek istemezsiniz.

Türkay

Teknoloji, bilgisayar güvenliği, WordPress ve yapay zeka konularında içerik üreten Tecrübe Güncesi'nin editörü. Linux sistem yönetimi, ağ güvenliği ve web geliştirme alanlarında yılların getirdiği tecrübeye sahip. 2015'ten bu yana Türkçe teknoloji içerikleri üreterek okuyuculara yol göstermeyi hedefliyor.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir


Başa dön tuşu