Cara Install Wazuh di VPS: SIEM Open Source Buat Pantau Keamanan Server

Kalau kamu udah pasang CrowdSec, Fail2Ban, sama UFW di server, kemungkinan besar kamu ngerasa udah cukup aman. Tapi coba jawab jujur: kalau ada file penting di server yang keubah diam-diam, atau ada login mencurigakan jam 3 pagi, kamu bakal tau dari mana? Tools kayak Fail2Ban dan CrowdSec emang jago nge-block serangan di depan, tapi mereka gak nyatet jejak lengkap tentang apa yang terjadi di dalam server. Di sinilah Wazuh masuk. Wazuh itu SIEM open source – singkatan dari Security Information and Event Management. Fungsinya ngumpulin log dari banyak sumber, ngecek integritas file, sampai ngasih peringatan kalau ada aktivitas aneh. Semuanya dari satu dashboard. Di artikel ini saya bakal bahas cara install Wazuh di VPS pakai Docker dari nol, lengkap dengan penjelasan detail di setiap langkahnya.

Apa Itu Wazuh dan Kenapa Butuh SIEM

Buat yang belum familiar, SIEM itu sistem yang ngumpulin, nganalisis, dan nge-korelasi log dari berbagai sumber di satu tempat. Bayangin kamu punya 5 server, masing-masing punya log sendiri – auth log, syslog, application log, dan lain-lain. Tanpa SIEM, kamu harus SSH ke setiap server satu-satu buat ngecek ada yang aneh apa gak. Dengan SIEM, semua log itu dikumpulin di satu dashboard dan dianalisis otomatis.

Wazuh itu salah satu SIEM open source yang paling populer. Dia punya tiga komponen utama yang perlu kamu pahami:

  • Wazuh Manager: Otak dari sistem. Dia yang nerima data dari semua agent, nganalisis log, nge-trigger alert, dan ngejalanin rules deteksi. Kalau ada aktivitas mencurigakan, manager yang mutusin apakah itu perlu di-alert atau enggak
  • Wazuh Indexer: Mesin pencarian dan penyimpanan log. Berbasis OpenSearch (fork dari Elasticsearch), indexer nyimpen semua log yang udah diproses dan bikin semuanya bisa dicari. Ini komponen yang paling berat resource-nya – dia butuh RAM banyak buat indexing dan searching
  • Wazuh Dashboard: Interface web buat visualisasi. Di sini kamu bisa liat alert, browse log, cek status agent, dan bikin custom dashboard. Berbasis OpenSearch Dashboards

Selain tiga komponen inti di atas, ada juga Wazuh Agent yang diinstall di setiap server yang mau dipantau. Agent ini yang ngumpulin log dan ngirim ke manager. Fitur utama yang bikin Wazuh berguna:

  • File Integrity Monitoring (FIM): Ngecek apakah ada file penting yang berubah tanpa sepengetahuan kamu. Misalnya kalau /etc/passwd atau /etc/ssh/sshd_config tiba-tiba keubah, kamu langsung dapet alert
  • Log Analysis: Nganalisis log dari berbagai sumber (syslog, auth log, application log) dan nge-match sama rules deteksi buat nemuin aktivitas mencurigakan
  • Vulnerability Detection: Scan server buat nemuin software yang punya kerentanan keamanan yang udah diketahui
  • Compliance Monitoring: Ngecek apakah konfigurasi server kamu sesuai sama standar keamanan (PCI DSS, HIPAA, GDPR)
Wazuh siem architecture vps docker

Bedanya Wazuh Sama CrowdSec, Fail2Ban, dan Monitoring Tools Lain

Karena banyak yang bingung, ini perbandingan singkat biar jelas posisi masing-masing tool:

CrowdSec dan Fail2Ban itu fokusnya ke prevention – nyegah serangan sebelum masuk. CrowdSec nge-detect pola serangan dan langsung nge-block IP lewat bouncer. Fail2Ban nge-ban IP yang gagal login berkali-kali. Keduanya kerja real-time di layer depan.

Wazuh fokusnya ke visibility dan audit trail. Dia gak nge-block serangan secara langsung (walaupun bisa dikonfigurasi buat active response). Kekuatannya ada di kemampuan nyatet siapa login kapan, file mana yang berubah, proses apa yang jalan, dan nge-korelasi semua informasi itu jadi satu gambaran besar. Ini berguna banget pas kamu butuh nelusurin insiden setelah kejadian.

Beszel dan Gatus itu monitoring tools yang fokusnya ke uptime dan resource usage – CPU, RAM, disk, network. Mereka gak nganalisis log keamanan atau ngecek integritas file.

Jadi posisinya: CrowdSec/Fail2Ban itu gembok di pintu depan, Beszel/Gatus itu termometer yang ngecek kesehatan server, dan Wazuh itu kamera pengawas yang nyatet semua aktivitas. Ketiganya bisa jalan bareng tanpa konflik, dan idealnya emang dipasang bareng buat defense-in-depth.

Satu hal penting yang perlu kamu tau: Wazuh itu berat. Jujur aja di awal biar gak kaget belakangan. Indexer-nya (berbasis OpenSearch) butuh RAM banyak buat indexing log. Ini bukan tools yang bisa nyempil bareng lima container lain di VPS 1-2GB RAM. Kalau mau serius pakai Wazuh, siapin server terpisah atau VPS dengan spek yang memadai.

Prasyarat Sebelum Install Wazuh di VPS

Wazuh bukan tools ringan. Pastiin semua prasyarat di bawah ini terpenuhi sebelum mulai instalasi.

1. VPS dengan Spesifikasi yang Memadai

Ini bukan tools yang bisa jalan di VPS kentang. Minimum spek buat single-node deployment:

  • RAM: Minimal 8GB. Indexer (OpenSearch) sendiri udah makan 4-6GB. Sisanya buat manager, dashboard, dan OS
  • CPU: Minimal 4 vCPU. Indexing dan analisis log itu CPU-intensive, apalagi kalau agent-nya banyak
  • Storage: Minimal 50GB kosong. Log itu cepet numpuk – satu agent bisa generate ratusan MB log per hari tergantung aktivitas server
  • OS: Ubuntu 22.04 atau 24.04 LTS

Cara cek spek VPS kamu:

free -h          # cek RAM tersedia
df -h            # cek disk space
nproc            # cek jumlah CPU
lsb_release -a   # cek versi OS

2. Docker dan Docker Compose Sudah Terinstall

Semua komponen Wazuh bakal kita jalanin di Docker container. Kalau belum terinstall, ikutin dulu panduan Cara Install Docker di Ubuntu VPS. Verifikasi:

docker --version
docker compose version

3. Port yang Dibutuhin

Wazuh butuh beberapa port buat komunikasi antar komponen dan akses dashboard:

  • Port 443 – Dashboard web (HTTPS). Ini yang kamu akses lewat browser
  • Port 1514 – Komunikasi agent ke manager (event data). Agent ngirim log lewat port ini
  • Port 1515 – Agent enrollment. Dipakai pas agent pertama kali register ke manager
  • Port 55000 – Wazuh API. Dipakai dashboard buat komunikasi ke manager

Cek apakah port-port ini masih kosong:

sudo lsof -i :443
sudo lsof -i :1514
sudo lsof -i :1515
sudo lsof -i :55000

Penting: Kalau port 443 udah dipakai Nginx, Traefik, atau service lain, kamu harus atur reverse proxy-nya belakangan setelah Wazuh jalan normal, atau pindahin service yang existing ke port lain dulu.

4. Setting Kernel vm.max_map_count

Ini step yang paling sering kelewat sama pemula, padahal kalau kelewat, container indexer bakal restart terus tanpa henti (crash-loop). Wazuh indexer itu turunan dari OpenSearch, dan dia butuh jatah virtual memory area yang lebih gede dari default kernel Linux.

Cek nilai saat ini:

sysctl vm.max_map_count

Kalau nilainya kurang dari 262144, set dulu:

sudo sysctl -w vm.max_map_count=262144

Biar settingan ini gak ilang tiap reboot, tambahin ke file sysctl.conf:

echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf

Kenapa ini penting: OpenSearch (yang jadi basis indexer Wazuh) butuh banyak memory-mapped files buat indexing. Default Linux cuma ngasih 65530 area, sedangkan OpenSearch butuh minimal 262144. Tanpa setting ini, indexer bakal gagal start dan terus restart.

5. IP Publik dan Git

Kamu butuh IP publik yang bisa diakses buat login ke dashboard nanti. Selain itu, pastiin git udah terinstall buat clone repo Wazuh:

git --version
# kalau belum ada:
sudo apt install git -y

Cara Install Wazuh di VPS Step by Step

Sekarang masuk ke bagian inti. Ikutin langkah-langkah di bawah ini satu per satu.

Step-by-Step Installation Flow - Wazuh di VPS

Step 1 – Clone Repository Resmi Wazuh

Wazuh udah nyiapin Docker Compose setup yang siap pakai di repository resmi mereka. Clone dulu:

git clone https://github.com/wazuh/wazuh-docker.git -b v4.14.0
cd wazuh-docker/single-node/

Penjelasan:

  • -b v4.14.0: Clone branch versi spesifik. Pakai versi yang stabil, jangan clone branch master buat production. Cek versi terbaru di halaman tags GitHub
  • single-node/: Kita pakai setup single-node karena semua komponen (manager, indexer, dashboard) jalan di satu server. Ada juga folder multi-node/ kalau nanti mau scale ke beberapa server

Step 2 – Generate Certificate

Wazuh butuh TLS certificate buat komunikasi terenkripsi antar container (manager, indexer, dashboard). Untungnya semua udah disiapin lewat script bawaan, jadi kamu gak perlu generate manual pakai openssl:

docker compose -f generate-indexer-certs.yml run --rm generator

Penjelasan command:

  • -f generate-indexer-certs.yml: Pakai file compose khusus buat generate certificate, bukan file compose utama
  • run –rm generator: Jalanin service generator yang ada di file itu, lalu hapus container-nya setelah selesai. Certificate yang di-generate bakal disimpen di folder config/wazuh_indexer_ssl_certs/

Kalau prosesnya selesai tanpa error, kamu harusnya liat beberapa file .pem di folder certificate. Cek dengan:

ls -la config/wazuh_indexer_ssl_certs/

Step 3 – Jalankan Docker Compose

Sekarang jalanin semua komponen Wazuh:

docker compose up -d

Docker bakal download tiga image besar (manager, indexer, dashboard) dan jalanin container-nya di background. Proses pertama kali bisa makan waktu 5-10 menit tergantung kecepatan internet VPS, soalnya total image-nya lumayan besar (beberapa GB).

Penting: Setelah container jalan, indexer butuh waktu tambahan 2-5 menit buat inisialisasi index pertama kalinya. Jangan buru-buru buka dashboard, tunggu dulu sampai semua container statusnya healthy.

Step 4 – Cek Status Container

Cek apakah semua container udah jalan dengan bener:

docker compose ps

Kamu harusnya liat tiga container dengan status healthy:

  • wazuh.manager – status healthy
  • wazuh.indexer – status healthy (ini yang paling lama, bisa 2-5 menit)
  • wazuh.dashboard – status healthy

Kalau ada yang statusnya Restarting atau Exit, cek log-nya:

docker compose logs wazuh.indexer --tail 50
docker compose logs wazuh.manager --tail 50

Error paling umum di tahap ini adalah indexer yang crash-loop karena vm.max_map_count belum di-set (lihat prasyarat nomor 4).

Step 5 – Login Dashboard dan Ganti Password Default

Setelah semua container healthy, buka dashboard di browser:

https://ip-vps-kamu

Browser bakal ngasih warning soal certificate self-signed – itu normal, tinggal klik “Advanced” lalu “Proceed” atau “Accept the Risk”. Ini karena certificate yang di-generate di Step 2 bukan dari CA publik kayak Let”s Encrypt.

Login pakai kredensial default yang ada di file docker-compose.yml. Biasanya:

  • Username: admin
  • Password: SecretPassword (cek di file docker-compose.yml buat nilai pastinya)

Langkah pertama setelah login: GANTI PASSWORD. Ini bukan opsional. Dashboard yang masih pakai password bawaan itu target empuk buat siapa aja yang iseng nge-scan port 443 terbuka. Masuk ke menu Security > Internal Users, pilih user admin, lalu ganti password-nya dengan yang kuat (minimal 16 karakter, campuran huruf besar-kecil, angka, dan simbol).

Step 6 – Buka Port di Firewall

Biar agent dari server lain bisa konek ke Wazuh manager, buka port yang dibutuhin di UFW:

sudo ufw allow 443/tcp     # dashboard
sudo ufw allow 1514/tcp    # agent communication
sudo ufw allow 1515/tcp    # agent enrollment
sudo ufw status

Jangan buka port 55000 ke publik. Port ini buat Wazuh API internal (komunikasi dashboard ke manager). Kalau dashboard dan manager jalan di server yang sama (single-node), port ini gak perlu dibuka di firewall.

Nambahin Agent ke Server yang Mau Dipantau

Step 7 – Install Agent di Server Target

Manager doang tanpa agent itu kayak CCTV tanpa kamera – gak ada yang dipantau. Sekarang kita install agent di server yang mau dimonitor.

Di dashboard Wazuh, masuk ke menu Agents > Deploy new agent. Pilih OS server target (biasanya Linux/Ubuntu), lalu Wazuh bakal generate command instalasi yang udah disesuaikan. Contoh command-nya kurang lebih kayak gini:

# jalanin di server yang mau dipantau (bukan di server Wazuh)
curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/wazuh.gpg --import && chmod 644 /usr/share/keyrings/wazuh.gpg
echo "deb [signed-by=/usr/share/keyrings/wazuh.gpg] https://packages.wazuh.com/4.x/apt/ stable main" | tee /etc/apt/sources.list.d/wazuh.list
apt update && WAZUH_MANAGER="IP-SERVER-WAZUH" apt install wazuh-agent -y

Penting: Ganti IP-SERVER-WAZUH dengan IP publik server tempat Wazuh manager jalan. Command yang exact bisa beda tergantung versi, jadi selalu pakai command yang di-generate dashboard biar gak salah.

Setelah agent terinstall, start service-nya:

sudo systemctl daemon-reload
sudo systemctl enable wazuh-agent
sudo systemctl start wazuh-agent

Agent bakal otomatis konek ke manager lewat port 1514. Dalam beberapa detik, server target harusnya udah muncul di dashboard dengan status Active.

Step 8 – Konfigurasi Alert Rules

Wazuh udah punya ribuan rules deteksi bawaan yang langsung aktif begitu agent konek. Tapi ada beberapa yang perlu kamu perhatiin dan mungkin mau di-customize:

  • File Integrity Monitoring (FIM): Secara default, Wazuh udah monitor file-file kritis kayak /etc/passwd, /etc/shadow, dan /etc/ssh/. Kalau kamu mau tambahin folder lain (misalnya folder aplikasi), edit konfigurasi agent di /var/ossec/etc/ossec.conf pada server target
  • Brute Force Detection: Rules buat detect percobaan login gagal berulang udah aktif by default. Kamu bakal dapet alert kalau ada IP yang gagal login berkali-kali
  • Rootkit Detection: Wazuh secara berkala scan server buat detect rootkit dan malware yang umum
  • Log Level: Di dashboard, kamu bisa filter alert berdasarkan severity level (low, medium, high, critical). Fokus ke high dan critical dulu biar gak overwhelmed sama alert yang terlalu banyak

Testing dan Verifikasi

Step 9 – Verifikasi Agent Connected

Setelah agent diinstall dan di-start, verifikasi apakah dia udah beneran konek ke manager. Di dashboard Wazuh, masuk ke menu Agents. Server yang baru dipasang agent harusnya muncul di list dengan status Active (hijau).

Kalau status masih Disconnected atau Never connected, cek beberapa hal:

  • Pastiin agent service udah running: sudo systemctl status wazuh-agent
  • Pastiin port 1514 terbuka di firewall server Wazuh
  • Pastiin IP manager yang di-set di agent udah bener: cek di /var/ossec/etc/ossec.conf pada server target, cari tag <address>
  • Cek log agent buat error: sudo tail -50 /var/ossec/logs/ossec.log

Kamu juga bisa verifikasi dari sisi manager lewat command line:

docker exec -it single-node-wazuh.manager-1 /var/ossec/bin/agent_control -l

Command ini bakal nunjukin list semua agent yang terdaftar beserta statusnya.

Step 10 – Test File Integrity Monitoring

Ini cara paling gampang buat verifikasi Wazuh beneran kerja. Di server yang udah dipasang agent, bikin perubahan kecil di file yang dimonitor:

# bikin file test di folder yang dimonitor
sudo touch /etc/test-wazuh-fim.txt

# tunggu 1-2 menit biar agent nge-scan

# hapus file test
sudo rm /etc/test-wazuh-fim.txt

Setelah 1-2 menit (tergantung interval scan FIM), buka dashboard Wazuh dan masuk ke menu Security Events atau Integrity Monitoring. Kamu harusnya liat alert tentang file baru yang terdeteksi dan file yang dihapus di folder /etc/.

Kalau alert muncul, selamat – Wazuh udah berfungsi dengan bener. Sistem kamu sekarang bisa detect perubahan file yang gak diharapkan di server yang dipantau.

Test tambahan yang bisa kamu coba:

  • Test brute force detection: Coba login SSH ke server target pakai password salah beberapa kali. Wazuh harusnya nge-trigger alert tentang failed authentication attempts
  • Test log analysis: Cek di dashboard apakah log dari server target (syslog, auth log) udah masuk dan bisa dicari
  • Test vulnerability scan: Di dashboard, masuk ke menu Vulnerability Detection buat liat apakah ada software di server target yang punya kerentanan keamanan

Yang Perlu Diperhatiin Setelah Install Wazuh

Ada beberapa masalah yang sering muncul setelah install. Baca bagian ini biar kamu gak perlu debugging berjam-jam.

Indexer Crash-Loop (Restart Terus)

Ini masalah nomor satu yang dialami hampir semua orang yang baru install Wazuh. Container wazuh.indexer terus restart tanpa henti. Penyebab paling umum:

  • vm.max_map_count belum di-set: Ini penyebab 90% kasus crash-loop indexer. Cek dengan sysctl vm.max_map_count. Kalau nilainya kurang dari 262144, set ulang sesuai prasyarat nomor 4
  • RAM gak cukup: Indexer butuh minimal 4GB RAM buat jalan. Kalau VPS kamu cuma 4GB total, OS dan service lain udah makan sebagian. Cek dengan free -h pas container lagi jalan
  • Disk penuh: Indexer butuh disk space buat nyimpen index. Kalau disk udah mepet, indexer gagal nulis dan crash. Cek dengan df -h

Disk Usage Exceeded Flood-Stage Watermark

Kalau di log indexer muncul error disk usage exceeded flood-stage watermark, artinya disk kamu udah hampir penuh dan indexer nolak nulis data baru buat proteksi diri. Solusinya:

  • Hapus log lama: Di dashboard, masuk ke Index Management dan hapus index yang udah lama. Atau setup index lifecycle policy biar log lama otomatis kehapus setelah sekian hari
  • Tambahin disk: Kalau volume log emang banyak, tambahin disk space di VPS
  • Atur retensi: Set retention policy biar log cuma disimpen 30 atau 90 hari, tergantung kebutuhan. Ini penting banget buat long-term operation

Certificate Error – Manager dan Indexer Gagal Connect

Kalau manager dan indexer gagal saling connect dengan error certificate, biasanya ini kejadian kalau kamu ngulang generate certificate tapi container lama belum dihapus total. Certificate yang lama masih nempel di volume Docker.

Solusinya, reset dari nol:

# stop dan hapus semua container + volume
docker compose down -v

# hapus folder certificate lama
rm -rf config/wazuh_indexer_ssl_certs/

# generate certificate baru
docker compose -f generate-indexer-certs.yml run --rm generator

# jalanin ulang
docker compose up -d

Warning: Flag -v di docker compose down bakal hapus semua volume termasuk data log yang udah tersimpen. Kalau kamu mau keep data lama, jangan pakai flag -v dan coba troubleshoot certificate-nya secara manual.

Dashboard Gak Bisa Diakses

Kalau dashboard gak mau kebuka di browser padahal semua container healthy, cek:

  • Port 443 di-block firewall: Cek sudo ufw status dan pastiin port 443 udah di-allow
  • Port 443 dipakai service lain: Kalau ada Nginx atau Traefik yang udah jalan di port 443, Wazuh gak bisa bind ke port yang sama. Pindahin salah satu ke port lain, atau setup reverse proxy
  • Firewall provider VPS: Beberapa provider (DigitalOcean, Vultr, Hetzner) punya firewall tambahan di level panel. Pastiin port 443 juga terbuka di sana
  • Pakai HTTPS, bukan HTTP: Dashboard Wazuh cuma bisa diakses lewat HTTPS. Kalau kamu ketik http:// di browser, gak bakal kebuka

Kesimpulan

Wazuh emang bukan tools yang ringan atau gampang di-setup dibanding CrowdSec atau Fail2Ban. Tapi kalau kamu serius soal keamanan server dan butuh visibility lengkap tentang apa yang terjadi di dalam infrastruktur kamu, Wazuh ngasih kemampuan yang gak bisa ditandingin tools monitoring biasa. File integrity monitoring, log analysis, vulnerability detection, dan compliance checking – semuanya dari satu dashboard.

Tips buat yang baru mulai: jangan langsung pasang agent ke semua server produksi sekaligus. Mulai dari satu server yang paling gak kritis dulu, biar kamu terbiasa sama dashboard dan alert-nya sebelum rollout ke seluruh fleet. Fokus ke alert level high dan critical dulu, jangan langsung coba baca semua alert yang masuk – bisa overwhelming.

Yang paling penting, Wazuh itu pelengkap, bukan pengganti. Di server yang udah jalan CrowdSec buat blocking, UFW buat firewall, dan Cloudflare Tunnel buat expose service, nambahin Wazuh itu kayak masang kamera pengawas di atas gembok yang udah ada. Bukan gantiin gemboknya, tapi nambahin layer visibility yang bikin kamu tau persis apa yang terjadi di server kapan aja.

Jundi Husni Mubaraq

Jundi Husni Mubaraq

Saya seorang software engineer yang sejak awal 2026 megang penuh (sendirian) tanggung jawab infrastruktur server di tempat saya kerja: deploy dan maintain server Linux Ubuntu on-premises, bangun keamanan berlapis pakai CrowdSec dan Cloudflare, kelola job scheduling dan monitoring pakai Cronicle, deploy aplikasi containerized pakai Docker, sampai ngurusin mail server korporat dari nol. Sebelumnya saya 3+ tahun jadi Software Engineer/Fullstack Developer di beberapa perusahaan, termasuk proyek skala internasional (EUDR compliance system buat Lindt & Sprungli) dan sistem rumah sakit (SIMRS, rekam medis elektronik, integrasi BPJS Kesehatan) di RS PKU Muhammadiyah Surakarta. jundi.hm ini tempat saya dokumentasiin apa yang beneran saya kerjain dan pelajarin di lapangan, bukan sekadar riset teori, S.Kom dari Universitas Duta Bangsa Surakarta jadi bekal awal, tapi yang nulis di sini adalah pengalaman langsung ngelola server production sehari-hari. Selengkapnya: https://iam.jundi.hm

Lihat Juga Nih

Selanjutnya Nih

Kasih Komentar

Email kamu gak bakal ditampilin ke publik. Kalau ada tanda ini artinya wajib diisi ya *

Rekomendasi.

Lagi Viral.