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