format_list_bulletedBu İçerikte Bahsedilen Konular
- arrow_rightNginx Hız Sınırlama (Rate Limiting) ile Bot Saldırılarını Önleme
- arrow_rightHız Sınırlama Nedir ve Neden Gereklidir?
- arrow_rightBot Saldırılarının Tipik Özellikleri
- arrow_rightNginx Rate Limiting Yapılandırması
- arrow_right1. Temel Rate Limit Ayarları
- arrow_right2. Limit Parametrelerinin Açıklaması
- arrow_rightBot Türlerine Göre Farklı Stratejiler
- arrow_right1. Basit Bot Engelleme
- arrow_right2. API Endpoint Koruması
- arrow_right3. Oturum Açma Sayfası Koruması
- arrow_rightGelişmiş Rate Limiting Stratejileri
- arrow_rightUser-Agent Bazlı Sınırlama
- arrow_rightCoğrafi IP Engelleme ile Kombinasyon
- arrow_rightBot Türlerine Göre Karşılaştırma
- arrow_rightRate Limiting Testi ve İzleme
- arrow_rightYapılandırmayı Test Etme
- arrow_rightNginx Error Log İzleme
- arrow_rightÖnerilen İzleme Araçları
- arrow_rightyaygın Hatalar ve Çözümleri
- arrow_rightHata 1: Limit_req_zone Tanımlanmamış
- arrow_rightHata 2: Çok Düşük Limit Değerleri
- arrow_rightHata 3: Bellek Yetersizliği
- arrow_rightÖnemli Güvenlik İpuçları
- arrow_rightSonuç
Nginx Hız Sınırlama (Rate Limiting) ile Bot Saldırılarını Önleme
Nginx, dünya genelinde en popüler web sunucularından biri olarak trafiği yönetmek için güçlü araçlar sunar. Bu araçların en etkililerinden biri rate limiting (hız sınırlama) özelliğidir. Araştırmalara göre, internet trafiğinin yaklaşık %40'ı botlardan oluşmaktadır ve bu oran her yıl artış göstermektedir. Nginx'in yerleşik rate limiting modülü, sunucu güvenliği açısından kritik bir kalkan görevi görür.
Hız Sınırlama Nedir ve Neden Gereklidir?
Hız sınırlama, belirli bir süre içinde bir IP adresinden gelen istek sayısını sınırlamaya dayanan bir güvenlik mekanizmasıdır. Bu mekanizma, kötü niyetli botların sunucunuza aşırı yük bindirmesini engeller ve SEO performansınızı korur.
Bot Saldırılarının Tipik Özellikleri
- Normal kullanıcılardan 10-100 kat fazla istek gönderimi
- Gece geç saatlerde veya tatil dönemlerinde artan aktivite
- Bilinen zararlı IP aralıklarından gelen tekrar eden istekler
- Oturum açma sayfalarına yönelik brute force girişimleri
Nginx Rate Limiting Yapılandırması
1. Temel Rate Limit Ayarları
Nginx'de hız sınırlama için ngx_http_limit_req_module modülü kullanılır. Bu modül varsayılan olarak Nginx kurulumunda aktif gelir.
http {
# Bellek bölgesi tanımlama - istek sayısını izlemek için
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;
server {
location /api/ {
limit_req zone=mylimit burst=20 nodelay;
proxy_pass http://backend;
}
}
}
2. Limit Parametrelerinin Açıklaması
Yukarıdaki yapılandırmada kullanılan parametrelerin anlamları:
| Parametre | Açıklama | Önerilen Değer |
|---|---|---|
zone |
Paylaşılan bellek bölgesi adı ve boyutu | 10m (10 MB) |
rate |
İzin verilen istek sayısı | 10r/s veya 600r/m |
burst |
Kuyruğa alınabilecek ek istek sayısı | 20-50 |
nodelay |
Bekleyen isteklerde gecikme uygulama | Gerekirse kullanın |
Bot Türlerine Göre Farklı Stratejiler
1. Basit Bot Engelleme
# Basit hız sınırlama - normal kullanıcılar için
limit_req_zone $binary_remote_addr zone=basic:10m rate=5r/s;
location / {
limit_req zone=basic burst=10 nodelay;
}
2. API Endpoint Koruması
# API'ler için daha sıkı limitler
limit_req_zone $binary_remote_addr zone=api:10m rate=1r/s;
location /api/ {
limit_req zone=api burst=5 nodelay;
}
3. Oturum Açma Sayfası Koruması
# Giriş sayfası için özel koruma
limit_req_zone $binary_remote_addr zone=login:10m rate=3r/m;
location /wp-login.php {
limit_req zone=login burst=5 nodelay;
# WordPress için
}
Gelişmiş Rate Limiting Stratejileri
User-Agent Bazlı Sınırlama
Bazı zararlı botlar kolayca tespit edilebilir. User-Agent string'ine göre ek katman ekleyebilirsiniz:
map $http_user_agent $bad_bot {
default 0;
~*(curl|wget|scrapy|bot) 1;
~*python-requests 1;
}
server {
if ($bad_bot) {
return 403;
}
}
Coğrafi IP Engelleme ile Kombinasyon
Eğer hizmetiniz belirli ülkelere yönelikse, GeoIP modülü ile birlikte kullanabilirsiniz:
geo $limited {
default 1;
195.175.0.0/16 0; # Türkiye IP bloğu
88.0.0.0/8 0;
}
limit_req_zone $binary_remote_addr zone=general:10m rate=10r/s;
limit_req_zone $binary_remote_addr zone=restricted:10m rate=1r/s;
location / {
limit_req zone=general burst=20;
# Kısıtlı ülkeler için daha sıkı
if ($limited) {
limit_req zone=restricted burst=5;
}
}
Bot Türlerine Göre Karşılaştırma
| Bot Türü | Tehdit Seviyesi | Önerilen Limit | Ek Önlem |
|---|---|---|---|
| Arama Motoru Botları | Düşük | 20-50 r/s | Allowlist'e ekleyin |
| İzleme Botları | Orta | 10-20 r/s | Kullanıcı aracısına göre izin |
| Zararlı Scraping Botları | Yüksek | 1-5 r/s | IP engelleme + Captcha |
| DDoS Botları | Kritik | 1 r/s veya blok | Firewall katmanı |
Rate Limiting Testi ve İzleme
Yapılandırmayı Test Etme
Rate limiting'in çalışıp çalışmadığını test etmek için curl kullanabilirsiniz:
# 10 istek göndererek test edin
for i in {1..15}; do curl -s -o /dev/null -w "%{http_code}\n" http://example.com/api/; done
Nginx Error Log İzleme
Limit aşımları Nginx error log'unda görünür:
2019/01/15 10:23:45 [error] 1234#1234: *56789 limiting connections by zone "mylimit"
Önerilen İzleme Araçları
- GoAccess - Gerçek zamanlı Nginx log analizi
- Prometheus + Grafana - Metrik toplama ve görselleştirme
- ELK Stack - Merkezi log yönetimi
yaygın Hatalar ve Çözümleri
Hata 1: Limit_req_zone Tanımlanmamış
Hata: "limit_req_zone" directive is not allowed here
Çözüm: limit_req_zone tanımını http bloğu içinde, server bloğu dışında yapmalısınız.
Hata 2: Çok Düşük Limit Değerleri
Belirti: Yasal kullanıcılar 503 hatası alıyor
Çözüm: rate değerini artırın ve burst parametresini ayarlayın. Gerçek trafik pattern'ınızı analiz ederek uygun değerleri belirleyin.
Hata 3: Bellek Yetersizliği
Belirti: Zone dolmuş uyarıları
Çözüm: zone boyutunu artırın (örneğin 10m yerine 50m).
Önemli Güvenlik İpuçları
- Rate limiting tek başına yeterli değildir - kapsamlı bir güvenlik duvarı stratejisi kullanın
- Düzenli olarak Nginx IP beyaz liste stratejinizi gözden geçirin
- Logları analiz ederek yeni bot pattern'larını tespit edin
- Test ortamında yapılandırmayı doğruladıktan sonra üretim sunucusuna uygulayın
Sonuç
Nginx rate limiting, sunucunuzu bot saldırılarından korumanın en etkili ve düşük maliyetli yollarından biridir. Doğru yapılandırma ile web sitenizin performansını artırırken, kaynaklarınızı kötü niyetli trafikten koruyabilirsiniz. Unutmayın ki rate limiting, kapsamlı güvenlik stratejinizin sadece bir parçasıdır. Düzenli olarak sunucu bakımı ve güvenlik güncellemeleri yapmayı ihmal etmeyin.
Başarılı bir rate limiting stratejisi için öncelikle normal trafik pattern'ınızı analiz edin, ardından kademeli olarak sınırları uygulayın ve sürekli olarak sonuçları izleyip optimizasyon yapın.