A
DevOpsDockerNginxLinuxCloudMaintained

Edge Stack: NPM, Caddy & CrowdSec

Reverse proxy + CrowdSec di produksi: bukan sekadar nama tool — contoh insiden yang ditangani (brute-force, scanner, abuse) dan hardening dasar yang dipakai.

Role
DevOps / System Engineer (IC · system owner)
Tahun
2025
Layer
TLS + RP + IDS/IPS
Respons
Deteksi → ban → review
Fokus
Insiden nyata, bukan demo

Ringkasan

Stack tepi (edge) untuk VPS/produksi: terminasi TLS + reverse proxy (Nginx Proxy Manager atau Caddy) dipadukan CrowdSec Security Engine untuk deteksi dan remediasi. Bukan checklist tool — dipakai untuk mengurangi noise serangan dan memotong abuse berulang sebelum jadi tiket panik.

Komponen

Layer Tool Fungsi
Reverse proxy + SSL Nginx Proxy Manager / Caddy Routing domain → service, Let’s Encrypt
Web server klasik Nginx Upstream / static / PHP-FPM
Security Engine CrowdSec IDS/IPS, AppSec/WAF, bouncer
Container Docker Deploy NPM, app, bouncer

Arsitektur

Internet


NPM atau Caddy  (+ CrowdSec bouncer)
   ├── app.example.com  → container app
   ├── n8n.example.com  → n8n
   └── api.example.com  → API

CrowdSec Engine ← nginx/app logs + AppSec


app.crowdsec.net (Console / Security Engines)

Contoh insiden / ancaman yang pernah ditangani

Bukan skenario lab. Pola yang muncul di host produksi dan ditangani lewat stack ini + prosedur ops:

1. Brute-force SSH & credential stuffing

  • Gejala: log auth penuh percobaan login gagal dari banyak IP; kadang bersamaan dengan probe port.
  • Tindakan: CrowdSec collection SSH + firewall bouncer; fail berulang → decision ban; IP admin/VPN di allowlist agar tidak self-lock.
  • Hasil: volume percobaan turun ke noise terkontrol; akses admin tidak lewat “harap-harap port 22 terbuka lebar” tanpa kontrol.

2. Scanner & bot yang memukul path sensitif

  • Gejala: request massal ke /.env, /wp-admin, phpmyadmin, path framework default, user-agent scanner.
  • Tindakan: parse access log Nginx lewat CrowdSec (collection nginx); ban IP yang berulang; rate limit di reverse proxy untuk path publik.
  • Hasil: log dan CPU tidak habis untuk noise; sinyal error aplikasi lebih mudah dibaca saat insiden sungguhan.

3. Abuse berulang ke form/API publik

  • Gejala: spam submit, flood endpoint login/API, retry agresif dari subnet yang sama.
  • Tindakan: kombinasi rate limit edge + scenario CrowdSec; review false positive; allowlist health-check / IP partner bila perlu.
  • Hasil: layanan tetap melayani user sah; abuse dipotong di tepi sebelum menekan app/DB.

4. Hardening dasar (bukan “sudah pasang CrowdSec selesai”)

CrowdSec melengkapi, bukan mengganti:

  • Update OS & package rutin
  • TLS only di edge; admin UI (mis. port 81 NPM) tidak diekspos publik
  • Akses internal sensitif lewat Cloudflare Tunnel / VPN, bukan port terbuka
  • Backup + uji restore; user sudo terbatas; key-based SSH
  • False positive: allowlist IP kantor/VPN sejak hari pertama

Highlight

  • UI admin NPM untuk banyak host tanpa menulis config Nginx dari nol
  • Caddy untuk HTTPS default dan config as code (Caddyfile)
  • CrowdSec: deteksi kolaboratif + bouncer eksekusi ban
  • Isolasi admin UI dari eksposur publik

Lessons Learned

  • Hiring manager benar: sebut tool saja tidak cukup — yang diuji adalah apa yang terjadi saat log merah
  • Satu reverse proxy di edge menyederhanakan sertifikat, routing, dan titik observasi
  • Allowlist lebih dulu untuk IP operasional; ban agresif tanpa itu = self-DoS
  • Dokumentasikan scenario + keputusan ban di runbook singkat

Referensi di situs ini