Tutorial Hardening VPS dengan CrowdSec dan Nginx: Blokir Serangan Real-Time
Poin Kunci Artikel Ini:
- Ancaman Server VPS dan Keterbatasan Fail2ban TradisionalVirtual Private Server (VPS) terhubung internet publik hadapi pemindaian otomatis konstan.
- Botnet, script kiddy, pemindai otomatis seperti Zgrab, Shodan, Masscan eksekusi rekognisi port terbuka.
- Serangan berlanjut ke brute force SSH serta eksploitasi celah keamanan aplikasi web di layer Nginx.
Ancaman Server VPS dan Keterbatasan Fail2ban Tradisional
Virtual Private Server (VPS) terhubung internet publik hadapi pemindaian otomatis konstan. Botnet, script kiddy, pemindai otomatis seperti Zgrab, Shodan, Masscan eksekusi rekognisi port terbuka. Serangan berlanjut ke brute force SSH serta eksploitasi celah keamanan aplikasi web di layer Nginx. Server tanpa hardening mengalami abai resource CPU, memori, I/O disk akibat traffic siber jahat.
Fail2ban perkakas lama proteksi server Linux. Cara kerja: pantau file log sistem (/var/log/auth.log, /var/log/nginx/access.log), cocokkan pola kegagalan berbasis Regular Expression (Regex), eksekusi tabel IP (iptables, nftables) untuk blokir IP penyerang. Fail2ban memiliki limitasi arsitektural di infrastruktur modern:
- Isolasi Tunggal (Siloed Defense): Fail2ban reaktif di tingkat lokal. IP penyerang di server A tidak terdeteksi di server B sampai serangan memicu ambang batas log server B. Pertahanan pasif.
- Beban Kinerja Log Parsing: Mengurai file log besar memakai engine Regex synchronous mengonsumsi I/O CPU tinggi. Pada serangan Distributed Denial of Service (DDoS) layer 7, Fail2ban lambat memproses log hingga server terlanjur tumbang.
- Ketiadaan Threat Intelligence Global: Tidak ada reputasi IP global. Server mendeteksi ancaman dari nol tanpa pertukaran data penyerang antar pengelola server.
CrowdSec ubah paradigma melalui pendekatan pertahanan kolaboratif. Menggunakan bahasa Go, CrowdSec memisahkan deteksi ancaman (Engine) dan pemblokiran (Bouncer). Engine menganalisis log lokal memakai algoritma Leaky Bucket, lalu bagikan hash IP penyerang secara anonim ke jaringan global CrowdSec Central API (CAPI). Server terima daftar IP reputasi buruk dari konsensus global sebelum penyerang menyentuh infrastruktur.
Arsitektur CrowdSec Engine: Algoritma Leaky Bucket dan Deteksi Terdistribusi
Sistem CrowdSec terbagi menjadi empat komponen utama:
- Data Acquisition Layer: Membaca input log dari file log Nginx, log SSH, systemd-journal, event stream Docker secara real-time. Konfigurasi disimpan di
/etc/crowdsec/acquis.yaml. - Parsers & Scenarios Engine: Parser ubah log mentah jadi event terstruktur. Scenarios evaluasi event memakai pola algoritma Leaky Bucket. Algoritma izinkan toleransi jumlah kegagalan dalam kurun waktu tertentu. Jika kapasitas ember meluap, skenario terpicu.
- Local API (LAPI): REST API lokal pengelola database alert dan instruksi pemblokiran (decisions). LAPI simpan daftar IP terban ke database SQLite/PostgreSQL lokal.
- Remediation Components (Bouncers): Daemon mengeksekusi tindakan (Ban, Captcha, Allow) di Nginx, UFW, nftables, Cloudflare, HAProxy.
Saat skenario crowdsec/nginx-req-limit atau crowdsec/ssh-bf terpicu, Engine buat keputusan (decision) memblokir IP penyerang. Informasi serangan dikirim ke CAPI secara anonim. Algoritma konsensus CrowdSec memverifikasi laporan dari ribuan agent sebelum memasukkan IP penyerang ke Blocklist Reputasi Global.
Prasyarat Sistem dan Persiapan Environment
Persyaratan lingkungan VPS:
- Sistem Operasi: Ubuntu 22.04 LTS, Debian 12, atau Rocky Linux 9.
- Akses Server: Hak akses root atau pengguna wewenang
sudo. - Web Server: Nginx terpasang dan melayani traffic HTTP/HTTPS.
- Firewall: UFW atau nftables aktif (port 22, 80, 443 terbuka).
Instalasi CrowdSec Engine
Langkah-langkah instalasi CrowdSec Engine di server Linux:
Langkah 1: Tambahkan Repository Resmi CrowdSec
Jalankan script otomatisasi repository PackageCloud untuk menambahkan gpg key dan list repository CrowdSec:
curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | sudo bashLangkah 2: Pasang Paket CrowdSec Engine
Instal paket utama crowdsec via paket manager apt:
sudo apt-get install crowdsec -yCrowdSec melakukan auto-discovery terhadap log Nginx dan SSH, lalu memasang parser serta skenario relevan dari Hub resmi.
Langkah 3: Verifikasi Parser dan Koleksi Terpasang
Periksa daftar koleksi terpasang:
sudo cscli collections listJika koleksi Nginx belum terpasang otomatis, pasang manual:
sudo cscli collections install crowdsec/nginx
sudo systemctl reload crowdsecLangkah 4: Periksa Status Metrik Akuisisi Log
Pastikan CrowdSec membaca file log Nginx dan SSH real-time:
sudo cscli metricsOutput menampilkan metrik baris log yang dibaca (read), diparse (parsed), dan dialirkan ke skenario deteksi.
Instalasi dan Konfigurasi Nginx Remediation Bouncer
CrowdSec Engine menganalisis log dan membuat keputusan pemblokiran di LAPI. Eksekusi pemblokiran di Nginx memerlukan CrowdSec Nginx Remediation Bouncer. Bouncer bekerja di layer aplikasi Nginx menggunakan modul Lua untuk menolak permintaan sebelum diproses backend.
Langkah 1: Pasang Package Nginx Bouncer
Jalankan perintah instalasi:
sudo apt-get install crowdsec-nginx-bouncer -yInstalasi membuat API Key di LAPI, menuliskan konfigurasi bouncer di /etc/crowdsec/bouncers/crowdsec-nginx-bouncer.conf, dan menyisipkan script pengait di /etc/nginx/conf.d/crowdsec_nginx_bouncer.conf.
Langkah 2: Verifikasi Koneksi Bouncer ke LAPI
Pastikan status Bouncer terdaftar dan Valid pada Local API:
sudo cscli bouncers listStatus Valid mengonfirmasi Nginx Bouncer siap interseptasi traffic jahat.
Langkah 3: Pengujian Reload Nginx
Uji sintaks konfigurasi Nginx:
sudo nginx -t
sudo systemctl reload nginxSimulasi Serangan Real-Time dan Manajemen Blocklist
Uji proteksi Nginx Bouncer dengan simulasi pemindaian path non-eksisten serta pengujian pemblokiran otomatis dan manual.
Langkah 1: Simulasi HTTP Probing / Path Scan
Dari IP eksternal lain, jalankan perintah loop curl menyimulasikan botnet pemindai direktori:
for i in {1..50}; do curl -s -o /dev/null -w "%{http_code}\n" https://IP_SERVER_VPS/admin-login-probe-$i; doneRespons awal bernilai 404. Setelah ambang batas skenario crowdsec/nginx-req-limit atau crowdsec/http-probing terlampaui, CrowdSec Engine menerbitkan keputusan pemblokiran.
Langkah 2: Periksa Daftar Keputusan Aktif (Active Decisions)
Periksa daftar IP terban otomatis oleh CrowdSec Engine:
sudo cscli decisions listTabel menampilkan IP penyerang, tipe remedi (ban), durasi, dan skenario pemicu.
Langkah 3: Verifikasi Pemblokiran di Layer Nginx
Akses kembali URL server dari IP penyerang:
curl -I https://IP_SERVER_VPS/Nginx Bouncer merespons langsung dengan status HTTP 403 Forbidden tanpa meneruskan request ke aplikasi backend.
Langkah 4: Manajemen Keputusan Manual (Manual Ban & Unban)
Tambah IP ban manual:
sudo cscli decisions add --ip 198.51.100.45 --type ban --duration 24h --reason "Suspicious activity"Hapus IP dari blocklist (Unban):
sudo cscli decisions delete --ip 198.51.100.45Langkah 5: Konfigurasi Whitelist IP Trusted
Cegah IP manajemen terblokir otomatis dengan membuat file whitelist /etc/crowdsec/parsers/s02-override/my-whitelist.yaml:
name: my/whitelists
description: "Whitelist trusted IP addresses"
filter: "1 == 1"
whitelist:
reason: "Trusted internal network IP"
ip:
- "203.0.113.10"
cidr:
- "192.168.1.0/24"Reload layanan CrowdSec Engine:
sudo systemctl reload crowdsecTroubleshooting dan Analisis Metrik Keamanan
Lokasi log dan alat analisis kendala integrasi:
- Log Utama CrowdSec Engine:
/var/log/crowdsec.logโ Catatan status parsing log, pemuatan skenario, komunikasi LAPI/CAPI. - Log Nginx Remediation Bouncer:
/var/log/crowdsec-nginx-bouncer.logโ Catatan otentikasi API Key dan respon interseptasi HTTP. - Pemeriksaan Metrik: Gunakan perintah
sudo cscli metricsuntuk melihat statistik detail per segmen.
Jika Nginx gagal memblokir IP meski keputusan ada di cscli decisions list, verifikasi API Key Bouncer di /etc/crowdsec/bouncers/crowdsec-nginx-bouncer.conf sesuai dengan daftar sudo cscli bouncers list.
Hubungkan instalasi lokal ke CrowdSec Console via enrollment key:
sudo cscli console enroll YOUR_ENROLLMENT_KEY_FROM_CROWDSECBest Practices Hardening VPS Berlapis (Defense-in-Depth)
CrowdSec dan Nginx Bouncer mengamankan layer aplikasi dan reputasi IP. Konfigurasi komponen sistem lain tetap harus diperketat.
Checklist Hardening Sistem VPS:
- Autentikasi SSH: Matikan autentikasi kata sandi (
PasswordAuthentication no) dan login root (PermitRootLogin no) di/etc/ssh/sshd_config. Gunakan SSH Key algoritma Ed25519 (ssh-keygen -t ed25519). Ubah port SSH standar jika perlu. - Firewall Layer (Network Hardening): Aktifkan UFW atau nftables dengan aturan default deny incoming. Buka port spesifik: SSH, HTTP (80), HTTPS (443). Konfigurasi kernel sysctl mitigasi SYN Flood:
net.ipv4.tcp_syncookies = 1di/etc/sysctl.conf. - Application & Reverse Proxy Layer: Gunakan CrowdSec Engine dan Nginx Remediation Bouncer untuk proteksi L7. Batasi ukuran payload Nginx (
client_max_body_size 10M). Aktifkan header keamanan (HSTS, X-Frame-Options, X-Content-Type-Options). Pasang TLS valid (minimal TLS 1.2). - Pembaruan Keamanan Otomatis: Pasang paket
unattended-upgradesuntuk patch keamanan OS otomatis. - Centralized Monitoring: Hubungkan instans ke CrowdSec Console untuk pemantauan terpusat. Atur notifikasi alert (Slack, Discord, Email) via
/etc/crowdsec/notifications/.


