Blogchevron_rightSiber Güvenlikchevron_rightNginx API Koruma ve Rate Limiting Rehberi

Nginx API Koruma ve Rate Limiting Rehberi

S
Serversium
calendar_today13 Temmuz 2026
schedule5 dk okuma
Nginx API Koruma ve Rate Limiting Rehberi

Nginx ile Gelişmiş API Koruma ve Hız Sınırlama: Kapsamlı Rehber

Modern web uygulamalarında API güvenliği, dijital varlıkların korunması için en kritik unsurlardan birini oluşturmaktadır. Nginx, yüksek performanslı web sunucusu ve ters proxy olarak, API endpoint'lerini korumak için kapsamlı araçlar sunmaktadır. Bu rehberde, Nginx kullanarak gelişmiş API koruma mekanizmaları ve hız sınırlama (rate limiting) tekniklerini detaylı olarak inceleyeceğiz.

API Güvenliği Neden Önemli?

Günümüzde API'ler, dijital hizmetlerin omurgasını oluşturmaktadır. Sektör istatistiklerine göre, web trafiğinin %83'ü API'ler üzerinden gerçekleşmektedir (Kaynak: Akamai State of the Internet Report). Bu nedenle, API'lerin kötüye kullanıma karşı korunması kritik önem taşımaktadır.

Yetersiz korunan API'ler şu risklere yol açmaktadır:

  • Servis Reddi (DoS/DDoS): Aşırı istek yüküyle sunucuların çökertilmesi
  • Veri Sızıntısı: Hassas bilgilerin yetkisiz erişimle ele geçirilmesi
  • Brute Force Saldırıları: Hesap ele geçirme girişimleri
  • Kaynak Tükenmesi: Sunucu kaynaklarının kötüye kullanımı

Nginx Rate Limiting Temelleri

Rate Limiting Nedir ve Nasıl Çalışır?

Rate limiting, belirli bir zaman diliminde bir istemciden gelen istek sayısını sınırlamak için kullanılan bir tekniktir. Nginx, bu işlemi "leaky bucket" (sızdıran kova) algoritması kullanarak gerçekleştirmektedir. Bu algoritma, gelen istekleri bir kova gibi işler ve sabit bir hızda "sızdırır".

Temel Rate Limiting Yapılandırması

Nginx'te rate limiting için öncelikle limit_req_zone direktifi tanımlanmalıdır:

http {
    limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
    
    server {
        location /api/ {
            limit_req zone=api_limit burst=20 nodelay;
            
            proxy_pass http://backend;
        }
    }
}

Bu yapılandırmada:

  • zone=api_limit:10m: 10 megabaytlık bir bellek alanı oluşturur
  • rate=10r/s: Saniyede 10 istek sınırı belirler
  • burst=20: 20'ye kadar bekleyen isteğe izin verir
  • nodelay: Burst isteklerinde gecikme uygulamaz

Gelişmiş Rate Limiting Stratejileri

Çok Katmanlı Hız Sınırlama

Farklı endpoint'ler için farklı limitler belirlemek, kaynakların daha verimli kullanılmasını sağlar:

http {
    # Temel IP bazlı limit
    limit_req_zone $binary_remote_addr zone=basic_limit:10m rate=5r/s;
    
    # API için daha yüksek limit
    limit_req_zone $binary_remote_addr zone=api_limit:10m rate=50r/s;
    
    # Giriş endpoint'i için sıkı limit
    limit_req_zone $binary_remote_addr zone=login_limit:10m rate=3r/s;
    
    server {
        location /api/v1/ {
            limit_req zone=api_limit burst=50 nodelay;
            proxy_pass http://api_backend;
        }
        
        location /api/v1/auth/login {
            limit_req zone=login_limit burst=5 nodelay;
            proxy_pass http://api_backend;
        }
        
        location / {
            limit_req zone=basic_limit burst=10;
            proxy_pass http://frontend;
        }
    }
}

Kullanıcı Bazlı Rate Limiting

IP adresi yerine JWT token veya session ID kullanarak daha granüler kontrol sağlanabilir:

http {
    # Kullanıcı ID'sine göre limit
    limit_req_zone $http_authorization zone=user_limit:10m rate=100r/s;
    
    server {
        location /api/ {
            # Token'dan kullanıcı ID çıkarma
            set $user_id $jwt_claim_sub;
            
            limit_req zone=user_limit burst=50 nodelay;
            proxy_pass http://backend;
        }
    }
}

IP Beyaz ve Kara Liste Uygulaması

Temel IP Kontrolü

Güvenilir IP'leri beyaz listeye eklemek ve şüpheli IP'leri engellemek kritik bir güvenlik katmanıdır:

geo $limited {
    default 1;
    10.0.0.0/8 0;
    172.16.0.0/12 0;
    192.168.0.0/16 0;
    203.0.113.0/24 0; # Örnek beyaz liste
}

map $limited $limit {
    0 "";
    1 $binary_remote_addr;
}

limit_req_zone $limit zone=api_protect:10m rate=10r/s;

server {
    location /api/ {
        limit_req zone=api_protect burst=20 nodelay;
        
        # Kara liste kontrolü
        include /etc/nginx/blocked_ips.conf;
        
        proxy_pass http://backend;
    }
}

Kara Liste Dosyası Örneği

# /etc/nginx/blocked_ips.conf
if ($blocked_ip) {
    return 403;
}

DDoS Koruma Stratejileri

Bağlantı Sınırlama

Aynı IP'den gelen eşzamanlı bağlantı sayısını sınırlamak, DDoS saldırılarına karşı etkili bir koruma sağlar:

server {
    # Tek IP'den maksimum 10 eşzamanlı bağlantı
    limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
    
    location /api/ {
        limit_conn conn_limit 10;
        
        # Her bağlantı için istek sınırı
        limit_req zone=api_protect burst=20 nodelay;
        
        proxy_pass http://backend;
    }
}

Slowloris ve Benzeri Saldırılara Karşı Koruma

HTTP başlıklarında zaman aşımı ayarlarını yaparak yavaş bağlantı saldırılarına karşı koruma sağlanabilir:

server {
    client_body_timeout 10s;
    client_header_timeout 10s;
    keepalive_timeout 15s;
    send_timeout 10s;
    
    # Tam istek gövdesi için zaman aşımı
    proxy_read_timeout 30s;
    
    location /api/ {
        proxy_pass http://backend;
    }
}

SSL/TLS Yapılandırması ve Güvenlik

Güvenli Bağlantı Ayarları

API uç noktaları için TLS zorunlu kılınmalı ve güvenli protokol/şifreleme tercih edilmelidir:

server {
    listen 443 ssl http2;
    
    ssl_certificate /etc/nginx/ssl/api.crt;
    ssl_certificate_key /etc/nginx/ssl/api.key;
    
    # TLS versiyon kısıtlaması
    ssl_protocols TLSv1.2 TLSv1.3;
    
    # Güvenli şifreleme paketleri
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
    ssl_prefer_server_ciphers on;
    
    # HSTS desteği
    add_header Strict-Transport-Security "max-age=31536000" always;
    
    location /api/ {
        proxy_pass http://backend;
    }
}

Güvenlik Başlıkları ile Koruma

API yanıtlarına güvenlik başlıkları eklemek, XSS ve clickjacking gibi saldırılara karşı koruma sağlar:

location /api/ {
    # Güvenlik başlıkları
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-XSS-Protection "1; mode=block" always;
    add_header Referrer-Policy "strict-origin-when-cross-origin" always;
    
    # API için CORS yapılandırması
    if ($request_method = 'OPTIONS') {
        add_header Access-Control-Allow-Origin "*";
        add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS";
        add_header Access-Control-Allow-Headers "Authorization, Content-Type";
        add_header Access-Control-Max-Age 3600;
        return 204;
    }
    
    proxy_pass http://backend;
}

JWT Token Doğrulama

API'ye erişim için JWT token doğrulaması uygulamak, yetkisiz erişimi önler:

server {
    location /api/protected/ {
        # Token doğrulama
        auth_jwt "Protected API" key=realm="api";
        auth_jwt_key_file /etc/nginx/jwt.key;
        
        proxy_pass http://backend;
        
        # Token bilgilerini backend'e ilet
        proxy_set_header X-User-ID $jwt_claim_sub;
        proxy_set_header X-User-Role $jwt_claim_role;
    }
}

ModSecurity WAF Entegrasyonu

Web Application Firewall (WAF) entegrasyonu, OWASP Top 10 açıklarına karşı koruma sağlar. Nginx ile güvenlik duvarı yapılandırması hakkında daha fazla bilgi için blog yazılarımızı inceleyebilirsiniz.

server {
    location /api/ {
        # ModSecurity WAF
        ModSecurityEnabled on;
        ModSecurityConfig /etc/nginx/modsecurity/modsecurity.conf;
        
        proxy_pass http://backend;
    }
}

Monitoring ve Logging

Rate Limit Log'ları

Sınırlama olaylarını loglamak, saldırı tespiti ve analiz için kritiktir:

http {
    limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
    
    log_format limit_log 'IP: $remote_addr | Limit: $limit_req_status | Time: $time_local';
    
    server {
        location /api/ {
            limit_req zone=api_limit burst=20 nodelay;
            
            access_log /var/log/nginx/api_limit.log limit_log;
            
            proxy_pass http://backend;
        }
    }
}

Değerleri Anlama

Limit log'larında görünebilecek durumlar:

  • LIMITED: İstek sınırı aşıldı
  • DELAYED: İstek beklemede (burst durumu)
  • REJECTED: İstek reddedildi

Kullanım Senaryolarına Göre Yapılandırma

Karşılaştırma Tablosu: Rate Limiting Stratejileri

Senaryo Önerilen Rate Burst Değeri Kullanım Alanı
Genel API Erişimi 10-50 r/s 20-50 Standart web servisleri
Giriş Ekranı 3-5 r/s 5-10 Kullanıcı kimlik doğrulama
Arama Endpoint'i 5-10 r/s 10-20 Kaynak yoğun işlemler
Dosya Yükleme 1-2 r/s 2-3 Bandwidth yoğun istekler
Webhook 100-500 r/s 100-200 Yüksek hacimli bildirimler

Örnek: Tam Kapsamlı API Koruma Yapılandırması

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events {
    worker_connections 2048;
}

http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;
    
    log_format detailed '$remote_addr - $remote_user [$time_local] "$request" '
                        '$status $body_bytes_sent "$http_referer" '
                        '"$http_user_agent" "$http_x_forwarded_for"';
    
    access_log /var/log/nginx/access.log detailed;
    
    # Rate limiting zone'ları
    limit_req_zone $binary_remote_addr zone=api_general:10m rate=10r/s;
    limit_req_zone $binary_remote_addr zone=api_critical:10m rate=3r/s;
    limit_req_zone $http_x_api_key zone=api_client:10m rate=100r/s;
    
    # Bağlantı sınırlama
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    
    # Beyaz liste
    geo $whitelist {
        default 0;
        10.0.0.0/8 1;
        172.16.0.0/12 1;
    }
    
    # Slowloris koruma
    client_body_timeout 10s;
    client_header_timeout 10s;
    
    server {
        listen 80;
        listen 443 ssl http2;
        
        ssl_certificate /etc/nginx/ssl/server.crt;
        ssl_certificate_key /etc/nginx/ssl/server.key;
        ssl_protocols TLSv1.2 TLSv1.3;
        
        # Güvenlik başl

library_booksBenzer İçerikler

DDoS Koruması: Yapay Zeka ile Trafik Süzme Rehberi
Siber Güvenlik
calendar_today5 Nisan 2026
schedule5 dk

DDoS Koruması: Yapay Zeka ile Trafik Süzme Rehberi

DDoS saldırıları işletmeler için ciddi hizmet kesintilerine neden olabilir. Yapay zeka destekli trafik süzme teknolojileri sunucularınızı anında güvence altına alır.

S
Serversiumarrow_forward
Sunucu Güvenliği: SSH Key ve 2FA Kurulum Rehberi
Siber Güvenlik
calendar_today7 Nisan 2026
schedule5 dk

Sunucu Güvenliği: SSH Key ve 2FA Kurulum Rehberi

Sunucu güvenliğinde SSH key ve 2FA kullanımı, hesap ele geçirme saldırılarını büyük oranda azaltır. Bu teknik rehber ile erişim kontrollerinizi güvenli şekilde yapılandırın.

S
Serversiumarrow_forward
SSL Sertifikası Rehberi: DV, OV ve EV Türleri ile Seçim Kriterleri
Siber Güvenlik
calendar_today17 Nisan 2026
schedule5 dk

SSL Sertifikası Rehberi: DV, OV ve EV Türleri ile Seçim Kriterleri

DV, OV ve EV SSL sertifikası türlerini detaylı olarak açıklayan kapsamlı rehber. Web siteniz için doğru SSL sertifikası seçimini öğrenin ve güvenliği sağlayın.

S
Serversiumarrow_forward