Username
Password
Atria
n8n connected
n8n (engine) —
Wazuh connected
A
Admin
Time range
Auto
Playbooks summary
-
Active
-
Executions today
-
Failed executions
-
Cases opened
Alerts summary
Noisiest alerts
Noisiest agents
Top triggered playbooks
Enrichment verdicts
Latest playbook executions
Value delivered
-
Alerts auto-handled
-
Analyst-hours saved
-
Est. cost saved
-
Avg response (MTTR)
Est. savings by use case
Manual response · block an IP or range
Attacker IP or range
Agent
Single IP, CIDR (…/24) or range (a–b). Up to 256 IPs — each is dropped individually.
Response playbooks
Auto
-
Successful
-
Failed
-
Waiting
-
Success rate
Time range
Status Playbook Detail Lvl Severity Executor Agent ID Agent name Source IP Time
Auto
Platform connectivity
Wazuh Manager
Connected
Active Response API
Wazuh Indexer
Connected
Outcome index & enrichment
n8n
Connected
Workflow engine
Atria
Deployed build
LLM models
AI is off by default. Enable it per playbook with your own provider key — your data reaches the LLM only when you opt in.
Amazon Bedrock (Claude)
Not configured
Anthropic (Claude)
Not configured
Notifications
Email (SMTP)
Not configured
PagerDuty
Not configured
Slack
Not configured
Threat intelligence
AbuseIPDB
Not configured
VirusTotal
Not configured
Ticketing
Jira
Not configured
TheHive
Not configured
Admin only. Create accounts with a temporary password (the user changes it on first login), reset passwords, or remove users.
Console users
The Wazuh environments this SOAR connects to. Add one to validate its Manager + Indexer and start collecting its data — each environment keeps its own executions and dashboard.
Auto
Environments
Frequently asked questions
Quick answers to the most common questions about the SOAR.
Getting started
What is a playbook?

A playbook maps a Wazuh detection to an automated response — triage, threat-intel enrichment, ticketing, or a containment action (like blocking an IP). Enable the ones you want on the Playbooks page; each runs automatically on the alerts it matches.

How does baseline triage work?

Every alert that isn't filtered as noise is classified by severity and category and logged, so you always have a record — no enrichment and no case, just the audit trail. It's the catch-all so nothing falls through.

What is a test run (dry-run)?

A test run evaluates a playbook against a sample alert and, if it matches, dispatches it in simulation — it reports what it would do and executes nothing against Wazuh. Use it to validate a playbook safely before arming it.

How do I enable or disable a playbook?

On the Playbooks page, use the on/off toggle on each card (admin only). Changes take effect immediately. A playbook shown dimmed with a chip isn't available on the selected environment's Wazuh version.

Playbooks & response
How do I block an IP manually?

On the Playbooks page, use Manual response — block an IP or range: enter a single IP, a CIDR (…/24) or a range, choose the agent, and click Block now. Each IP is dropped individually (up to 256). This is available on Wazuh 4; on Wazuh 5 blocking is driven by a detection, so block the source from its alert instead.

What does the security posture score mean?

A composite 0–100 score with a letter grade (A–F) across four dimensions — response readiness, alert-noise hygiene, detection coverage, and ingestion health. It's a heuristic indicator to track your posture over time and compare runs, not a compliance certification. The report explains what drives each sub-score and ties recommendations to the relevant playbooks.

How does Wazuh 5 noise suppression work?

On a Wazuh 5 environment, admins can drop high-volume findings before they reach triage — by rule id — from the Wazuh 5 noise suppression panel on the Playbooks page. Detection in Wazuh itself is untouched; a rule takes effect on the next collection cycle and can be toggled off at any time.

Why do some playbooks say "Soon available for Wazuh 5"?

A few containment playbooks depend on platform capabilities that aren't available on Wazuh 5 agents yet. They run on Wazuh 4 today and stay dormant on Wazuh 5 — shown with the badge — until the platform supports them, at which point they light up automatically.

Where do the cases go?

When a playbook opens a case, it's created in your configured ticketing integration (for example Jira). Enable and configure one on the Integrations page; without a ticketing integration the outcome is still recorded under Executions.

Help & documentation
A practical manual for the SOAR. Looking for a quick answer? Check the FAQ.
Concepts in one minute

The SOAR watches your Wazuh environments, decides which detections deserve action, runs playbooks to respond, and records every outcome.

  • Environment — a Wazuh deployment (Manager + Indexer) the SOAR connects to. Each keeps its own executions and dashboard.
  • Playbook — a detection→response mapping. Triage ones classify/enrich/ticket; act ones change something (e.g. block an IP).
  • Execution — one recorded run of a playbook, with its result, severity, agent and timing.
  • Routing is semantic, not by severity — a “loud” alert isn't automatically a case; the playbook's meaning and the evidence decide.
The sections
  • Dashboard — at-a-glance view over a time range: playbook activity, noisiest alerts and agents, enrichment verdicts, latest executions.
  • Playbooks — enable/disable playbooks, run on-demand ones, block an IP manually, import your own, and (Wazuh 5) manage noise suppression.
  • Executions — the searchable ledger of every run; export to CSV/PDF.
  • Integrations — connect threat-intel (VirusTotal, AbuseIPDB), AI, ticketing and notifications.
  • Status — connectivity to n8n, the Wazuh Manager and Indexer.
  • Environments / Users / ROI (admin) — manage Wazuh connections, console users, and the value/ROI view.
Common tasks
  • Enable/disable a playbook — Playbooks page, the on/off toggle (admin).
  • Block an IP or range — Playbooks → Manual response. Single IP, CIDR or range; each IP is dropped individually.
  • Turn on external threat-intel — Integrations: add a VirusTotal/AbuseIPDB key, then enable the enrichment playbook.
  • Review and apply noise tuning — the noise report proposes high-volume rules to down-tune; review and apply the ones you agree with.
  • Generate a report — the EPS assessment and Security posture reports generate and download as branded PDFs.
Add your own playbook (custom)

Beyond the built-ins you can add custom playbooks as portable { meta, workflow } bundles (admin only). The safest flow:

1
Start from an export — click Export on the closest built-in for a correct template (trigger, wiring and outcome logging already in place).
2
Edit two things — the meta (below) and, in the workflow's first Code node, your action logic. Leave the library references as they are.
3
Import → Test run → Arm — it arrives disabled; test it against a sample alert (dry-run, nothing executed); arm it with the toggle when satisfied.

What meta must contain

FieldReq.Value
trigger_idyesUnique UPPER_SNAKE_CASE id (^[A-Z][A-Z0-9_]{1,49}$), e.g. ISOLATE_HOST. The stable routing key, not the display name.
titlenoDisplay name in the Playbooks list (≤ 80 chars). Falls back to trigger_id.
source_modeyesevent (fired by an alert via match_query), pull (on demand), or manual.
match_queryfor eventThe routing predicate (JSON) — below. An event playbook without a valid one never fires.
wazuh_versionsnoSupported Wazuh majors, comma list (e.g. 4,5 or 4). Omit for all.
action_tier / approval / prioritynotriage|act · auto|human · integer 0–1000 (higher runs first when several match).

The match_query (routing predicate) — a declarative JSON predicate evaluated against the raw alert (no code):

  • leaf: { "field": "rule.groups", "op": "contains", "value": "authentication_failures" }
  • ops: eq · in (value is an array) · contains · exists · regex
  • combinators: { "all": [ … ] } · { "any": [ … ] } · { "not": … }
  • fields are dotted paths: rule.id, rule.level, rule.groups, data.srcip, agent.id, …
{ "any": [
  { "field": "rule.groups", "op": "contains", "value": "authentication_failures" },
  { "field": "rule.id", "op": "in", "value": ["5710", "5712", "5763"] }
] }

The rule ids/groups must be real in your ruleset — a made-up one never matches. When you need a criterion Wazuh doesn't ship, add a custom rule tagged with a group your predicate looks for.

What the workflow must contain (a normal n8n workflow export, with a few rules the importer enforces):

  • A trigger — an event playbook needs a “When Executed by Another Workflow” trigger so it can be dispatched.
  • Read the input — the first Code node gets const alert = $input.first().json.normalized || $input.first().json;.
  • Honor dry_run — when alert.dry_run === true your action must simulate (change nothing). This is what makes Test run safe.
  • Use the shared libraries by name — reference the Active-Response and outcome-logging libraries via Execute-Workflow nodes; they hold the credentials, so your bundle stays credential-free.
  • Log the outcome — end by logging the outcome so the run shows up under Executions.

What the importer checks — it validates before creating anything: meta + workflow present, a valid/unique trigger_id, a valid source_mode, a valid match_query (event playbooks must have one), the sub-workflow trigger, nodes/connections, and that every referenced library is installed. It also runs a safety scan (warns about direct Manager/Indexer calls that bypass dry-run, embedded credentials, or a workflow that never logs an outcome). Then Test run lets you paste a sample alert and see what it would do — the flow is import → test → arm.

Good to know
  • Containment is de-duplicated — a real block won't create a duplicate firewall rule for an IP that's already blocked.
  • Everything is recorded — every run lands in Executions with its result, severity, agent and timing, whether it acted, simulated, or was skipped.
  • Per-environment — executions, dashboards and settings are scoped to the selected environment.