Nginx Security: SSL, Rate Limiting, dan DDoS Protection untuk Website Production

Nginx Security: SSL, Rate Limiting, dan DDoS Protection untuk Website Production

Nginx bukan hanya web server cepat dan hemat resource, tetapi juga menjadi lapisan pertahanan pertama bagi website.

Mengamankan Nginx meliputi konfigurasi SSL/TLS, proteksi dari traffic berlebihan, dan mitigasi serangan DDoS. Artikel ini membahas praktik terbaik untuk membuat website aman, cepat, dan tahan terhadap serangan.


1. SSL/TLS: Mengamankan Data Transit

SSL/TLS memastikan data antara client dan server terenkripsi, mencegah pencurian informasi sensitif.

1.1 Konfigurasi SSL di Nginx

server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate /etc/nginx/certs/example.crt;
    ssl_certificate_key /etc/nginx/certs/example.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'HIGH:!aNULL:!MD5';
    ssl_prefer_server_ciphers on;

    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

1.2 Best Practices SSL

  1. Gunakan TLSv1.2/1.3 → protokol modern dan aman
  2. Strong ciphers → hindari RC4, MD5, DES
  3. HTTP/2 → multiplexing untuk performa lebih baik
  4. OCSP stapling → mempercepat handshake SSL
  5. Redirect HTTP ke HTTPS untuk semua request
server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

2. Rate Limiting: Mengontrol Traffic Berlebihan

Rate limiting mencegah abuse, brute-force, atau spam. Nginx dapat membatasi request per IP address.

2.1 Konfigurasi Rate Limiting

# Define zone
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;

server {
    location /login {
        limit_req zone=one burst=20 nodelay;
        proxy_pass http://backend;
    }
}

Penjelasan:

  • 10r/s → 10 request per detik per IP
  • burst=20 → toleransi spike 20 request
  • nodelay → request ekstra langsung ditolak, tidak ditunda

2.2 Use Cases

  • Halaman login → mencegah brute-force password
  • API endpoint → mencegah abuse dan scraping
  • Form submission → mengurangi spam

3. DDoS Protection: Menghadang Serangan Traffic Tinggi

DDoS (Distributed Denial of Service) menyerang server dengan traffic berlebihan. Nginx bisa mengurangi dampak serangan.

3.1 Connection Limiting

limit_conn_zone $binary_remote_addr zone=addr:10m;

server {
    location / {
        limit_conn addr 10;  # Max 10 concurrent connections per IP
        proxy_pass http://backend;
    }
}
  • Membatasi jumlah koneksi simultan per IP, mencegah satu attacker menghabiskan resource server.

3.2 Request Throttling

  • Gabungkan rate limiting dengan burst handling untuk mencegah spike traffic.
  • Tambahkan cache micro atau proxy cache untuk mengurangi load backend.

3.3 Fail2Ban Integration

  • Monitoring log Nginx untuk IP yang mencurigakan
  • Memblokir IP otomatis jika melanggar rate limit atau mencoba brute-force
  • Contoh: memblokir IP yang gagal login >5 kali dalam 10 menit

4. Header & Security Hardening

4.1 HTTP Security Headers

add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header Referrer-Policy no-referrer-when-downgrade;
  • Mencegah clickjacking, XSS, dan sniffing.

4.2 Hide Nginx Version

server_tokens off;
  • Tidak menampilkan versi Nginx → mengurangi risiko exploit targeting versi lama.

4.3 Buffer & Body Limits

  • Batasi request body untuk mencegah buffer overflow / upload berlebihan
client_max_body_size 10M;
client_body_buffer_size 16k;

5. Load Balancing + Security

  • Nginx dapat dikombinasikan load balancing dengan proteksi DDoS:
    • Reverse proxy + cache layer + SSL termination + rate limiting
    • Backend tetap aman dan stabil walau terjadi serangan traffic tinggi
upstream backend {
    server backend1.example.com max_fails=3 fail_timeout=30s;
    server backend2.example.com max_fails=3 fail_timeout=30s;
}

server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate /etc/nginx/certs/example.crt;
    ssl_certificate_key /etc/nginx/certs/example.key;

    limit_req zone=one burst=20 nodelay;
    limit_conn addr 10;

    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

6. Monitoring & Alerting

6.1 Metrics Penting

  • Request per detik (RPS)
  • Latency & response time
  • Rate limit hits
  • Error 4xx/5xx
  • Worker CPU & memory

6.2 Tools

  • Prometheus + Grafana → visualize metrics, set alert
  • Fail2Ban → blokir IP mencurigakan otomatis
  • Cloudflare / CDN → tambahan proteksi DDoS layer 7

7. Best Practices Nginx Security

  1. SSL/TLS modern: TLSv1.2/1.3, strong ciphers, HTTP/2
  2. Force HTTPS: redirect HTTP → HTTPS
  3. Rate limiting: untuk login, API, form submission
  4. Connection limiting: batasi concurrent connections per IP
  5. DDoS mitigation: combine rate limiting + fail2ban + CDN
  6. Security headers: X-Frame-Options, X-XSS-Protection, etc.
  7. Hide version: server_tokens off
  8. Limit body size & buffers
  9. Monitoring & alerting: RPS, error, CPU, memory, hits

8. Studi Kasus

Website e-commerce dengan 50k concurrent user:

  • SSL termination di Nginx → backend HTTP → CPU backend turun 40%
  • Rate limiting login form → mencegah brute-force password
  • Limit connection per IP → mengurangi efek DDoS ringan
  • Reverse proxy + microcaching → homepage response time <200ms

Hasil: website tetap stabil dan aman walau traffic meningkat drastis.


Kesimpulan

Mengamankan Nginx meliputi tiga aspek utama:

  1. SSL/TLS → data terenkripsi, protokol aman, HTTP/2 untuk performa
  2. Rate Limiting → mencegah abuse, brute-force, spam
  3. DDoS Protection → limit connection, microcaching, monitoring

Dengan kombinasi ini, website production tetap cepat, aman, dan scalable tanpa menambah biaya server secara signifikan.