Integracja Wazuh API z n8n

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

Sprawdź szczegóły: https://asdevops.pl/1

 

 

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 !

 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

Sprawdź szczegóły: https://asdevops.pl/1
 

 

 

Ruszamy z zapisami na kurs Proxmox i Wirtualizacja Serwerów

X