Skip to content
Wazuh Open-Source SIEM XDR Platform
Security Analytics

Wazuh: Multi-Node SIEM & XDR for Enterprise Security

A complete practitioner's guide to deploying Wazuh in a production multi-node architecture. Covers the Wazuh Server (Manager), Wazuh Indexer (OpenSearch-based), Wazuh Dashboard, and Wazuh Agent in depth - including cluster configuration, hardware sizing, compliance use cases, real-world threat detection scenarios, and TCO comparison against Splunk, IBM QRadar, and Microsoft Sentinel.

Pros

  • Completely free and open-source - zero licensing costs for unlimited agents and data ingestion
  • Unified SIEM + XDR platform: log analysis, FIM, SCA, vulnerability detection, and active response in one agent
  • Native MITRE ATT&CK mapping on every alert - immediate adversary tactic context for every detection
  • Multi-node cluster architecture scales horizontally to handle millions of events per day
  • Built-in compliance dashboards for PCI DSS, HIPAA, GDPR, NIST 800-53, TSC, and CMMC
  • 620,000+ community members and 10M+ Docker pulls - the most widely deployed open-source SIEM on the planet
  • Deep cloud integrations: AWS, Azure, GCP, Office 365, Docker, and Kubernetes monitoring out-of-the-box

Cons

  • No vendor-managed SaaS option - you own the infrastructure, patching, and scaling
  • Initial deployment and rule tuning requires strong Linux and security engineering skills
  • High EPS environments require careful Indexer cluster sizing and ongoing performance tuning
  • Custom decoder/rule authoring has a steep learning curve compared to commercial alternatives
  • No built-in SOAR - requires Shuffle or TheHive integration for automated response workflows

In a market where enterprise SIEM platforms charge $100,000 to $500,000 per year in licensing fees, Wazuh has built something remarkable: a production-grade, unified SIEM and XDR platform used by over 620,000 organizations worldwide - at zero licensing cost.

Wazuh is not a hobbyist project or a learning sandbox. It protects the infrastructure of banks, government agencies, healthcare systems, and Fortune 500 companies. It processes millions of security events per day. It satisfies PCI DSS, HIPAA, GDPR, and NIST 800-53 compliance requirements in regulated industries.

This is the complete practitioner’s guide to deploying it the right way - at production scale, with high availability, and with the depth of configuration required to extract its full defensive value.


What Wazuh Actually Is

Wazuh is a unified open-source security platform that combines SIEM (Security Information and Event Management) and XDR (Extended Detection and Response) capabilities into a single, cohesive ecosystem.

The platform does not compromise: it delivers capabilities that compete directly with Splunk Enterprise Security, IBM QRadar, and Microsoft Sentinel - not by approximating their features, but by implementing them fully in a freely available, self-hosted architecture.

CapabilityWhat Wazuh Delivers
Log Collection & AnalysisAgents on every endpoint, syslog from network devices, cloud API polling, container log collection
File Integrity Monitoring (FIM)Real-time detection of file, directory, and registry changes across all monitored hosts
Security Configuration Assessment (SCA)Automated CIS Benchmark compliance checks with pass/fail scoring and remediation guidance
Vulnerability DetectionCross-references installed package inventory against NVD, OSV, and vendor CVE databases
Threat Detection3,000+ built-in detection rules mapped to MITRE ATT&CK TTPs
Active ResponseAutomated firewall blocks, process kills, and custom script execution on agent hosts
Cloud SecurityAWS CloudTrail, Azure Activity Logs, GCP Audit Logs, Office 365 APIs - all natively ingested
Container SecurityDocker and Kubernetes monitoring with audit log collection
Compliance ReportingPre-built dashboards for PCI DSS, HIPAA, GDPR, NIST 800-53, TSC, CMMC
MITRE ATT&CKEvery alert tagged with tactic, technique, and sub-technique identifiers

The Four-Component Architecture

Wazuh’s multi-node architecture separates four distinct functional components, each of which can be independently scaled, clustered, and optimized. Understanding what each component does - and what happens when it is under-resourced - is the foundation of a successful production deployment.

Component 1: Wazuh Agent

The Wazuh Agent is the lightweight endpoint sensor installed on every monitored host. It is the eyes and ears of the platform.

Supported Platforms:

  • Linux (all major distributions: Ubuntu, RHEL, CentOS, Debian, Amazon Linux, SUSE)
  • Windows (7 through Server 2022)
  • macOS (10.12 Sierra through Ventura and later)
  • FreeBSD, OpenBSD, Solaris, AIX, HP-UX

What the Agent Collects:

┌─────────────────────────────── Wazuh Agent ────────────────────────────────┐
│                                                                             │
│  Log Collection     File Integrity    System Inventory    Active Response   │
│  ─────────────      ──────────────    ────────────────    ───────────────   │
│  • /var/log/*       • FIM engine      • Running procs     • firewall-drop   │
│  • Windows EVT      • Real-time       • Packages/ports    • kill-process    │
│  • Syslog           • Scheduled scan  • OS fingerprint    • Custom scripts  │
│  • Application      • Audit rules     • HW inventory      • disable-user    │
│  • Custom files     • Diff storage    • Network ifaces    • quarantine      │
│                                                                             │
│  Security Configuration Assessment        Vulnerability Detector           │
│  ─────────────────────────────────        ────────────────────────         │
│  • CIS Benchmarks (Linux, Windows)        • Package → CVE correlation       │
│  • Pass/fail/NA scoring                   • NVD / OSV database queries      │
│  • Policy compliance %                    • CVSS scoring + severity         │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘
                │  Encrypted TLS (port 1514)
                ▼
         [Wazuh Server]

Agent Resource Footprint:

  • CPU: < 0.5% average on modern hardware
  • RAM: ~20-40 MB idle, up to 150 MB during FIM scans
  • Network: ~1 Kbps per agent average (bursts during FIM/SCA)

The agent connects to the Wazuh Server on port 1514/TCP (encrypted) and receives configuration updates and active response commands back through the same channel. Agents can operate in proxy mode through a Wazuh Agent Enrollment gateway, eliminating direct firewall exposure of the server cluster.


Component 2: Wazuh Server (Manager)

The Wazuh Server is the analytical engine. It receives raw events from agents, decodes them, applies detection rules, generates alerts, and forwards structured results to the Indexer.

Internal Processing Pipeline:

[Agent Events] ──► [Input Queue] ──► [Pre-Decoding] ──► [Decoding Engine]
                                                               │
                              ┌────────────────────────────────┘
                              ▼
                     [Rule Engine] ──► [Alert Generation] ──► [Filebeat]
                          │                    │                   │
                   [Active Response]     [Syslog Output]    [Wazuh Indexer]
                   [Email Alerts]        [CEF/LEEF Output]

Key Processing Components:

ComponentFunction
Decoder Library3,000+ XML decoders that parse raw log text into structured fields (src_ip, user, action, event_id, etc.)
Rule Engine3,000+ detection rules with composable logic, frequency counters, correlation windows, and MITRE ATT&CK tags
CDB ListsHash-based lookup tables for known-bad IPs, malicious domains, whitelisted users - enable high-speed enrichment
Active Response DaemonExecutes firewall rules, process termination, and custom scripts on agent endpoints in response to triggered alerts
Cluster DaemonSynchronizes rule sets, decoders, CDB lists, and agent keys across all nodes in a Server cluster
FilebeatShips structured JSON alerts from the Server to the Wazuh Indexer over TLS

Custom Rule Example - Detecting LSASS Memory Access:

<rule id="100100" level="12">
  <if_group>windows</if_group>
  <field name="win.system.eventID">^10$</field>
  <field name="win.eventdata.targetImage" type="pcre2">(?i)lsass\.exe</field>
  <field name="win.eventdata.grantedAccess" type="pcre2">0x1410|0x1010</field>
  <description>Possible credential dumping - suspicious LSASS access detected</description>
  <mitre>
    <id>T1003.001</id>
  </mitre>
  <group>credential_access,lsass,windows</group>
</rule>

Hardware Sizing (Per Server Node):

EnvironmentAgentsEPSCPURAMDisk
SmallUp to 500< 5004 cores8 GB500 GB SSD
Medium500-3,000500-3,0008 cores16 GB1 TB SSD
Large3,000-10,0003,000-10,00016 cores32 GB2 TB SSD
Cluster10,000+10,000+Multiple nodes16 GB/node1 TB SSD/node

Component 3: Wazuh Indexer

The Wazuh Indexer is the data persistence and search layer - a purpose-tuned distribution of OpenSearch, optimized for security alert ingestion and high-performance querying.

What the Indexer Stores:

  • All alerts generated by the Wazuh Server (structured JSON)
  • Raw event archives (optional, enabled per agent group)
  • FIM event database (file change history)
  • Vulnerability scan results
  • SCA compliance check results
  • Statistical summaries and agent status data

Index Architecture:

wazuh-alerts-4.x-YYYY.MM.DD       ← Daily alert index (primary search target)
wazuh-archives-4.x-YYYY.MM.DD     ← Raw event archive (optional, very high volume)
wazuh-monitoring-4.x-YYYY.MM.DD   ← Agent health and statistics
wazuh-statistics-4.x-YYYY.MM.DD   ← Server performance metrics

Multi-Node Cluster Configuration (config.yml):

# /etc/wazuh-indexer/opensearch.yml (Node 1 - Master-eligible)
network.host: 192.168.1.10
node.name: wazuh-indexer-1
cluster.name: wazuh-cluster

# Cluster peers
discovery.seed_hosts:
  - "192.168.1.10:9300"
  - "192.168.1.11:9300"
  - "192.168.1.12:9300"

cluster.initial_master_nodes:
  - "wazuh-indexer-1"
  - "wazuh-indexer-2"
  - "wazuh-indexer-3"

# Performance tuning
indices.query.bool.max_clause_count: 2048
thread_pool.search.queue_size: 10000

# Security
plugins.security.ssl.transport.pemcert_filepath: /etc/wazuh-indexer/certs/node.pem
plugins.security.ssl.transport.pemkey_filepath: /etc/wazuh-indexer/certs/node-key.pem
plugins.security.ssl.transport.pemtrustedcas_filepath: /etc/wazuh-indexer/certs/root-ca.pem
plugins.security.ssl.http.enabled: true

Hardware Sizing (Per Indexer Node):

EnvironmentDaily AlertsRetentionCPURAMDisk (SSD)
Small< 1M90 days4 cores8 GB2 TB
Medium1M-10M90 days8 cores16 GB4 TB
Large10M-50M90 days16 cores32 GB8 TB
Enterprise50M+180 days16 cores × 5+ nodes32 GB/node16 TB/node

Critical: Always use SSD storage for Indexer nodes. HDD-based clusters exhibit severe search latency degradation under even moderate alert loads. Pre-warming JVM heap to 50% of available RAM (max 31 GB per node) is essential for production stability.


Component 4: Wazuh Dashboard

The Wazuh Dashboard is the operational interface for the entire platform - a customized OpenSearch Dashboards distribution with purpose-built security modules for every Wazuh capability.

Built-in Modules:

ModuleWhat It Shows
OverviewReal-time alert stream, severity breakdown, top agents, top rules fired
Security EventsSearchable, filterable full alert explorer with KQL query support
Integrity MonitoringFIM events by host, file change timelines, permission drift tracking
Vulnerability DetectionCVE inventory by host, CVSS score distribution, patch prioritization view
Configuration AssessmentSCA pass/fail by policy and host, compliance score trending
MITRE ATT&CKHeatmap of detected TTPs, technique drill-down to contributing alerts
Threat HuntingOpenSearch Dashboards Discover for ad-hoc investigation
Regulatory CompliancePCI DSS, HIPAA, GDPR, NIST 800-53, TSC dashboards
Cloud SecurityAWS/Azure/GCP/Office365 event explorer
Agent ManagementAgent enrollment, group configuration, status monitoring

Dashboard Configuration (wazuh.yml):

hosts:
  - default:
      url: https://wazuh-indexer-1
      port: 9200
      username: kibanaserver
      password: kibanaserver_password
      
# API connection to Wazuh Manager
wazuh:
  api:
    selector: true
    host: https://wazuh-server-1
    port: 55000
    username: wazuh-wui
    password: wazuh-wui-password
    run_as: false

Multi-Node Production Architecture Blueprint

This is the reference architecture for a production Wazuh deployment capable of handling 5,000-15,000 agents with high availability across all components.

                    ┌──────────────────────────────────────────┐
                    │           MONITORED ENDPOINTS             │
                    │  Windows Servers / Linux / macOS / Cloud  │
                    └──────────────┬───────────────────────────┘
                                   │  TLS 1514/TCP
                                   ▼
                    ┌──────────────────────────────┐
                    │      LOAD BALANCER (HAProxy)  │
                    │      (agent traffic)          │
                    └──────┬───────────────┬────────┘
                           │               │
               ┌───────────▼──┐     ┌──────▼───────────┐
               │   Wazuh       │     │    Wazuh          │
               │   Server 1    │     │    Server 2       │
               │  (Master)     │ ◄──► │   (Worker)       │
               └───────────────┘     └──────────────────┘
                   │  Filebeat TLS 9200            │
                   └──────────────┬────────────────┘
                                  │
           ┌──────────────────────┼──────────────────────┐
           │                      │                      │
  ┌────────▼──────┐   ┌───────────▼────┐   ┌────────────▼───┐
  │  Wazuh        │   │  Wazuh         │   │  Wazuh         │
  │  Indexer 1    │◄──►  Indexer 2     │◄──►  Indexer 3     │
  │  (Master)     │   │  (Data)        │   │  (Data)        │
  └───────────────┘   └────────────────┘   └────────────────┘
           │
  ┌────────▼──────┐
  │  Wazuh        │
  │  Dashboard    │
  │  (HTTPS 443)  │
  └───────────────┘

Why 3 Indexer Nodes Minimum: With 3 nodes and 1 replica shard per index, the cluster can suffer the loss of any single node without losing data access or write capability. The cluster maintains quorum (2 of 3 master-eligible nodes remain) and continues operating normally until the failed node is restored or replaced.


Deployment Guide: Step-by-Step Multi-Node Install

Step 1: Generate SSL/TLS Certificates

This is the most critical pre-deployment step. All Wazuh component communication is TLS-encrypted, and certificates must be distributed correctly.

# Download the certificate generation tool
curl -sO https://packages.wazuh.com/4.7/wazuh-certs-tool.sh
curl -sO https://packages.wazuh.com/4.7/config.yml

# Edit config.yml to define your node IPs
cat > config.yml << 'EOF'
nodes:
  indexer:
    - name: wazuh-indexer-1
      ip: 192.168.1.10
    - name: wazuh-indexer-2
      ip: 192.168.1.11
    - name: wazuh-indexer-3
      ip: 192.168.1.12

  server:
    - name: wazuh-server-1
      ip: 192.168.1.20
      node_type: master
    - name: wazuh-server-2
      ip: 192.168.1.21
      node_type: worker

  dashboard:
    - name: wazuh-dashboard
      ip: 192.168.1.30
EOF

# Generate all certificates
bash ./wazuh-certs-tool.sh -A

# This creates wazuh-certificates.tar with certs for all nodes
ls ./wazuh-certificates/

Step 2: Install and Configure Wazuh Indexer Cluster (All 3 Nodes)

# On each Indexer node (repeat with appropriate node name)
curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | gpg --dearmor | \
  sudo tee /usr/share/keyrings/wazuh.gpg > /dev/null

echo "deb [signed-by=/usr/share/keyrings/wazuh.gpg] \
  https://packages.wazuh.com/4.x/apt/ stable main" | \
  sudo tee /etc/apt/sources.list.d/wazuh.list

sudo apt-get update && sudo apt-get install -y wazuh-indexer

# Deploy this node's certificates
NODE_NAME="wazuh-indexer-1"  # Change per node
tar -xf wazuh-certificates.tar -C /etc/wazuh-indexer/certs/ \
    ./${NODE_NAME}.pem ./${NODE_NAME}-key.pem ./admin.pem \
    ./admin-key.pem ./root-ca.pem

# Set permissions
chmod 500 /etc/wazuh-indexer/certs
chmod 400 /etc/wazuh-indexer/certs/*
chown -R wazuh-indexer:wazuh-indexer /etc/wazuh-indexer/certs

# Start and initialize
sudo systemctl enable --now wazuh-indexer

# After ALL 3 nodes are running, initialize the cluster (run once from node 1)
/usr/share/wazuh-indexer/bin/indexer-security-init.sh

Step 3: Install Wazuh Server Cluster

# On Wazuh Server 1 (Master)
sudo apt-get install -y wazuh-manager

# Configure cluster in /var/ossec/etc/ossec.conf
cat >> /var/ossec/etc/ossec.conf << 'EOF'
<cluster>
  <name>wazuh</name>
  <node_name>wazuh-server-1</node_name>
  <node_type>master</node_type>
  <key>c98b62a9b0169f24c0aef266747f7f2f</key>  <!-- 32-char random string -->
  <port>1516</port>
  <bind_addr>0.0.0.0</bind_addr>
  <nodes>
    <node>192.168.1.20</node>
    <node>192.168.1.21</node>
  </nodes>
  <hidden>no</hidden>
  <disabled>no</disabled>
</cluster>
EOF

# Install and configure Filebeat to forward alerts to Indexer
sudo apt-get install -y filebeat
curl -so /etc/filebeat/filebeat.yml \
  https://packages.wazuh.com/4.7/tpl/wazuh/filebeat/filebeat.yml

# Configure Indexer output in filebeat.yml
sed -i 's/YOUR_ELASTIC_SERVER_IP/192.168.1.10,192.168.1.11,192.168.1.12/' \
  /etc/filebeat/filebeat.yml

sudo systemctl enable --now wazuh-manager filebeat

Step 4: Install Wazuh Dashboard

sudo apt-get install -y wazuh-dashboard

# Configure /etc/wazuh-dashboard/wazuh.yml
cat > /etc/wazuh-dashboard/wazuh.yml << 'EOF'
hosts:
  - default:
      url: https://192.168.1.10
      port: 9200
      username: kibanaserver
      password: kibanaserver_password
EOF

# Configure /etc/wazuh-dashboard/opensearch_dashboards.yml
cat >> /etc/wazuh-dashboard/opensearch_dashboards.yml << 'EOF'
server.host: 192.168.1.30
server.port: 443
opensearch.hosts: ["https://192.168.1.10:9200"]
opensearch.ssl.verificationMode: certificate
EOF

sudo systemctl enable --now wazuh-dashboard

Step 5: Deploy Agents at Scale

# Linux agent deployment (one-liner for automation)
curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | gpg --dearmor | \
  sudo tee /usr/share/keyrings/wazuh.gpg > /dev/null

echo "deb [signed-by=/usr/share/keyrings/wazuh.gpg] \
  https://packages.wazuh.com/4.x/apt/ stable main" | \
  sudo tee /etc/apt/sources.list.d/wazuh.list

WAZUH_MANAGER="192.168.1.20" WAZUH_AGENT_GROUP="linux-servers" \
  sudo apt-get install -y wazuh-agent

sudo systemctl enable --now wazuh-agent

# Windows agent deployment via PowerShell (for GPO/SCCM automation)
Invoke-WebRequest -Uri "https://packages.wazuh.com/4.x/windows/wazuh-agent-4.7.5-1.msi" `
  -OutFile "wazuh-agent.msi"

msiexec /i wazuh-agent.msi WAZUH_MANAGER="192.168.1.20" `
  WAZUH_AGENT_GROUP="windows-workstations" /qn /norestart

NET START WazuhSvc

Capability Deep Dive: File Integrity Monitoring

FIM is one of Wazuh’s most operationally valuable capabilities - and one of the most frequently misunderstood. It does not just alert on file changes. It stores the full diff of what changed, when it changed, under which process, and by which user.

Configuration Example - Protecting Web Server Root

<!-- In /var/ossec/etc/ossec.conf or agent group shared.conf -->
<syscheck>
  <!-- Real-time monitoring of web root -->
  <directories realtime="yes" report_changes="yes" check_all="yes">
    /var/www/html
  </directories>

  <!-- Scheduled monitoring of system binaries (no realtime needed - audit is better) -->
  <directories check_all="yes" check_sum="yes">
    /usr/bin,/usr/sbin,/bin,/sbin
  </directories>

  <!-- Monitor Windows registry for persistence mechanisms -->
  <windows_registry check_all="yes">
    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
  </windows_registry>

  <!-- Ignore noisy paths -->
  <ignore>/var/www/html/cache</ignore>
  <ignore type="sregex">\.log$</ignore>

  <!-- Alert on these regardless of ignore rules -->
  <nodiff>
    /var/www/html/.htaccess
    /etc/passwd
    /etc/shadow
  </nodiff>

  <scan_time>02:00</scan_time>
  <scan_day>saturday</scan_day>
</syscheck>

What a FIM Alert Looks Like in TheHive/Dashboard:

  • Timestamp, agent, file path
  • Event type: added / modified / deleted
  • Previous checksum (MD5, SHA1, SHA256)
  • New checksum
  • Diff of file content (for text files)
  • File owner/permissions before and after
  • Process that made the change (via auditd integration)

Capability Deep Dive: Active Response

Active Response is Wazuh’s built-in automated containment mechanism. When a rule triggers at a defined severity level, the Server can instruct the relevant agent to execute a predefined response action within milliseconds.

Built-in Responders

ResponderActionPlatforms
firewall-dropAdd iptables/Windows Firewall rule to block srcipLinux, Windows
disable-accountLock user account via passwd or net userLinux, Windows
kill-processTerminate a suspicious process by PIDLinux, Windows
host-denyAdd entry to /etc/hosts.denyLinux
route-nullNull-route a source IPLinux
restart-wazuhRestart the agent (useful for config refresh)All

Custom Active Response Example - Block SSH Brute Force

<!-- Define the command -->
<command>
  <name>firewall-drop-ssh-brute</name>
  <executable>firewall-drop.sh</executable>
  <timeout_allowed>yes</timeout_allowed>
</command>

<!-- Link command to rule trigger -->
<active-response>
  <command>firewall-drop-ssh-brute</command>
  <location>local</location>          <!-- Execute on the agent being attacked -->
  <rules_id>5763</rules_id>           <!-- Wazuh rule: SSH auth failure x10 -->
  <timeout>3600</timeout>             <!-- Auto-unblock after 1 hour -->
  <repeated_offenders>30,60,120</repeated_offenders>  <!-- Escalating timeouts -->
</active-response>

Compliance Coverage: Built-in Regulatory Frameworks

This is where Wazuh delivers enormous value in regulated industries. Every compliance framework ships with pre-mapped rules and purpose-built dashboards that can be presented to auditors.

FrameworkCoverage
PCI DSS v4.0Requirements 1-12 mapped to Wazuh rules; FIM covers req. 10 and 11; SCA covers req. 2, 6, 7
HIPAAAdministrative, physical, and technical safeguards; audit logging; PHI access monitoring
GDPRData access tracking, breach detection, integrity verification
NIST 800-53Controls across Identify, Protect, Detect, Respond, and Recover
TSC (SOC 2)Security, availability, confidentiality, and processing integrity controls
CMMC Level 2Access control, audit log, incident response, configuration management

PCI DSS Requirement 10 in Practice

PCI DSS Requirement 10 mandates logging and monitoring of all access to system components and cardholder data. Wazuh addresses this directly:

<!-- Enable audit logging for all root commands (PCI DSS 10.2.2) -->
<localfile>
  <log_format>audit</log_format>
  <location>/var/log/audit/audit.log</location>
</localfile>

<!-- Monitor all access to the cardholder data directory (PCI DSS 10.2.1) -->
<syscheck>
  <directories realtime="yes" check_all="yes" report_changes="yes" 
               whodata="yes">
    /var/data/cardholder
  </directories>
</syscheck>

The Dashboard’s PCI DSS module then provides a requirements matrix with pass/fail status for each sub-requirement, generating audit-ready evidence with a single export.


TCO Analysis: Wazuh vs. Commercial SIEM Platforms

Licensing Cost Comparison (5,000 Endpoints, 3-Year Horizon)

PlatformYear 1Year 2Year 33-Year Total
Wazuh (open-source)$0$0$0$0
Splunk Enterprise Security$240,000$240,000$240,000$720,000
IBM QRadar$180,000$180,000$180,000$540,000
Microsoft Sentinel$85,000$95,000$105,000$285,000
Elastic SIEM (Enterprise)$65,000$65,000$65,000$195,000

Licensing costs only. Infrastructure and labor not included.

Full TCO Model (Wazuh Multi-Node Production)

Cost CategoryYear 1Years 2-3 (per year)
Licensing$0$0
Infrastructure (3 Indexer + 2 Server + 1 Dashboard nodes)$18,000$6,000 (maintenance)
Initial deployment engineering (one-time)$15,000-25,000-
Ongoing operations (0.5 FTE SecOps/Linux Admin)$40,000-60,000$40,000-60,000
Wazuh Commercial Support (optional)$12,000$12,000
Total Year 1$85,000-$115,000-
Total Years 2-3 (avg)-$58,000-$78,000
3-Year Total$200,000-$270,000

Even with full infrastructure, initial deployment engineering, ongoing operational headcount, and optional commercial support, Wazuh delivers a 3-year TCO that is 60-70% lower than Splunk and 30-40% lower than Microsoft Sentinel - for equivalent security coverage.


Real-World Case Study: Healthcare Provider SOC Transformation

The Scenario

A 2,800-employee regional healthcare provider (3 hospitals, 12 outpatient clinics) was facing a HIPAA audit finding: their log collection and integrity monitoring capabilities were insufficient. They were using a commercial SIEM that cost $160,000/year in licensing, but it covered only 400 of their 1,800 endpoints due to cost constraints on the per-endpoint licensing model.

The Problem

MetricCommercial SIEM (Before)
Endpoints covered400 of 1,800 (22%)
Annual licensing cost$160,000
FIM coverage0 hosts (add-on not licensed)
Compliance dashboardPartial HIPAA only
MITRE ATT&CK mappingNot available
Cloud monitoring (Azure AD, Office 365)Not included

The Migration to Wazuh

The team deployed a 5-node Wazuh multi-node cluster:

  • 3 Indexer nodes (8 cores / 16 GB RAM / 4 TB SSD each)
  • 2 Server nodes (8 cores / 16 GB RAM each) behind HAProxy
  • 1 Dashboard node (4 cores / 8 GB RAM) with Nginx reverse proxy

90-day migration timeline:

  1. Days 1-14: Infrastructure deployment, certificate generation, cluster initialization
  2. Days 15-30: Agent rollout to all 1,800 endpoints via SCCM (Windows) and Ansible (Linux/RHEL)
  3. Days 31-60: Rule tuning, custom decoder authoring for Epic EHR and Meditech logs, HIPAA dashboard validation
  4. Days 61-90: Active Response configuration, FIM policy deployment, compliance baseline generation

The Results

MetricBefore (Commercial)After (Wazuh)Change
Endpoints covered400 (22%)1,800 (100%)+350%
Annual licensing cost$160,000$0-100%
FIM coverage0 hosts1,800 hostsNew capability
HIPAA dashboardPartialFull (12 controls)Complete
MITRE ATT&CK visibilityNoneFull TTP mappingNew capability
Azure AD / O365 monitoringNot includedFull coverageNew capability
CVSS vulnerability visibilityNot includedAll hostsNew capability
Infrastructure cost (annual)Included in licensing$18,000-
Alert-to-triage time (avg)47 minutes12 minutes-75% (via Shuffle integration)

The $160,000 in annual licensing savings was redistributed: $40,000 to a dedicated Wazuh operations engineer, $18,000 to infrastructure, and $102,000 to fund a dedicated purple team exercise program. The HIPAA audit finding was remediated in the 90-day window with documented evidence from Wazuh’s compliance dashboards.


Integration Ecosystem: Wazuh as the SOC Foundation

Wazuh is most powerful when integrated as the telemetry foundation of a broader open-source SOC stack.

Wazuh + TheHive + Cortex + Shuffle

This is the complete, production-grade open-source SOC architecture:

[Wazuh Agents] ──► [Wazuh Server] ──► [Wazuh Indexer]
                          │
                    [Alert Webhook]
                          │
                          ▼
                    [Shuffle SOAR]
                          │
          ┌───────────────┼──────────────────┐
          ▼               ▼                  ▼
    [Cortex:         [TheHive:          [Slack/Teams:
    Enrich IOCs]    Create Case]        Notify SOC]
          │               │
          └───────────────┘
               Pre-triaged
               Case with full
               intelligence

Wazuh + MISP (Threat Intelligence)

<!-- Custom integration to pull MISP IoCs into Wazuh CDB lists -->
<integration>
  <name>misp</name>
  <hook_url>http://misp-server/api/attributes/restSearch</hook_url>
  <api_key>YOUR_MISP_API_KEY</api_key>
  <alert_format>json</alert_format>
</integration>

Wazuh + Velociraptor (Digital Forensics)

For active incident response investigations, Wazuh’s active response can trigger Velociraptor artifact collection on compromised endpoints - enabling immediate forensic triage from the same alert that detected the threat.


Security Hardening: Production Best Practices

1. Harden the API

# Change default API credentials immediately
curl -k -X PUT "https://localhost:55000/security/users/1" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"password": "YourStrongPassword123!"}'

# Restrict API access to Dashboard IP only (firewall rule)
ufw allow from 192.168.1.30 to any port 55000
ufw deny 55000

2. Agent Authentication with Keys

# Pre-generate agent keys for unattended enrollment
/var/ossec/bin/manage_agents -a  # Add agent, generates unique AUTH key
/var/ossec/bin/manage_agents -e  # Export key for distribution

# Enforce agent key authentication (blocks any unauthorized agent)
# In ossec.conf:
# <auth><use_source_ip>yes</use_source_ip></auth>

3. Index Template for Data Retention

# Set 90-day index lifecycle policy via API
curl -k -X PUT "https://localhost:9200/_plugins/_ism/policies/wazuh-alerts-policy" \
  -H "Content-Type: application/json" \
  -u admin:admin -d '{
    "policy": {
      "phases": {
        "hot": { "min_index_age": "1d" },
        "delete": { 
          "min_index_age": "90d",
          "actions": { "delete": {} }
        }
      }
    }
  }'

Who Should Deploy Wazuh Multi-Node?

Ideal Candidates

Organization ProfileWhy Wazuh Wins
MSSPs and MDR providersUnlimited agents, no per-endpoint licensing - the economics are unbeatable for multi-tenant environments
Healthcare and financial servicesNative HIPAA/PCI DSS dashboards with audit-ready evidence exports
Government and defense contractorsFull data sovereignty, CMMC and NIST 800-53 mapping, no vendor telemetry
High-growth startupsScales from 50 to 10,000 agents without licensing renegotiation
Organizations on Linux/OpenSearch stackNative technology alignment - no learning curve on the underlying infrastructure

When to Choose a Commercial Alternative

ScenarioBetter Alternative
Zero Linux/DevOps expertise in-houseMicrosoft Sentinel (cloud-native, minimal infra ops)
Need instant deployment with pre-built detection contentSplunk Enterprise Security (massive content ecosystem)
Fully Microsoft 365 + Azure environmentMicrosoft Sentinel (native integration depth unmatched)
Require guaranteed SLA and TAC supportIBM QRadar or Elastic with paid support tier

The Bottom Line

Wazuh has earned its position as the world’s most widely deployed open-source SIEM through a simple proposition: production-grade security visibility at zero licensing cost, without compromising on capability.

The platform covers every detection and monitoring use case that regulated enterprises require - FIM, SCA, vulnerability detection, MITRE ATT&CK mapping, compliance reporting, cloud security monitoring, and active response - in a single, cohesive agent and backend architecture.

The operational investment is real. You need Linux expertise, OpenSearch familiarity, and the engineering bandwidth to tune rules and manage infrastructure. But for organizations that have those capabilities - or are willing to build them - the ROI calculation is straightforward.

A 5,000-endpoint Wazuh deployment costs roughly $200,000-$270,000 over three years. The equivalent commercial SIEM costs $500,000-$720,000 over the same period. The difference funds a full-time threat hunter, a red team exercise program, and the SOAR automation stack described in our companion article.

The money you save on licensing is the money you invest in the human expertise that actually wins the fight.


Resources & Further Reading

ResourceDescription
Official Wazuh DocumentationDeployment guides, API reference, rule authoring
Wazuh GitHubSource code, issue tracker, community contributions
Wazuh Community Slack620,000+ member community for troubleshooting
Wazuh BlogIntegration tutorials, detection engineering, use case guides
Wazuh + TheHive IntegrationOfficial guide to connecting Wazuh alerts to TheHive cases
Wazuh + Shuffle SOARCommunity SOAR playbook templates for Wazuh + Shuffle
CIS BenchmarksHardening guides used by Wazuh SCA policies
MITRE ATT&CKAdversary tactic and technique reference

Share article

Subscribe to my newsletter

Receive my case study and the latest articles on my WhatsApp Channel.

New Cyber Alert