Nginx Rate Limiting ile Layer 7 DDoS Koruması
Cloudflare arkasında gerçek IP doğrulaması, rate limiting ve Fail2Ban ile Layer 7 DDoS saldırılarına karşı Nginx güçlendirme rehberi.
Nginx Rate Limiting ve Gerçek IP Koruması ile Layer 7 DDoS Azaltma
Web uygulamalarına yönelik saldırıların büyük kısmı artık Layer 7 seviyesinde gerçekleşiyor. Özellikle reverse proxy arkasında çalışan sistemlerde yanlış yapılandırılmış rate limit kuralları gerçek kullanıcıları engellerken saldırgan trafiği kaçırabiliyor.
Bu yazıda Nginx üzerinde gerçek IP koruması, rate limiting ve reverse proxy güvenliği ile daha dayanıklı bir mimari oluşturacağız.
Problem: Yanlış IP Görülmesi
Cloudflare veya reverse proxy kullanan birçok sistemde Nginx gerçek istemci IP adresi yerine proxy IP adresini görür. https://www.cloudflare.com/ips/ Bu durumda:
- Rate limiting düzgün çalışmaz
- Fail2Ban yanlış IP banlar
- Log analizi bozulur
- Abuse tespiti zorlaşır
Gerçek IP bilgisini almak için:
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
real_ip_header CF-Connecting-IP;
real_ip_recursive on;
Cloudflare IP listesi düzenli olarak güncellenmelidir.
Rate Limit Yapısı
Temel rate limiting örneği:
limit_req_zone $binary_remote_addr zone=global:10m rate=5r/s;
Burada:
- 10 MB shared memory oluşturulur
- IP bazlı takip yapılır
- Saniyede 5 request limiti uygulanır
Location içinde kullanım:
location /login {
limit_req zone=global burst=20 nodelay;
}
Burst ve Nodelay Mantığı
Birçok kişi burst parametresini yanlış kullanır.
Örnek:
burst=20
Bu ayar ani trafik sıçramalarına tolerans sağlar.
nodelay aktifse request anında işlenir.
Yanlış burst ayarları:
- Bot saldırılarını geçirir
- Backend overload oluşturur
- WAF bypass riskini artırır
User-Agent Bazlı Filtreleme
Kötü botları filtrelemek için:
if ($http_user_agent ~* (curl|wget|python|scrapy)) {
return 403;
}
Ancak User-Agent filtreleri tek başına yeterli değildir çünkü kolayca spoof edilebilir.
URI Bazlı Koruma
Login, XMLRPC veya API endpointleri ayrı korunmalıdır.
Örnek:
location /wp-login.php {
limit_req zone=login burst=5 nodelay;
}
Ayrı zone kullanmak saldırı analizini kolaylaştırır.
Fail2Ban Entegrasyonu
Nginx access log üzerinden otomatik IP banlama yapılabilir.
Örnek filtre:
[Definition]
failregex = ^<HOST> -.*"(GET|POST).*HTTP.*" 429
429 dönen IP adresleri otomatik engellenebilir.
Reverse Proxy Bypass Engelleme
En kritik güvenlik problemlerinden biri origin IP sızıntısıdır.
Firewall üzerinden yalnızca Cloudflare IP bloklarına izin verilmelidir.
Örnek UFW yaklaşımı:
ufw default deny incoming
ufw allow from 173.245.48.0/20 to any port 443
Aksi durumda saldırganlar origin IP adresine doğrudan erişebilir.
Gerçek Dünya Sorunu: False Positive
Aşırı agresif rate limiting:
- Mobil kullanıcıları
- NAT arkasındaki kullanıcıları
- Kurumsal ağları
yanlışlıkla engelleyebilir.
Bu nedenle:
- Endpoint bazlı limit
- ASN bazlı analiz
- Behavioral filtering
daha sağlıklı sonuç verir.
Monitoring ve Log Analizi
Takip edilmesi gereken metrikler:
- 429 oranı
- Upstream response süresi
- Request distribution
- Bot yoğunluğu
- ASN analizi
Özellikle access log korelasyonu saldırı tespitinde kritik rol oynar.
Sonuç
Layer 7 saldırıları artık yalnızca yüksek trafik üretmiyor; aynı zamanda uygulama davranışını hedef alıyor.
Bu nedenle modern Nginx güvenliği:
- Gerçek IP doğrulaması
- Akıllı rate limiting
- Reverse proxy izolasyonu
- Log korelasyonu
- Otomatik mitigasyon
katmanlarının birlikte çalışmasını gerektiriyor.
Yorumlar
İlgili Yazılar
Linux Sunucu Güvenliği İçin Fail2Ban Gerçekten Yeterli mi?
Fail2Ban birçok Linux sunucuda ilk güvenlik katmanı olarak kullanılıyor. Peki production ortamında gerçekten yeterli mi?
4 dkGüvenlikLinux Sunucu Güvenliği İçin 10 Kritik Ayar
SSH sertleştirme, Fail2Ban, iptables ve WAF dahil — production ortamında uygulamanız gereken 10 kritik Linux sunucu güvenlik adımı.
2 dk