Ana içeriğe geç

Nginx Reverse Proxy Hardening 🌐

Bu, uygulamalarınızın (React, .NET) önünde duran, internete açılan Ana Kapıdır. En çok saldırı buraya gelir.

1. Altın Konfigürasyon (nginx.conf) 🏆

Aşağıdaki ayarlar DDoS koruması, SSL güvenliği ve Header sıkılaştırmasını içerir.

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    # --- GÜVENLİK AYARLARI ---

    # 1. Versiyon gizleme (Saldırgan sürümü bilmesin)
    server_tokens off;

    # 2. Buffer Overflow Koruması
    client_body_buffer_size 10K;
    client_header_buffer_size 1k;
    client_max_body_size 8m;
    large_client_header_buffers 2 1k;

    # 3. Timeout Ayarları (Slowloris saldırısı koruması)
    client_body_timeout 12;
    client_header_timeout 12;
    keepalive_timeout 15;
    send_timeout 10;

    # 4. Gzip (Veri sızmasını önlemek için BREACH attack'a dikkat, kapalı olabilir)
    gzip off;

    # 5. Header Hardening (Browser Güvenliği)
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-XSS-Protection "1; mode=block" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header Referrer-Policy "no-referrer-when-downgrade" always;
    add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;

    # 6. SSL Hardening (A+ Puan için)
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;

    include /etc/nginx/conf.d/*.conf;
}

2. Docker Compose Kurulumu

Nginx'i de root çalıştırmamak mümkündür ancak ana portları (80/443) dinleyeceği için genellikle gateway olarak root başlar, sonra user düşer (user nginx ayarı ile).

services:
  proxy:
    image: nginx:alpine
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
      - ./conf.d:/etc/nginx/conf.d:ro
      - ./certs:/etc/nginx/certs:ro
    ports:
      - "80:80"
      - "443:443"
    networks:
      - frontend

    # Kaynak limiti (DDoS anında sunucuyu vermemek için)
    deploy:
      resources:
        limits:
          cpus: "0.50"
          memory: 256M

    # Auto-restart (Çökerse kalksın)
    restart: always

3. Rate Limiting (DDoS Frenleme) 🛑

Belirli bir IP'den çok fazla istek gelirse engellemek için conf.d/app.conf içine ekleyin:

# IP başına saniyede max 10 istek (10MB hafıza ayır)
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;

server {
    location / {
        # Limiti uygula (Burst 20 isteğe kadar izin ver, sonra reddet)
        limit_req zone=mylimit burst=20 nodelay;

        proxy_pass http://my-app:8080;
    }
}

Bu ayar, botnet saldırılarını Nginx seviyesinde keser, uygulamanıza yük bindirmez.