Panduan Keamanan

Setup Nginx Reverse Proxy + HTTPS

nusabet88 sebaiknya tidak menghadap internet secara langsung. Letakkan Nginx di depannya sebagai reverse proxy, lalu pasang TLS gratis dari Let's Encrypt. Hasilnya: akses terenkripsi, redirect otomatis, dan perpanjangan sertifikat tanpa campur tangan.

Kenapa Reverse Proxy?

  • Enkripsi TLS — trafik panel tidak lagi plain HTTP.
  • Kontrol akses — tambahkan basic auth dan IP whitelist di satu tempat.
  • Satu pintu — container tetap terikat ke 127.0.0.1:8080, hanya Nginx yang publik.
  • Observabilitas — log akses, rate limit, dan header keamanan terpusat.
Prasyarat: domain (mis. panel.contoh.com) yang record A/AAAA-nya sudah mengarah ke IP server, serta port 80 dan 443 terbuka di firewall.

Langkah 1 — Pasang Nginx

# Debian / Ubuntu
sudo apt update && sudo apt install -y nginx
# AlmaLinux / RHEL
sudo dnf install -y nginx
sudo systemctl enable --now nginx

Langkah 2 — Blok Server (HTTP dulu)

Mulai dengan blok HTTP polos agar Certbot bisa melakukan validasi, lalu Certbot akan menambah konfigurasi TLS otomatis.

# /etc/nginx/conf.d/nusabet88.conf
server {
    listen 80;
    listen [::]:80;
    server_name panel.contoh.com;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
        proxy_set_header Host              $host;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade           $http_upgrade;
        proxy_set_header Connection        "upgrade";
        proxy_read_timeout 300s;
    }
}
# uji konfigurasi & reload
sudo nginx -t && sudo systemctl reload nginx
Header X-Forwarded-* penting agar nusabet88 mengetahui skema dan IP asli klien. Upgrade/Connection menjaga koneksi WebSocket bila ada fitur realtime.

Langkah 3 — TLS Gratis dengan Certbot

# pasang Certbot + plugin Nginx
sudo apt install -y certbot python3-certbot-nginx   # Debian/Ubuntu
# terbitkan & pasang sertifikat (otomatis edit konfigurasi Nginx)
sudo certbot --nginx -d panel.contoh.com \
  --redirect --agree-tos -m admin@contoh.com --no-eff-email

Flag --redirect meminta Certbot menambahkan pengalihan HTTP ke HTTPS. Setelah selesai, Certbot menulis blok listen 443 ssl beserta path sertifikat ke file konfigurasi Anda.

Langkah 4 — Redirect HTTP ke HTTPS

Jika ingin mengontrol redirect secara manual, gunakan pola berikut.

server {
    listen 80;
    server_name panel.contoh.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name panel.contoh.com;

    ssl_certificate     /etc/letsencrypt/live/panel.contoh.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/panel.contoh.com/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    add_header Strict-Transport-Security "max-age=31536000" always;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host              $host;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
Header HSTS (Strict-Transport-Security) memaksa browser selalu pakai HTTPS. Jangan pasang sebelum HTTPS benar-benar stabil, karena sulit dibatalkan oleh klien yang sudah menyimpannya.

Langkah 5 — Auto-renew

# uji perpanjangan tanpa benar-benar memperbarui
sudo certbot renew --dry-run
# cek timer systemd yang menjalankan renew otomatis
systemctl list-timers | grep certbot
Sertifikat Let's Encrypt berlaku 90 hari. Timer Certbot mengecek dua kali sehari dan hanya memperbarui bila sisa masa berlaku < 30 hari. Tidak ada yang perlu Anda lakukan secara manual.

Kesimpulan

  • Ikat container ke 127.0.0.1:8080 dan biarkan Nginx jadi satu-satunya pintu publik.
  • Teruskan header X-Forwarded-* agar nusabet88 melihat skema dan IP asli klien.
  • Certbot --nginx --redirect menerbitkan TLS gratis dan mengaktifkan pengalihan dalam sekali jalan.
  • Auto-renew berjalan lewat timer systemd; uji dengan certbot renew --dry-run.

FAQ Nginx + HTTPS

Kenapa harus pakai reverse proxy, tidak langsung ekspos port 8080?

Reverse proxy memberi Anda HTTPS, kontrol akses (basic auth, IP whitelist), kompresi, dan logging tanpa mengubah aplikasi. Mengekspos 8080 langsung berarti trafik tanpa enkripsi dan panel terbuka ke internet. Dengan Nginx, container tetap terikat ke 127.0.0.1 dan hanya Nginx yang menghadap publik.

Apakah sertifikat Let's Encrypt benar-benar gratis?

Ya, sepenuhnya gratis. Let's Encrypt adalah Certificate Authority nirlaba. Certbot mengotomatiskan penerbitan dan perpanjangan. Sertifikat berlaku 90 hari dan diperpanjang otomatis oleh timer systemd yang dipasang Certbot.

Bagaimana cara memastikan HTTP otomatis dialihkan ke HTTPS?

Certbot biasanya menambahkan blok redirect saat instalasi. Anda juga bisa membuat blok server pada port 80 yang melakukan return 301 https://$host$request_uri. Dengan begitu semua trafik plain HTTP diarahkan ke versi terenkripsi.

Apakah perpanjangan sertifikat perlu saya lakukan manual?

Tidak. Certbot memasang timer (certbot.timer pada systemd) yang menjalankan certbot renew dua kali sehari. Perpanjangan hanya terjadi bila sertifikat mendekati kedaluwarsa. Uji dengan certbot renew --dry-run.

Tambah Lapisan Proteksi

Setelah HTTPS aktif, kunci panel dengan Basic Auth dan IP whitelist langsung di Nginx.

Basic Auth & IP Whitelist