Wazuh SIEM
Enterprise SIEM integrated into your AI command centre.
The Wazuh SIEM plugin brings enterprise security monitoring directly into QuoxCORE. It connects your Wazuh manager to the dashboard, giving your AI agents visibility into alerts, vulnerabilities, file integrity changes, and compliance posture across your entire fleet.
Overview
Wazuh is an open-source security platform that provides unified XDR and SIEM capabilities: intrusion detection, log analysis, vulnerability scanning, file integrity monitoring, and regulatory compliance checking. It runs a manager (server) that collects data from lightweight agents deployed on every monitored host.
The QuoxCORE Wazuh plugin wraps the Wazuh API and adds:
- A real-time alert feed inside the dashboard
- Vulnerability and compliance views per host
- AI-assisted alert triage (CommanderQ analyses alerts in context)
- One-click agent deployment to fleet hosts via SSH
This means your security data lives alongside your infrastructure data. When CommanderQ sees a disk alert from QuoxAgent, it can cross-reference Wazuh vulnerability data for the same host and give you a single, informed recommendation.
Architecture
The plugin sits between the QuoxCORE dashboard and your Wazuh manager. All Wazuh API calls are proxied through the collector service, which handles authentication and rate limiting.
Dashboard (React)
│
▼
Collector Service (Express)
│
├──► Wazuh API (https://<wazuh-host>:55000)
│ │
│ └── Wazuh Manager
│ ├── Agent: nw-web-01
│ ├── Agent: nw-db-01
│ ├── Agent: nw-hv-01
│ └── Agent: nw-monitor-01
│
└──► Bastion SSH (for agent deployment)
│
└── SSH → target host
└── Install wazuh-agent package
└── Configure manager address
└── Start wazuh-agent service
Key points:
- No direct browser-to-Wazuh traffic. The collector proxies all requests, so the Wazuh API never needs to be exposed to the browser or the public internet.
- Bastion SSH for deployment. Agent installation uses the same SSH path as QuoxBastion, so no additional network access is required.
- Credentials stay server-side. Wazuh API credentials are stored as environment variables on the collector, never sent to the frontend.
Setup
Prerequisites
- A running Wazuh manager (v4.x) with the API enabled on port 55000
- QuoxCORE dashboard deployed and running
- API credentials for the Wazuh manager (user and password)
- (Optional) QuoxBastion configured, if you want one-click agent deployment
Plugin Activation
- Open the QuoxCORE dashboard
- Navigate to Settings > Plugins
- Find Wazuh SIEM in the plugin list
- Toggle it to Active
- Enter the configuration values (see Configuration section below)
- Click Save
The plugin registers its sidebar entry, collector routes, and tool manifests on activation.
Configuration
Set these environment variables on the collector service (in your .env or docker-compose.yml):
| Variable | Required | Default | Description |
|---|---|---|---|
WAZUH_HOST | Yes | — | Hostname or IP of your Wazuh manager |
WAZUH_API_PORT | No | 55000 | Wazuh API port |
WAZUH_API_USER | Yes | — | Wazuh API username |
WAZUH_API_PASSWORD | Yes | — | Wazuh API password |
BASTION_HOST | No | — | Bastion host for SSH-based agent deployment |
Example docker-compose override:
services:
collector:
environment:
WAZUH_HOST: 10.20.0.50
WAZUH_API_PORT: 55000
WAZUH_API_USER: wazuh-wui
WAZUH_API_PASSWORD: ${WAZUH_API_PASSWORD}
BASTION_HOST: 10.20.0.247
After setting the variables, restart the collector container.
Agent Deployment
This is the standout feature. Traditional Wazuh agent deployment requires SSH-ing into each host, adding the Wazuh repository, installing the package, editing the config, and starting the service. The plugin reduces this to a single click.
How It Works
- You select one or more hosts from your fleet (sourced from QuoxBastion's host registry)
- Click Deploy Agent
- The collector sends an SSH command through the bastion to each target host
- The deployment script on each host:
- Detects the OS (Debian/Ubuntu, RHEL/CentOS, or SUSE)
- Adds the Wazuh package repository
- Installs
wazuh-agent - Writes the manager address to
/var/ossec/etc/ossec.conf - Starts and enables the
wazuh-agentservice
- The plugin polls agent status until each host reports as connected
Bulk Deployment
For fleet-wide rollout, use the bulk deploy endpoint. It accepts an array of host IDs and deploys in parallel (respecting the bastion's SSH concurrency limit).
POST /api/v1/wazuh/deploy-bulk
{
"hosts": [
{ "hostname": "nw-web-01", "ip": "10.20.0.101" },
{ "hostname": "nw-db-01", "ip": "10.20.0.102" }
]
}
Checking Agent Status
After deployment, verify agents are connected:
POST /api/v1/wazuh/agent-status
{
"hostIp": "10.20.0.101"
}
Returns whether the Wazuh agent is installed, running, and its version for the specified host.
Features
Alert Feed
A live feed of Wazuh alerts displayed in the dashboard. Alerts are colour-coded by severity level:
| Level | Colour | Meaning |
|---|---|---|
| 0-3 | Grey | Informational |
| 4-7 | Yellow | Low to medium |
| 8-11 | Orange | High |
| 12-15 | Red | Critical |
Alerts can be filtered by agent, rule group, severity, and time range. Each alert links to its full details including the raw log, rule description, and MITRE ATT&CK mapping.
Vulnerability Scanning
View known vulnerabilities (CVEs) detected on each agent. The plugin pulls vulnerability data from the Wazuh API and displays:
- CVE identifier and description
- Affected package and version
- Severity (CVSS score)
- Whether a fix is available
- Detection date
File Integrity Monitoring (FIM)
Track file changes across monitored hosts. The FIM view shows:
- File path and change type (added, modified, deleted)
- Before and after checksums
- Timestamp and responsible user (where available)
- Configured monitored directories
Compliance
Wazuh maps its rules to compliance frameworks. The plugin surfaces compliance data for:
- PCI DSS
- GDPR
- HIPAA
- NIST 800-53
- CIS Benchmarks
Each compliance check shows pass/fail status, the relevant control, and the rule that triggered it.
AI Analysis
When CommanderQ is active, you can ask it to analyse Wazuh data in natural language:
- "What are the critical alerts from the last 24 hours?"
- "Which hosts have unpatched vulnerabilities?"
- "Show me file integrity changes on the production servers"
- "Are we compliant with PCI DSS requirement 10?"
CommanderQ uses the Wazuh MCP tools to query the API and returns structured, contextual answers.
API Reference
All endpoints are served by the collector service. Authentication follows the standard QuoxCORE session/token model.
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/v1/wazuh/proxy | Generic proxy to any Wazuh API endpoint. Body: { "endpoint": "/agents", "method": "GET" } |
| GET | /api/v1/wazuh/manager/status | Returns Wazuh manager status (running daemons) |
| GET | /api/v1/wazuh/agents | Lists all Wazuh agents with status, OS, IP, and last keep-alive. Supports query params: limit, offset, status |
| GET | /api/v1/wazuh/alerts | Retrieves alerts from Wazuh Indexer. Query params: q (search term), limit (max 500) |
| POST | /api/v1/wazuh/deploy-agent | Deploy Wazuh agent to a single host. Body: { "hostname": "nw-web-01", "hostIp": "10.20.0.101" } |
| POST | /api/v1/wazuh/deploy-bulk | Deploy Wazuh agent to multiple hosts. Body: { "hosts": [{ "hostname": "nw-web-01", "ip": "10.20.0.101" }] } |
| POST | /api/v1/wazuh/agent-status | Check agent status on a host. Body: { "hostIp": "10.20.0.101" } |
Proxy Endpoint
The /api/v1/wazuh/proxy endpoint forwards arbitrary requests to the Wazuh API. This is useful for accessing endpoints not covered by the dedicated routes above.
POST /api/v1/wazuh/proxy
{
"endpoint": "/vulnerability/001",
"method": "GET",
"body": {
"limit": 10,
"offset": 0
}
}
The collector authenticates with the Wazuh API using the configured credentials, forwards the request, and returns the response body.
Troubleshooting
Wazuh Manager Daemons Not Running
Symptom: The manager status endpoint returns errors or shows daemons as stopped.
Fix: SSH into the Wazuh manager and check the service:
systemctl status wazuh-manager
journalctl -u wazuh-manager --since "10 minutes ago"
Common causes: disk full (Wazuh logs can grow quickly), configuration syntax error after an edit, or a failed upgrade.
Agent Not Connecting After Deployment
Symptom: Agent shows as never_connected or disconnected in the agent list.
Checks:
- Network: Ensure the agent host can reach the Wazuh manager on port 1514 (agent communication) and 1515 (agent registration).
- Firewall: Check iptables/nftables rules on both the agent host and the manager.
- Manager address: Verify
/var/ossec/etc/ossec.confon the agent contains the correct manager IP. - Service running: Check
systemctl status wazuh-agenton the target host. - Registration: If the agent was previously registered with a different manager, remove
/var/ossec/etc/client.keysand restart the agent.
API Authentication Failures
Symptom: 401 responses from the Wazuh proxy endpoint.
Fix: Verify the WAZUH_API_USER and WAZUH_API_PASSWORD environment variables are correct. Test directly:
curl -k -u wazuh-wui:PASSWORD https://WAZUH_HOST:55000/security/user/authenticate
If the credentials are correct but authentication still fails, check that the API user has not been locked out (Wazuh locks accounts after repeated failed attempts).
Collector Cannot Reach Wazuh API
Symptom: Connection timeout or refused errors in collector logs.
Checks:
- Verify
WAZUH_HOSTandWAZUH_API_PORTare set correctly. - Ensure the collector container can reach the Wazuh manager network. If they are on different Docker networks, you may need to add the Wazuh network to the collector's
docker-compose.yml. - Check that the Wazuh API is listening:
ss -tlnp | grep 55000on the manager host.
Agent Deployment Fails via SSH
Symptom: Deploy endpoint returns an SSH error or the script fails partway through.
Checks:
- Ensure
BASTION_HOSTis set and the bastion is reachable from the collector. - Verify the target host is registered in QuoxBastion's host registry.
- Check that the SSH user on the target host has sudo privileges (agent installation requires root).
- Review the deployment output in the collector logs for the specific error (package manager failure, network issue, permission denied).
Next Steps
- QuoxCORE - The AI command centre that hosts the Wazuh plugin
- QuoxBastion - Fleet management and SSH execution used for agent deployment
- QuoxAgent - Per-host monitoring daemon (complementary to Wazuh agents)
- Safety and Security - QuoxCORE's security model and DEFCON levels