Post

Wazuh SIEM: Centralized Threat Detection

Deploying Wazuh, a SIEM/EDR platform, and enrolling agents across all my machines for centralized log ingestion and real-time threat detection.

Wazuh SIEM: Centralized Threat Detection

Overview

One of the motivations for rebuilding the lab was visibility. In V1, attacks were running against lab machines with no centralized logging, no alerting, and no way to know what was actually happening at the endpoint level.

Wazuh addresses this goal. It is an open-source SIEM and endpoint detection platform that ingests logs from enrolled agents, applies detection rules, and surfaces alerts in a centralized dashboard. This post covers deploying it as a single-node instance and enrolling agents across all my machines.


What Wazuh Provides

Wazuh delivers the same detection workflow used in production SOC environments:

ComponentFunction
Wazuh ServerReceives logs from agents, applies detection rules, generates alerts
Wazuh IndexerStores events and alerts (built on OpenSearch)
Wazuh DashboardWeb UI for querying events, investigating alerts, and managing agents

Agents are lightweight processes installed on each endpoint. They continuously ship logs, file integrity events, and security telemetry to the server. The server decodes events, matches them against rules, and fires alerts when thresholds are met.

For a homelab, this creates a practical learning environment for core SOC skills: log analysis, rule writing, threshold tuning, and alert investigation. All against real machines generating real telemetry.

Architecture Diagram Wazuh Architecture Diagram


Deployment

Why the OVA Method

Wazuh offers two installation paths:

MethodProsCons
Quickstart scriptFlexible, installs on existing LinuxSensitive to OS version, memory, network config
Pre-built OVABoots into known-good state immediatelyLess customizable

The OVA was chosen because it eliminates installation variables entirely. The indexer, server, and dashboard come pre-configured and running. For a lab where the goal is detection and rule writing (not installation troubleshooting), this is the cleaner starting point.

VM Configuration

SettingValue
VM ID300
DeploymentSingle-node (server + indexer + dashboard)
OSWazuh official OVA
VLAN20 — Lab
CPU4 cores
RAM8 GB
Disk25 GB

4 cores and 8 GB RAM is the recommended minimum for a multi-agent single-node deployment. Running below this causes the indexer to degrade under load.

The OVA was downloaded to pavilion and imported as a VM disk in Proxmox, no OS installation step required.

1
wget https://packages.wazuh.com/4.x/vm/wazuh-4.14.5.ova

Access

Wazuh is proxied through NPM at https://wazuh.jamcre.dev. NPM requires proxy_ssl_verify off for this backend since Wazuh serves a self-signed certificate. Direct access at https://192.168.20.XX:443 remains available as a fallback.

Wazuh dashboard Wazuh dashboard after initial deployment


Agent Enrollment

Four machines, four different operating systems, each enrolled with a Wazuh agent reporting to the central manager.

AgentOSInstall MethodStatus
citadelWindows 11MSI installer✅ Active
pavilionLinux (Proxmox host)DEB package✅ Active
annexmacOS SequoiaPKG installer✅ Active
inspironUbuntu Server 24.04DEB package✅ Active

Windows and macOS installations followed standard Wazuh documentation without issues. The Linux DEB package installations encountered two problems worth documenting.

Issue 1: Missing lsb-release Dependency

On minimal Debian-based systems, lsb-release is not installed by default. The Wazuh agent package halts installation silently if it is missing.

Fix: Install the dependency first:

1
apt install lsb-release -y

Issue 2: MANAGER_IP Placeholder Not Replaced

The DEB installer does not always populate the MANAGER_IP value in /var/ossec/etc/ossec.conf. The literal placeholder string remains in the config file, causing the agent service to refuse to start with no obvious terminal error.

Diagnosis: Check the agent log directly:

1
cat /var/ossec/logs/ossec.log

Fix: Edit ossec.conf, replace the placeholder with the actual Wazuh server IP, then register and restart:

1
2
/var/ossec/bin/agent-auth -m 192.168.20.XX
systemctl restart wazuh-agent

These issues are not prominently documented in the official guide. If your Linux agent silently fails to start, check for these two conditions first.

All agents active All four agents active and reporting to the Wazuh manager

Some of the agent names don’t match because they’re screenshots taken from the future.


What’s Next

Wazuh is running on VLAN 20 with agents enrolled across all machines. Events from Windows, Linux, and macOS are flowing into the indexer and visible in the dashboard. The detection infrastructure is in place.

Next: writing custom detection rules, four rules covering SSH brute force, Windows failed logon spikes, and unauthorized privilege escalation, each tested and verified against live attack simulations.

This post is licensed under CC BY 4.0 by the author.