Seraph IT Jetzt Termin vereinbaren

Wiki

Abläufe automatisieren mit Tracecat: vom Wazuh-Alarm zur fertigen Nachricht

Teil des Lernpfads IT-Infrastruktur für Umschüler, Praktikanten und alle, die wiederkehrende Abläufe nicht mehr von Hand erledigen wollen

Tracecat ist eine Open-Source-Plattform, mit der man Abläufe für Sicherheit und IT-Betrieb automatisiert. Ein Ablauf (Workflow) startet durch einen Auslöser, zum Beispiel einen Webhook, und führt danach Aktionen aus, die über Ausdrücke Daten weiterreichen. Zugangsdaten liegen im Secret-Store und nie im Ablauf selbst. Erst wenn ein Ablauf veröffentlicht ist, reagiert er auf echte Ereignisse.

01Wofür wir Tracecat nutzen

Viele Aufgaben im Betrieb folgen einem festen Muster: Ein System meldet etwas, jemand schaut nach, und am Ende wird eine Nachricht geschrieben oder ein Ticket angelegt. Genau solche Abläufe bilden wir in Tracecat ab. Ein typisches Beispiel ist ein Alarm aus Wazuh, der gefiltert, angereichert und als lesbare Nachricht an die richtige Stelle geschickt wird. Tracecat steht unter der Lizenz AGPL-3.0. Einzelne Teile gehören zur kostenpflichtigen Enterprise Edition und stehen unter einer eigenen Lizenz. Für alles in diesem Artikel reicht die freie Fassung. Das Produkt entwickelt sich schnell, deshalb prüf Begriffe und Menüs immer gegen docs.tracecat.com.

02Die Bausteine

Ein Workflow besteht aus einem Auslöser (Trigger) und einer Folge von Aktionen. Auslöser sind etwa ein Webhook, ein Zeitplan oder ein Formular. Jede Aktion hat eine Kennung aus Namensraum und Namen. Eingebaute Grundaktionen beginnen mit core., etwa core.transform.reshape zum Umformen von Daten. Anbindungen an andere Werkzeuge beginnen mit tools., etwa tools.slack.post_message. Jede Aktion hat einen Erfolgsweg und einen Fehlerweg. So kannst Du festlegen, was passiert, wenn ein Schritt scheitert.

Ausdrücke

Mit Ausdrücken greifst Du auf Daten zu. Die wichtigsten Quellen:

  • TRIGGER enthält die Daten, mit denen der Ablauf gestartet wurde. Beim Webhook ist das der Inhalt der Anfrage.
  • ACTIONS.<ref>.result enthält das Ergebnis einer früheren Aktion. <ref> ist der Kurzname der Aktion.
  • SECRETS.<name>.<KEY> liest einen Wert aus dem Secret-Store.
  • FN.<name>(...) ruft eingebaute Funktionen auf, etwa für Datum oder Text.

Logische Verknüpfungen schreibst Du mit && und ||, Vergleiche mit ==, !=, >= und so weiter. Fehlende Felder ergeben None und keinen Fehler. Ein Tippfehler im Feldnamen fällt deshalb erst auf, wenn im Ergebnis plötzlich „None“ steht.

Fallunterscheidungen

Im Reiter für die Ablaufsteuerung einer Aktion gibt es run_if. Die Aktion läuft nur, wenn der Ausdruck wahr ist, sonst wird sie übersprungen. Daneben gibt es for_each für Schleifen über Listen, max_attempts für Wiederholungen nach einem Fehler und timeout als Zeitgrenze.

Geheimnisse

Zugangsdaten legst Du im Bereich für Credentials des Arbeitsbereichs an. Ein Secret hat einen Namen und ein oder mehrere Schlüssel-Wert-Paare. Im Ablauf steht nur der Verweis, etwa ${{ SECRETS.slack.SLACK_CHANNEL }}. Über Umgebungen kannst Du getrennte Zugangsdaten für Test und Betrieb halten. Verzichte im Secret-Namen auf Bindestriche, sonst lässt er sich im Ausdruck nicht ansprechen.

03Tracecat selbst betreiben

Für die Übungsumgebung reicht Docker Compose auf einer Debian-VM. Die Dokumentation nennt Docker ab Version 26 und Docker Compose ab Version 2.29 als Voraussetzung. Du lädst aus dem aktuellen Release das Skript env.sh sowie .env.example, Caddyfile und docker-compose.yml. Das Skript erzeugt die .env mit den nötigen Schlüsseln und fragt nach der Adresse und der E-Mail des ersten Administrators. Danach startest Du alles mit docker compose up. Drei Hinweise aus der Dokumentation solltest Du ernst nehmen:

  • Kein HTTP nach außen: Ohne TLS nur auf localhost oder im Labornetz betreiben.
  • Anmeldung: Standard ist E-Mail und Kennwort. Für den echten Betrieb empfiehlt die Dokumentation SSO über OIDC oder SAML.
  • Keine Isolation per Standard: Aktionen laufen ohne Sandbox, solange Du sie nicht eigens einrichtest. Python-Skripte in Abläufen haben dann dieselben Rechte wie der Dienst.

04Testen, veröffentlichen, versionieren

Ein Ablauf ist zuerst ein Entwurf. Den Entwurf startest Du von Hand über den Run-Knopf und gibst dabei Beispieldaten als Eingabe mit. Das Ergebnis jeder Aktion siehst Du danach im Ereignisbereich und in der Liste der Läufe. Webhooks, Zeitpläne und Unterabläufe nutzen immer die zuletzt veröffentlichte Fassung. Änderungen am Entwurf wirken also erst nach dem Veröffentlichen. Das ist Deine Sicherung gegen halbfertige Änderungen im Betrieb. Für die Versionierung exportierst Du den Ablauf als YAML und legst ihn in Dein Git-Repository. Über „Create new“ lässt er sich wieder einspielen. Eine direkte Git-Anbindung mit Pull Requests gibt es nur in der Enterprise Edition. Nach unserem Prinzip „alles als Code“ gehört der Export trotzdem nach jeder Änderung ins Repository.

05Übung: Wazuh-Alarm per Webhook an Tracecat

  1. Starte Tracecat auf einer Debian-VM und lege einen neuen Workflow an. Füge einen Webhook als Auslöser hinzu, erlaube nur POST und schalte den API-Schlüssel ein.
  2. Baue zwei Aktionen. Die erste formt die Nachricht, die zweite verschickt sie nur ab Level 10. Hast Du kein Slack, nimm eine Aktion für Teams oder E-Mail aus der Integrationsliste:
title: "Wazuh-Alarm melden"
description: "Meldet Wazuh-Alarme ab Level 10"
actions:
  - ref: nachricht_bauen
    action: core.transform.reshape
    args:
      value: "Wazuh Level ${{ TRIGGER.rule.level }} auf ${{ TRIGGER.agent.name }}, ${{ TRIGGER.rule.description }}"
  - ref: nachricht_senden
    action: tools.slack.post_message
    depends_on:
      - nachricht_bauen
    run_if: ${{ TRIGGER.rule.level >= 10 }}
    args:
      channel: ${{ SECRETS.slack.SLACK_CHANNEL }}
      text: ${{ ACTIONS.nachricht_bauen.result }}
  1. Teste den Entwurf von Hand mit einem echten Alarm als Eingabe. Einen findest Du auf dem Wazuh-Manager in /var/ossec/logs/alerts/alerts.json. Probiere einen Alarm unter und einen über Level 10.
  2. Veröffentliche den Ablauf und kopiere die Webhook-Adresse.
  3. Leg auf dem Wazuh-Manager eine eigene Integration an. Das Skript /var/ossec/integrations/custom-tracecat bekommt von Wazuh die Alarmdatei, den API-Schlüssel und die Hook-Adresse übergeben:
#!/var/ossec/framework/python/bin/python3
import sys
import urllib.request

alert_file, api_key, hook_url = sys.argv[1:4]
with open(alert_file) as f:
    body = f.read().encode()
headers = {"Content-Type": "application/json", "x-tracecat-api-key": api_key}
request = urllib.request.Request(hook_url, data=body, headers=headers, method="POST")
urllib.request.urlopen(request, timeout=10)
  1. Setze Eigentümer root:wazuh und Rechte 750 und trage die Integration in /var/ossec/etc/ossec.conf ein. Wazuh schickt hier absichtlich schon ab Level 3, damit Du den Filter in Tracecat greifen siehst. Starte danach wazuh-manager neu:
<integration>
  <name>custom-tracecat</name>
  <hook_url>WEBHOOK_ADRESSE_AUS_TRACECAT</hook_url>
  <api_key>API_SCHLUESSEL_AUS_TRACECAT</api_key>
  <level>3</level>
  <alert_format>json</alert_format>
</integration>
  1. Lös einen Alarm aus, zum Beispiel mit mehreren falschen SSH-Anmeldungen auf einer überwachten VM. Prüfe in Tracecat, welcher Lauf entstand und ob die Nachricht kam. Im Betrieb filterst Du besser schon in Wazuh, damit weniger Läufe entstehen.

Geschafft, wenn: Ein echter Testalarm ab Level 10 ohne Dein Zutun als Nachricht ankommt, ein Alarm darunter im Lauf als übersprungen erscheint und der YAML-Export in Deinem Repository liegt.

06Typische Fallen

  • Nicht veröffentlicht: Der Entwurf läuft beim Testen, der Webhook reagiert aber nicht. Webhooks nutzen nur die veröffentlichte Fassung.
  • Tippfehler im Feldnamen: TRIGGER.rule.levl ergibt None und keinen Fehler. Die Bedingung ist dann still immer falsch.
  • YAML bricht: Ein Ausdruck ohne Anführungszeichen, der „: “ oder „ #“ enthält, wird abgeschnitten. Setz solche Ausdrücke in einfache Anführungszeichen.
  • Webhook-Adresse als Geheimnis vergessen: Die Adresse enthält selbst einen geheimen Teil. Sie gehört nie in ein öffentliches Repository, auch nicht als Beispiel.
  • Zugangsdaten im Ablauf: Ein Token direkt in den Argumenten landet im YAML-Export und damit in Git. Zugangsdaten gehören immer in den Secret-Store.

07Häufige Fragen zu Tracecat

Ist Tracecat kostenlos? Die freie Fassung steht unter der Lizenz AGPL-3.0 und lässt sich selbst betreiben. Einige Funktionen wie die Git-Anbindung gehören zur kostenpflichtigen Enterprise Edition.

Wie teste ich einen Ablauf, ohne echte Nachrichten zu verschicken? Starte den Entwurf von Hand mit Beispieldaten und schick die Nachricht zunächst an einen eigenen Testkanal. Über Umgebungen kannst Du dafür getrennte Zugangsdaten hinterlegen.

Wo speichere ich Zugangsdaten für Tracecat? Im Secret-Store des Arbeitsbereichs. Im Ablauf steht nur der Verweis über SECRETS, der Wert selbst taucht weder im Ablauf noch im YAML-Export auf.

Was passiert, wenn eine Aktion fehlschlägt? Jede Aktion hat einen Fehlerweg, an den Du eigene Schritte hängen kannst. Zusätzlich lässt sich für den ganzen Ablauf ein Fehler-Workflow festlegen, der bei einem Abbruch startet.

08Weiter im Lernpfad

Zurück zur Übersicht: Lernpfad IT-Infrastruktur. Die Alarme für diese Übung kommen aus Wazuh und Suricata. Wie Du KI beim Bauen von Abläufen sinnvoll einsetzt, steht in Arbeiten mit KI in der IT. Automatisierung ist Teil unserer Praktika Fachinformatiker Anwendungsentwicklung und Fachinformatiker Systemintegration.

Zuletzt geprüft: Oktober 2026

Bereit für planbare IT?

Erstes Gespräch kostenlos und unverbindlich.

Jetzt Termin vereinbaren →