AizuDemy

Tutorial Setup BunkerWeb WAF & CrowdSec di VPS: Bikin Web App Aman Auto-Mitigasi

Tutorial Setup BunkerWeb WAF & CrowdSec di VPS: Bikin Web App Aman Auto-Mitigasi
IKLAN
IDCloudHost
🎧
Dengarkan Artikel Ini
Suara AI Otomatis β€’ 6 mnt baca baca
⚑ TL;DR

Poin Kunci Artikel Ini:

  • VPS Linux (disarankan Ubuntu 22.04 LTS atau 24.04 LTS).
  • RAM minimal 2 GB (disarankan 4 GB jika trafik harian cukup tinggi).
  • Docker dan Docker Compose v2 sudah terpasang dan siap pakai.
πŸ“‹ Daftar Isi Materi Tutup β–΄

Pernah iseng cek log Nginx di VPS saat dini hari? Kalau belum, coba buka sekali-kali. Di sana biasanya bertumpuk ribuan request aneh. Ada bot yang sibuk nyari file .env, scanning path /wp-admin, sampai ngirim payload SQL Injection dari bermacam IP asing. Jam berapa pun kita tidur, botnet scanner terus beraksi tanpa henti mencari celah server.

Masalah utamanya, firewall standar seperti UFW atau iptables cuma bekerja di Layer 3 dan Layer 4. Mereka bertugas membuka atau menutup port, tapi tidak tahu isi paket data HTTP di dalamnya. Firewall biasa tidak bisa membedakan mana trafik pengunjung asli dan mana request yang menyisipkan skrip jahat. Mengandalkan Fail2ban saja sering kali telat karena sifatnya reaktifβ€”membaca log setelah serangan terjadi. Saat diserbu botnet ratusan IP sekaligus via serangan DDoS Layer 7 atau OWASP Top 10, server bakal kelabakan.

Solusi paling ampuh dan hemat biaya adalah menggabungkan BunkerWeb sebagai Web Application Firewall (WAF) dan CrowdSec sebagai Intrusion Prevention System (IPS) berbasis intelijen komunitas. Keduanya bisa dipasang di VPS Linux menggunakan Docker Compose tanpa perlu bayar lisensi WAF enterprise yang mahal.

Cara Kerja BunkerWeb dan CrowdSec

Sebelum mengeksekusi perintah di terminal, mari pahami dulu alur lalu lintas datanya. Di arsitektur ini, BunkerWeb bertindak sebagai reverse proxy di pintu paling depan. Semua trafik HTTP dan HTTPS (Port 80 dan 443) wajib lewat BunkerWeb sebelum menyentuh aplikasi backend.

Di dalam BunkerWeb, ada Nginx yang sudah dimodifikasi dengan ModSecurity v3 dan OWASP Core Rule Set (CRS). Komponen ini memeriksa header, cookie, query string, hingga isi body request. Jika ada upaya eksekusi kode berbahaya, request langsung dijegal.

Sementara itu, CrowdSec bekerja mirip seperti aplikasi navigasi lalu lintas berbasis komunitas (seperti Waze), tetapi khusus untuk ancaman siber. CrowdSec membaca log secara real-time, mendeteksi pola pencurian atau serangan, lalu mencocokkan IP pengirim dengan database reputasi global. Kalau IP tersebut tercatat sering bikin ulah di server lain, CrowdSec langsung menyuruh BunkerWeb menyodorkan tantangan CAPTCHA atau memblokirnya total (HTTP 403) sebelum request sempat menyentuh aplikasi kita.

Prasyarat Server

  • VPS Linux (disarankan Ubuntu 22.04 LTS atau 24.04 LTS).
  • RAM minimal 2 GB (disarankan 4 GB jika trafik harian cukup tinggi).
  • Docker dan Docker Compose v2 sudah terpasang dan siap pakai.
  • Domain aktif dengan A Record yang sudah diatur ke IP VPS.

Langkah 1: Membuat Folder & Konfigurasi Docker Compose

Langkah pertama, siapkan folder khusus di VPS untuk menyimpan seluruh berkas konfigurasi pertahanan ini:

mkdir -p /opt/bunkerweb-security && cd /opt/bunkerweb-security

Selanjutnya, buat berkas docker-compose.yml menggunakan teks editor favorit Anda (seperti Nano atau Vim):

nano docker-compose.yml

Masukkan konfigurasi berikut ke dalam berkas tersebut:

version: '3.8'

services:
  bunkerweb:
    image: bunkerity/bunkerweb:1.5.8
    container_name: bunkerweb_waf
    ports:
      - "80:8080"
      - "443:8443"
    environment:
      - SERVER_NAME=app.domainanda.com
      - API_WHITELIST_IP=127.0.0.1 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16
      - DATABASE_TYPE=sqlite
      - AUTO_LETSENCRYPT=yes
      - EMAIL_LETSENCRYPT=admin@domainanda.com
      - USE_CROWDSEC=yes
      - CROWDSEC_HOST=http://crowdsec:8080
      - CROWDSEC_KEY=ISI_DENGAN_API_KEY_CROWDSEC
      - USE_REVERSE_PROXY=yes
      - REVERSE_PROXY_URL=/
      - REVERSE_PROXY_HOST=http://backend_app:3000
    volumes:
      - bw_data:/var/lib/bunkerweb
    restart: always
    depends_on:
      - crowdsec
      - backend_app

  crowdsec:
    image: crowdsecurity/crowdsec:v1.6.0
    container_name: crowdsec_engine
    environment:
      - COLLECTIONS=crowdsecurity/nginx crowdsecurity/http-cve crowdsecurity/base-http
    volumes:
      - crowdsec_db:/var/lib/crowdsec/data
      - crowdsec_config:/etc/crowdsec
    restart: always

  backend_app:
    image: nginxdemos/hello
    container_name: backend_app
    restart: always

volumes:
  bw_data:
  crowdsec_db:
  crowdsec_config:

Penjelasan poin penting konfigurasi di atas:

  • SERVER_NAME: Isi dengan nama domain aktif Anda.
  • AUTO_LETSENCRYPT=yes: BunkerWeb akan otomatis mengurus pembuatan dan perpanjangan sertifikat SSL HTTPS gratis.
  • REVERSE_PROXY_HOST: Diarahkan ke container aplikasi backend (dalam contoh ini memakai sampel backend_app di port 3000).
  • CROWDSEC_KEY: API Key penghubung yang akan kita isi pada langkah berikutnya.

Langkah 2: Membuat Bouncer API Key CrowdSec

BunkerWeb membutuhkan kunci akses (API Key) resmi agar bisa berkomunikasi dengan CrowdSec Engine. Untuk membuatnya, jalankan kontainer CrowdSec terlebih dahulu:

docker compose up -d crowdsec

Setelah kontainer CrowdSec berstatus jalan (running), jalankan perintah berikut di terminal untuk membuat bouncer API key baru:

docker exec -it crowdsec_engine cscli bouncers add bunkerweb-bouncer

Terminal akan menampilkan deretan karakter acak API Key. Salin kunci tersebut, lalu buka kembali berkas docker-compose.yml. Ganti teks ISI_DENGAN_API_KEY_CROWDSEC dengan API Key yang baru disalin.

Setelah disimpan, jalankan seluruh layanan secara bersamaan:

docker compose up -d

Secara otomatis BunkerWeb memicu penerbitan sertifikat SSL Let's Encrypt, mengamankan jalur HTTPS, dan siap memfilter trafik sebelum disalurkan ke aplikasi backend.

Langkah 3: Pengujian Auto-Mitigasi

Sekarang saatnya membuktikan apakah kombinasi WAF dan CrowdSec ini benar-benar berfungsi. Buka terminal dari komputer lokal Anda, lalu simulasikan serangan SQL Injection sederhana menggunakan cURL:

curl -i "https://app.domainanda.com/?id=1' UNION SELECT null, username, password FROM users--"

Jika konfigurasi berhasil, BunkerWeb akan langsung menolak request tersebut di gardu depan dengan balasan respons HTTP/1.1 403 Forbidden.

Untuk melihat apakah CrowdSec mencatat aktivitas penyerang dan menjatuhkan sanksi pemblokiran IP, cek daftar keputusan aktif dengan perintah berikut:

docker exec -it crowdsec_engine cscli decisions list

Daftar tersebut memuat rincian IP penyerang, bentuk sanksi (ban/captcha), durasi hukuman, serta nama skenario pelanggarannya (misal: crowdsecurity/http-cve atau crowdsecurity/http-generic-bf).

Tuning Rules, Whitelisting, & Penanganan False Positive

Pada kondisi nyata di lingkungan produksi, aturan ketat WAF terkadang mengalami false positiveβ€”request dari pengguna sah tidak sengaja terblokir karena dianggap mencurigakan (misalnya saat mengisi form artikel dengan tag HTML atau mengunggah data JSON).

1. Menyesuaikan Tingkat Sensitivitas (Paranoia Level)

Secara bawaan, BunkerWeb berjalan pada tingkat keamanan moderat. Jika aplikasi Anda sering error akibat validasi data yang terlalu agresif, tambahkan atau atur variabel ini pada berkas docker-compose.yml di bagian service bunkerweb:

- BAD_BEHAVIOR_THRESHOLD=10
- PARANOIA_LEVEL=1

2. Memasukkan IP Admin ke Whitelist

Agar IP kantor atau jaringan rumah tidak sengaja terblokir saat melakukan pekerjaan maintenance server, daftarkan IP trusted Anda ke dalam variabel environment:

- USE_WHITELIST_IP=yes
- WHITELIST_IP=103.xxx.xxx.xxx 180.xxx.xxx.xxx

3. Melepas IP yang Terblokir Unintentional

Jika IP Anda atau pengguna sah tidak sengaja masuk daftar blokir CrowdSec, hapus sanksi tersebut menggunakan perintah cscli berikut:

docker exec -it crowdsec_engine cscli decisions delete --ip 103.xxx.xxx.xxx

Kesimpulan & Langkah Selanjutnya

Menggabungkan BunkerWeb WAF dan CrowdSec memberikan lapisan keamanan kelas enterprise berbasis Docker tanpa perlu merogoh kocek untuk lisensi mahal. Kombinasi ini tidak cuma memblokir eksploitasi OWASP Top 10 secara real-time, tapi juga memanfaatkan laporan ancaman global untuk menangkal serangan botnet sebelum sempat masuk ke server.

Langkah Praktis: Pasang arsitektur ini terlebih dahulu di server staging atau pengujian. Aktifkan mode pantau DETECTION_ONLY=yes pada BunkerWeb selama 24 sampai 48 jam. Amati log yang masuk untuk mengecek apakah ada request valid yang keliru terdeteksi sebagai serangan, lakukan penyesuaian aturan (whitelisting), lalu switch ke mode proteksi penuh di server produksi.

A
Aizu Dev

Tim penulis AizuDemy yang menyajikan tutorial teknologi, cloud, dan pengembangan perangkat lunak dalam Bahasa Indonesia.

πŸ’¬ Komentar (0)

Tulis Komentar

πŸ“– Artikel Terkait