Nginx Server Hardening untuk Server Production

Nginx Server Hardening untuk Server Production

Setelah mengatur Virtual Hosts dan multi-domain, langkah selanjutnya untuk server produksi adalah meningkatkan keamanan dan performa Nginx.

Server yang terbuka ke internet sangat rentan terhadap berbagai serangan, mulai dari DDoS, brute force, hingga eksploitasi file konfigurasi. Berikut panduan lengkap hardening Nginx.


1. Menjalankan Nginx dengan User Non-Root

Secara default, Nginx dijalankan sebagai user www-data (di Debian/Ubuntu). Pastikan tidak menjalankan Nginx sebagai root karena ini berisiko tinggi jika ada celah keamanan.

Cek user Nginx di file /etc/nginx/nginx.conf:

user www-data;
worker_processes auto;

Pastikan folder web root juga memiliki permission yang sesuai:

sudo chown -R www-data:www-data /var/www/domain1.com/html
sudo chmod -R 755 /var/www

2. Meminimalkan Informasi Server

Nginx menampilkan versi dan beberapa header yang bisa dimanfaatkan hacker. Nonaktifkan header ini:

server_tokens off;

Tambahkan di http { ... } block di /etc/nginx/nginx.conf.


3. Memperkuat HTTPS

SSL/TLS adalah komponen penting. Gunakan konfigurasi yang aman:

server {
    listen 443 ssl;
    server_name domain1.com www.domain1.com;

    ssl_certificate /etc/letsencrypt/live/domain1.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/domain1.com/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers on;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:10m;
    ssl_stapling on;
    ssl_stapling_verify on;
}

Tips tambahan:

  • Gunakan TLS 1.3 bila server mendukung
  • Nonaktifkan TLS < 1.2
  • Selalu periksa sertifikat dan konfigurasi SSL menggunakan SSL Labs

4. Mengaktifkan HTTP Security Headers

Tambahkan header keamanan untuk mencegah XSS, clickjacking, dan MIME sniffing:

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";
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

Letakkan di dalam blok server { ... } atau location / { ... }.


5. Membatasi Request dan Rate Limiting

Untuk mencegah brute force atau serangan DoS ringan, aktifkan rate limiting:

http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;

    server {
        location /login {
            limit_req zone=one burst=10 nodelay;
        }
    }
}
  • limit_req_zone → mendefinisikan kuota request per IP
  • burst → jumlah request ekstra sebelum ditolak

6. Memblokir Akses ke File Sensitif

Beberapa file, seperti .env, .git, atau backup, sebaiknya tidak bisa diakses publik:

location ~ /\.(git|env|htaccess|htpasswd|ini|log|sh)$ {
    deny all;
    access_log off;
    log_not_found off;
}

7. Disable Unused HTTP Methods

Metode HTTP seperti TRACE, DELETE, atau PUT bisa menjadi risiko jika tidak digunakan:

if ($request_method !~ ^(GET|POST|HEAD)$ ) {
    return 444;
}

444 → Nginx menutup koneksi tanpa respon, efektif untuk mitigasi serangan.


8. Optimasi Logging

Logging penting tapi jangan sampai informasi sensitif tercatat.

  • Pisahkan access log tiap domain
  • Gunakan format log minimal dan anonim jika perlu

Contoh di server block:

access_log /var/log/nginx/domain1.com.access.log combined;
error_log /var/log/nginx/domain1.com.error.log warn;

9. Update dan Patch Nginx Secara Berkala

Keamanan server bergantung pada software terbaru.

sudo apt update
sudo apt upgrade nginx

Pertimbangkan juga menambahkan repository Nginx resmi agar selalu mendapat update terbaru.


10. Firewall dan Fail2Ban

Selain Nginx, hardening server melibatkan sistem:

  • UFW / iptables: Hanya buka port 80 (HTTP) dan 443 (HTTPS) sudo ufw allow 'Nginx Full' sudo ufw enable
  • Fail2Ban: Blokir IP yang melakukan brute force login atau scanning
sudo apt install fail2ban

Konfigurasi basic untuk Nginx:

[nginx-http-auth]
enabled = true
filter = nginx-http-auth
port    = http,https
logpath = /var/log/nginx/error.log
maxretry = 5

11. Monitoring dan Audit

Hardening tidak selesai setelah setup. Lakukan monitoring:

  • Log Nginx: Pantau error dan akses mencurigakan
  • Monitor resource: CPU, RAM, disk
  • Gunakan tools keamanan: Lynis, rkhunter, atau auditd

Kesimpulan Nginx Hardening

Hardening Nginx meliputi beberapa aspek:

  1. Jalankan Nginx dengan user non-root
  2. Minimalisasi informasi server (server_tokens off)
  3. HTTPS kuat dengan TLS modern dan sertifikat valid
  4. Aktifkan HTTP security headers
  5. Batasi request dan metode HTTP
  6. Blokir file sensitif
  7. Logging aman dan terpisah per domain
  8. Update rutin dan patch keamanan
  9. Gunakan firewall dan Fail2Ban
  10. Monitoring server secara berkala

Dengan menerapkan langkah-langkah ini, server production akan lebih aman, performa optimal, dan risiko serangan diminimalkan.