Traefik dan CrowdSec adalah dua alat yang sangat berguna untuk mengamankan serta mengelola trafik web.
- Traefik berperan sebagai reverse proxy untuk menangani trafik masuk.
- CrowdSec mendeteksi dan merespons ancaman secara otomatis.
Dengan integrasi keduanya, sistem dapat memberikan respons otomatis terhadap aktivitas mencurigakan, misalnya pemblokiran IP yang mencoba melakukan serangan.
Prasyarat #
-
Server sudah terinstal Docker. Jika belum, instal dengan perintah berikut:
curl -L get.docker.com | bash -
Sudah memiliki akun di CrowdSec Console.
Setup Traefik + CrowdSec #
-
Clone repository GitHub
git clone https://github.com/devetop/crowdsec-traefik.git -
Masuk ke folder project dan buat file
.envdari template.env-example:cd crowdsec-traefik cp .env-example .env -
Edit file
.envuntuk menentukan nama domain masing-masing:DOMAIN_TRAEFIK=traefik.yourdomain.com # domain untuk dashboard Traefik DOMAIN_TEST=test.yourdomain.com # domain untuk testing web DOMAIN_WK=captcha.yourdomain.com # domain untuk captcha CrowdSec -
(Opsional) Gunakan Cloudflare untuk SSL (DNS Validation) Tambahkan konfigurasi berikut di
.env:CERTRESOLVER=letsencrypt CLOUDFLARE_EMAIL=your-email@yourdomain.com CLOUDFLARE_API_KEY=your_secret -
Jalankan docker compose
docker compose up -d -
Enroll CrowdSec ke Console Setelah container berjalan, hubungkan ke CrowdSec Console:
docker compose exec -it crowdsec cscli console enroll -e context cmfkytjmwXXXXXXXXGanticmfkytjmwXXXXXXXXdengan Enrollment Key dari CrowdSec Console. -
Tambahkan bouncer untuk Traefik
docker compose exec -it crowdsec cscli bouncers add traefik-bouncerHasilnya akan menampilkan API key, misalnya:
API key for 'traefik-bouncer': DPzmM+g4IvvVGYJBL5dj9p/WTHG+lJqY2jBVQRb/Z14 Please keep this key since you will not be able to retrieve it! -
Update
.envdengan API Key bouncerCROWDSEC_BOUNCER_API_KEY=DPzmM+g4IvvVGYJBL5dj9p/WTHG+lJqY2jBVQRb/Z14 -
Edit file
crowdsec.ymllalu sesuaikan konfigurasi berikut:crowdsecLapiKey: "DPzmM+g4IvvVGYJBL5dj9p/WTHG+lJqY2jBVQRb/Z14" captchaCustomJsURL: "https://captcha.yourdomain.com:8443/fast.js" captchaCustomValidateURL: "https://captcha.yourdomain.com:8443/v0/siteverify" -
Restart container
docker compose down docker compose up -d
Test (verifikasi CrowdSec bekerja) #
-
Uji akses web Akses URL berikut di browser untuk memicu deteksi:
https://test.yourdomain.com/.env
-
Uji dengan Gobuster (opsional, untuk brute-force direktori) Contoh perintah (pastikan
gobusterterpasang dan file wordlist ada):gobuster dir -k -e -fr -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt -u https://test.yourdomain.com/Opsi penjelasan singkat:
-k: ignore TLS certificate validation (jika sertifikat belum valid)-e: tampilkan ekstensi file-f: tampilkan full URL pada output-r: follow redirects
-
Lihat log CrowdSec untuk melihat IP yang dibanned Jalankan (di folder project dengan
docker compose):docker compose logs crowdsec | grep -Ei "ban|banned|ban on ip|performed" -
Ban IP secara manual Gunakan perintah berikut (sesuaikan metode dengan cara Anda menjalankan container):
docker compose exec -it crowdsec cscli decisions add --ip <IP> -
Unban IP
docker compose exec -it crowdsec cscli decisions remove --ip <IP>
CrowdSec CLI Cheatsheet #
Status & Info #
cscli info # Tampilkan status dan ringkasan CrowdSec
cscli metrics # Tampilkan runtime metrics
cscli version # Versi CrowdSec & cscli
Bouncers #
cscli bouncers list # Daftar bouncer yang terdaftar
cscli bouncers add <name> # Tambah bouncer baru (mengembalikan API key)
cscli bouncers delete <name> # Hapus bouncer
Collections & Parsers #
cscli collections list # Daftar koleksi yang terpasang
cscli collections install crowdsecurity/linux # Install koleksi
cscli parsers list # Daftar parser yang terpasang
cscli parsers inspect <name> # Detail parser
Scenarios & Decisions #
cscli scenarios list # Daftar skenario deteksi
cscli decisions list # Daftar keputusan (ban/quarantine) aktif
cscli decisions add --ip <IP> --reason "manual ban" # Ban IP manual
cscli decisions delete --ip <IP> # Hapus keputusan ban
Alerts & Logs #
cscli alerts list # Daftar alert yang terpicu
cscli alerts delete --all # Hapus semua alert
cscli console enroll # Hubungkan ke CrowdSec Console
Configuration & Validation #
crowdsec -c /etc/crowdsec/config.yaml -d # Jalankan CrowdSec dengan debug
cscli config show # Tampilkan konfigurasi saat ini
cscli config backup # Backup konfigurasi & data
Update & Upgrade #
cscli update # Update komponen CrowdSec (collections, parsers, scenarios)
cscli upgrade # Upgrade CrowdSec ke versi terbaru
Log Pipeline Debugger #
cscli explain --file ./access.log --type nginx
cscli explain --log "Sep 29 15:41:22 sshd[1234]: Failed password for root from 1.2.3.4 port 22" --type syslog
tail -n 5 access.log | cscli explain --type nginx -f