AizuDemy

Tutorial Hardening VPS dengan CrowdSec dan Nginx: Blokir Serangan Real-Time

Tutorial Hardening VPS dengan CrowdSec dan Nginx: Blokir Serangan Real-Time
๐ŸŽง
Dengarkan Artikel Ini
Suara AI Otomatis โ€ข 6 mnt baca baca
โšก TL;DR

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.
๐Ÿ“‹ Daftar Isi Materi Tutup โ–ด

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:

  1. 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.
  2. 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.
  3. Local API (LAPI): REST API lokal pengelola database alert dan instruksi pemblokiran (decisions). LAPI simpan daftar IP terban ke database SQLite/PostgreSQL lokal.
  4. 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 bash

Langkah 2: Pasang Paket CrowdSec Engine

Instal paket utama crowdsec via paket manager apt:

sudo apt-get install crowdsec -y

CrowdSec 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 list

Jika koleksi Nginx belum terpasang otomatis, pasang manual:

sudo cscli collections install crowdsec/nginx
sudo systemctl reload crowdsec

Langkah 4: Periksa Status Metrik Akuisisi Log

Pastikan CrowdSec membaca file log Nginx dan SSH real-time:

sudo cscli metrics

Output 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 -y

Instalasi 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 list

Status Valid mengonfirmasi Nginx Bouncer siap interseptasi traffic jahat.

Langkah 3: Pengujian Reload Nginx

Uji sintaks konfigurasi Nginx:

sudo nginx -t
sudo systemctl reload nginx

Simulasi 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; done

Respons 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 list

Tabel 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.45

Langkah 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 crowdsec

Troubleshooting 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 metrics untuk 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_CROWDSEC

Best 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:

  1. 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.
  2. 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 = 1 di /etc/sysctl.conf.
  3. 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).
  4. Pembaruan Keamanan Otomatis: Pasang paket unattended-upgrades untuk patch keamanan OS otomatis.
  5. Centralized Monitoring: Hubungkan instans ke CrowdSec Console untuk pemantauan terpusat. Atur notifikasi alert (Slack, Discord, Email) via /etc/crowdsec/notifications/.

๐Ÿ“– Artikel Terkait