Privacy Tools Guide

How to Set Up Wazuh SIEM for Small Teams

Wazuh is a free, open-source security platform that combines log management, intrusion detection, vulnerability scanning, and compliance checks. For small teams, the all-in-one installer gets you a full SIEM stack — Wazuh Manager, Indexer (OpenSearch), and Dashboard — on a single server in under 30 minutes.

Hardware Requirements

Component Minimum Recommended
CPU 4 cores 8 cores
RAM 8 GB 16 GB
Disk 50 GB SSD 200 GB SSD
OS Ubuntu 22.04/24.04 or RHEL 8/9 Ubuntu 24.04

For a 10-agent deployment monitoring a small team’s infrastructure, 8 GB RAM is workable but tight. Scale up if you’re ingesting high-volume logs from Zeek or a web server.


1. All-in-One Installation

Wazuh provides an official installation assistant that handles certificates, configuration, and service setup:

# Download and verify the installer
curl -sO https://packages.wazuh.com/4.9/wazuh-install.sh
curl -sO https://packages.wazuh.com/4.9/wazuh-install.sh.sha512

sha512sum -c wazuh-install.sh.sha512

# Run all-in-one installation (takes 10-15 minutes)
sudo bash wazuh-install.sh --all-in-one -v

# Save the admin password from the final output — you'll need it for the Dashboard

This installs:


2. Access the Dashboard

Open https://<your-server-ip> in a browser. Accept the self-signed certificate warning and log in with:


3. Install the Wazuh Agent on Linux Endpoints

Run this on each server you want to monitor:

# Replace WAZUH_MANAGER with the IP of your Wazuh server
WAZUH_MANAGER="10.0.1.50" WAZUH_AGENT_NAME="web-server-1" \
  bash <(curl -s https://packages.wazuh.com/4.9/wazuh-agent-install.sh)

sudo systemctl daemon-reload
sudo systemctl enable --now wazuh-agent
sudo systemctl status wazuh-agent

On Windows (PowerShell, run as admin):

Invoke-WebRequest -Uri "https://packages.wazuh.com/4.9/windows/wazuh-agent-4.9.0-1.msi" `
  -OutFile "${env:TEMP}\wazuh-agent.msi"
msiexec /i "${env:TEMP}\wazuh-agent.msi" WAZUH_MANAGER="10.0.1.50" `
  WAZUH_AGENT_NAME="windows-laptop-1" /quiet
net start WazuhSvc

4. Verify Agent Connection

On the Wazuh Manager:

# List connected agents
sudo /var/ossec/bin/agent_control -la

# Check agent status by ID
sudo /var/ossec/bin/agent_control -s -u 001

Or in the Dashboard: Agents > verify the agent appears and shows “Active”.


5. Configure Log Collection

Wazuh reads syslog, application logs, and Windows Event Logs automatically. Add custom log sources in the agent’s ossec.conf:

sudo tee -a /var/ossec/etc/ossec.conf > /dev/null <<'EOF'
<ossec_config>
  <localfile>
    <log_format>syslog</log_format>
    <location>/var/log/nginx/access.log</location>
  </localfile>

  <localfile>
    <log_format>syslog</log_format>
    <location>/var/log/nginx/error.log</location>
  </localfile>

  <localfile>
    <log_format>json</log_format>
    <location>/var/log/myapp/app.log</location>
  </localfile>
</ossec_config>
EOF

sudo systemctl restart wazuh-agent

6. Enable Vulnerability Scanning

Wazuh can scan agents for known CVEs using the installed package list:

On the Manager, edit /var/ossec/etc/ossec.conf:

<vulnerability-detector>
  <enabled>yes</enabled>
  <interval>12h</interval>
  <min_full_scan_interval>6h</min_full_scan_interval>
  <run_on_start>yes</run_on_start>

  <provider name="canonical">
    <enabled>yes</enabled>
    <os>focal</os>
    <os>jammy</os>
    <os>noble</os>
    <update_interval>1h</update_interval>
  </provider>

  <provider name="redhat">
    <enabled>yes</enabled>
    <update_interval>1h</update_interval>
  </provider>
</vulnerability-detector>
sudo systemctl restart wazuh-manager

Results appear in Dashboard > Vulnerability Detection.


7. Write a Custom Detection Rule

Wazuh ships with 2000+ rules. Add your own in /var/ossec/etc/rules/local_rules.xml:

<!-- Alert when a new user is added to the sudo group -->
<group name="local,adduser,sudo">
  <rule id="100001" level="10">
    <if_sid>5901</if_sid>
    <match>sudo</match>
    <description>User added to sudo group</description>
    <mitre>
      <id>T1098</id>
    </mitre>
  </rule>

  <!-- Alert on failed sudo attempts (possible privilege escalation probe) -->
  <rule id="100002" level="7" frequency="5" timeframe="60">
    <if_matched_sid>5402</if_matched_sid>
    <description>Multiple failed sudo attempts from same user</description>
  </rule>
</group>
# Test and reload rules without restarting
sudo /var/ossec/bin/wazuh-logtest
sudo systemctl reload wazuh-manager

8. Configure Active Response

Active response lets Wazuh automatically block IPs that trigger certain rules — similar to Fail2Ban but managed centrally:

In /var/ossec/etc/ossec.conf on the Manager:

<active-response>
  <command>firewall-drop</command>
  <location>local</location>
  <rules_id>5712</rules_id>   <!-- SSH brute force -->
  <timeout>600</timeout>       <!-- Block for 10 minutes -->
</active-response>

<active-response>
  <command>firewall-drop</command>
  <location>local</location>
  <rules_id>31151</rules_id>   <!-- Web scan detected -->
  <timeout>1800</timeout>
</active-response>

The firewall-drop command uses iptables or nftables depending on what’s available on the agent.


9. Set Up Email Alerts

<!-- In Manager ossec.conf -->
<global>
  <email_notification>yes</email_notification>
  <smtp_server>smtp.example.com</smtp_server>
  <email_from>wazuh@example.com</email_from>
  <email_to>security-team@example.com</email_to>
  <email_maxperhour>50</email_maxperhour>
  <email_alert_level>7</email_alert_level>   <!-- Only severity 7+ -->
</global>

For Slack, use the Wazuh integration framework:

sudo tee /var/ossec/integrations/custom-slack.py > /dev/null << 'PYEOF'
# Use the wazuh-slack integration package from wazuh.com/resources
PYEOF

# Or use the built-in webhook integration

10. CIS Benchmark Compliance

Wazuh ships with OpenSCAP and SCA (Security Configuration Assessment) checks:

# Check SCA results
sudo /var/ossec/bin/wazuh-logtest < /dev/null 2>&1 | head

# View SCA policy results in Dashboard: Security Configuration Assessment
# Each check shows Pass/Fail with remediation steps

Dashboard > Security Configuration Assessment shows a scored compliance report for CIS Level 1 and Level 2 benchmarks.


Maintenance

# Check indexer disk usage
curl -sk -u admin:<password> https://localhost:9200/_cat/indices?v

# Delete old indices (retention management)
# In Dashboard: Index Management > Indices > filter by date > delete

# Update Wazuh
sudo apt upgrade wazuh-manager wazuh-indexer wazuh-dashboard


Built by theluckystrike — More at zovo.one