Ten workflow automatycznie łączy się z Wazuh API, loguje się użytkownikiem wazuh-wui, pobiera token JWT, a następnie używa go do autoryzowanych zapytań do API. Dzięki temu w jednym uruchomieniu pobiera listę agentów, zbiorcze statystyki agentów (overview), informacje o managerze Wazuh oraz ostatnie alerty bezpieczeństwa.
Całość działa bez ręcznego używania curl, poprawnie obsługuje Bearer Token, omija problemy z certyfikatem TLS i stanowi solidną bazę pod automatyzację SOC (monitoring, alertowanie, integracje z Slack/Telegram, raporty).
Zapisy na kurs Proxmox i Wirtualizacji Serwerów
Naucz się praktycznego instalowania, konfigurowania i administrowania środowiskiem wirtualizacji Proxmox (tworzenia VM, sieci, klastrów, backupów oraz automatyzacji i zabezpieczeń) dzięki 12-tygodniowemu kursowi z ponad 150 lekcjami, materiałami, skryptami i wsparciem trenera, który prowadzi Cię „od zera do bohatera” w realnych wdrożeniach IT.
Promocja trwa do 17 lutego, godz. 23:59
Tak prezentuje się workflow w n8n:

Pierwszy krok to pobranie Tokena Wazuh API. Przejdź do serwera Wazuh i wpisz poniższą komendę do pobrania hasła użytkownika „wazuh-wui”:
grep -r "password\|api.*user" /usr/share/wazuh-dashboard/data/wazuh/config/wazuh.yml 2>/dev/null | grep -v "^#"
Skopij podane hasło z tego miejsca:

Następnie wpisz komendę do wygenerowania tokena API:
curl -u wazuh-wui:Podaj_hasło_użytkownika -k -X POST "https://Podaj_adres_IP_serwera_Wazuh:55000/security/user/authenticate"
Skopiuj wygenerowany Token:

Mamy już praktycznie wszystko co potrzeby by skonfigurować workflow do n8n. Przejdź do Swojej instancji n8n i zaimportuj workflow (podam cały kod workflow pod screenem). Przeprowadzę Cię przez cały proces konfiguracji 🙂
Zapisz poniższy kod na swoim komputerze np. za pomocą notatniki jako plik „Wazuh API info.json”:
{
"name": "Wazuh API info",
"nodes": [
{
"parameters": {},
"type": "n8n-nodes-base.manualTrigger",
"typeVersion": 1,
"position": [
-1584,
2576
],
"id": "00318208-ec66-4ccc-856b-4e6c23e75430",
"name": "When clicking ‘Execute workflow’"
},
{
"parameters": {
"values": {
"string": [
{
"name": "WAZUH_IP",
"value": "192.168.1.210"
},
{
"name": "token",
"value": "eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3YXp1aCIsImF1ZCI6IldhenVoIEFQSSBSRVNUIiwibmJmIjoxNzY4OTExMDYyLCJleHAiOjE3Njg5MTE5NjIsInN1YiI6IndhenVoLXd1aSIsInJ1bl9hcyI6ZmFsc2UsInJiYWNfcm9sZXMiOlsxXSwicmJhY19tb2RlIjoid2hpdGUifQ.AMzNijOXXvX6u4hL9mWqvYNkY5SiS2lM3B2Sf-whGwB6qe-JRzv8oX0EgMwKEwZM_AcINDXq4F9iY3PwauBXu22KAX_SS7TPw7aFKeh4j9Xx2g2FdepDikhQ7fWvPrdXM-BZc0bhgQZp2KsJtk5LwL5L64lvGSlwu2NaBhZ0HC767iuA"
}
]
},
"options": {}
},
"id": "4efb74dd-2429-4b26-ba64-eefd19d0d9ac",
"name": "Config1",
"type": "n8n-nodes-base.set",
"typeVersion": 2,
"position": [
-784,
2576
]
},
{
"parameters": {
"url": "=https://{{$json[\"WAZUH_IP\"]}}:55000/agents",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "=Bearer {{ $('Extract Token1').item.json.token }}"
}
]
},
"options": {
"allowUnauthorizedCerts": true
}
},
"id": "7e45ab3e-2004-4420-8f8f-ab057099b480",
"name": "Get Agents1",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4,
"position": [
-528,
2416
],
"alwaysOutputData": true
},
{
"parameters": {
"url": "=https://{{$json[\"WAZUH_IP\"]}}:55000/overview/agents",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "=Bearer {{ $('Extract Token1').item.json.token }}"
}
]
},
"options": {
"allowUnauthorizedCerts": true
}
},
"id": "2ac18d51-68dd-4cc9-9ef5-ba3c1b12a322",
"name": "Agents Overview1",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4,
"position": [
-528,
2576
]
},
{
"parameters": {
"url": "=https://{{$json[\"WAZUH_IP\"]}}:55000/manager/info",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "=Bearer {{ $('Extract Token1').item.json.token }}"
}
]
},
"options": {
"allowUnauthorizedCerts": true
}
},
"id": "52e48b54-6d72-4312-bfaf-c13e634eb8e2",
"name": "Manager Info1",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4,
"position": [
-528,
2720
]
},
{
"parameters": {
"url": "=https://{{$json[\"WAZUH_IP\"]}}:55000/agents?select=status,name,ip",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "=Bearer {{ $('Extract Token1').item.json.token }}"
}
]
},
"options": {
"allowUnauthorizedCerts": true
}
},
"id": "2d6f1351-c198-4c68-9076-8bb9ac5d35a7",
"name": "Agent Status1",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4,
"position": [
-528,
2928
]
},
{
"parameters": {
"method": "POST",
"url": "https://192.168.1.210:55000/security/user/authenticate",
"authentication": "genericCredentialType",
"genericAuthType": "httpBasicAuth",
"options": {
"allowUnauthorizedCerts": true
}
},
"id": "268efe5b-89e5-4834-a018-4bd79459056f",
"name": "Get JWT Token1",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.1,
"position": [
-1264,
2576
],
"credentials": {
"httpBasicAuth": {
"id": "XpVu8RUxuLhDUj2d",
"name": "Wazuh-admin"
}
}
},
{
"parameters": {
"jsCode": "const token = $input.item.json.data.token;\nreturn [{ json: { token: token } }];"
},
"id": "843e36cb-bc79-4328-a4cb-a6af4fd333a7",
"name": "Extract Token1",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
-992,
2576
],
"alwaysOutputData": true
}
],
"pinData": {},
"connections": {
"When clicking ‘Execute workflow’": {
"main": [
[
{
"node": "Get JWT Token1",
"type": "main",
"index": 0
}
]
]
},
"Config1": {
"main": [
[
{
"node": "Get Agents1",
"type": "main",
"index": 0
},
{
"node": "Agents Overview1",
"type": "main",
"index": 0
},
{
"node": "Manager Info1",
"type": "main",
"index": 0
},
{
"node": "Agent Status1",
"type": "main",
"index": 0
}
]
]
},
"Get JWT Token1": {
"main": [
[
{
"node": "Extract Token1",
"type": "main",
"index": 0
}
]
]
},
"Extract Token1": {
"main": [
[
{
"node": "Config1",
"type": "main",
"index": 0
}
]
]
},
"Get Agents1": {
"main": [
[]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "a4527b80-2fbe-48fa-8f12-73e9f0342548",
"meta": {
"instanceId": "eafe2bbd986238e59814b283c70b7d1fbe21985157b8fc2e91846a1f8d4dd92a"
},
"id": "Lf4bqu2cSpL75xtj",
"tags": []
}
Tak wygląda plik po zapisaniu na komputerze:

Przejdź do Swojego n8n i prawym górnym roku, kliknij „3 kropki” oraz „Import from File”, wybierz wcześniej zapisany plik:

Klikając dwukrotnie na tego noda, dokonamy kilku zmian:

Zmień adres IP na adres IP swojego serwera Wazuh:


Następnie kliknij pod „Basic Auth”, rozwinie się lista, kliknij „Create new credential” (by połączyć serwer Wazuh z n8n):

Pod „User” wpisz „wazuh-wui” oraz pod „password”, wklej wcześniej pobrane hasło użytkownika wazuh-wui:

Zapisz , klikając na „Save”:

Kliknij „Execute step”, po prawej stronie w sekcji 'OUTPUT”, pokaże się pobrany token:

Pod „Value”, wpisz adres IP Twojego serwera Wazuh. Przeciągnij ikonkę „token” w wskazane miejsce na screenie:

Gotowe! Teraz możemy uruchomić ręcznie naszą automatyzację, kliknij „Execute workflow”:

Po wykonaniu worklow, mamy już wyniki wszystkich czterech nodów:

Po dwukrotnym kliknięciu na wybrany przez Ciebie node, możemy podejrzeć wyniki, np. :

Teraz możesz dowolnie modyfikować automatyzację, pod Swoje potrzeby. Do dzieła !

