Implantando o Wazuh em Ambiente Multi-Node com Docker

· 3 minutos de leitura
Implantando o Wazuh em Ambiente Multi-Node com Docker
Wazuh multi-node com docker

A implantação de um ambiente distribuído do Wazuh permite maior escalabilidade, segurança e separação de responsabilidades entre seus componentes. Este guia mostra como configurar o Wazuh 4.12 em modo multi-node utilizando Docker Compose, com foco em uma configuração funcional, segura e compatível com as melhores práticas.

1. Clonando o repositório oficial

Faça o clone do repositório do Wazuh com a versão desejada:

git clone https://github.com/wazuh/wazuh-docker.git -b v4.12.0

Copie o diretório de ambiente distribuído (multi-node) para o local onde irá trabalhar com o Compose:

cp -R wazuh-docker/multi-node/ /services/
cd /services/multi-node

2. Corrigindo o docker-compose.yml com a porta 1514

O docker-compose.yml fornecido no multi-node não inclui a porta 1514 no serviço wazuh.manager, o que impede a comunicação com os agentes Wazuh, incluindo os agentes Windows padrão.

Adicione a linha abaixo à seção de portas do serviço wazuh.manager:

  wazuh.manager:
    ports:
      - "1514:1514"
      - "1515:1515"
      - "514:514/udp"
      - "55000:55000"

3. Gerando os certificados para comunicação segura

Para que os componentes do Wazuh se comuniquem de forma segura (manager, indexer e dashboard), é necessário gerar os certificados TLS com o comando:

docker compose -f generate-indexer-certs.yml run --rm generator

Os certificados serão criados automaticamente nos diretórios corretos para serem utilizados por cada serviço.

4. Atualizando as variáveis de ambiente no docker-compose.yml

Atualize o docker-compose.yml com as senhas dos serviços. Atenção: as variáveis de ambiente com o mesmo nome deve ter o mesmo valor entre os containers onde são utilizadas.

Ou seja:

  • A variável INDEXER_PASSWORD deve ter o mesmo valor em wazuh.master e wazuh.worker
  • A variável API_PASSWORD deve ter o mesmo valor em wazuh.master e wazuh.dashboard
  • A variável DASHBOARD_PASSWORD é usada apenas no wazuh.dashboard

Exemplo:

wazuh.master:

  environment:
    - INDEXER_PASSWORD=MyS3cr37P450r.*
    - API_PASSWORD=MyS3cr37P450r.*

wazuh.worker:

  environment:
    - INDEXER_PASSWORD=MyS3cr37P450r.*

wazuh.dashboard:

  environment:
    - DASHBOARD_PASSWORD=MyS3cr37P450r.*
    - API_PASSWORD=MyS3cr37P450r.*

Use senhas seguras com no mínimo:

  • 10 caracteres
  • Letras maiúsculas, minúsculas, dígitos e símbolos
  • Evite caracteres problemáticos como $ ou &

5. Gerando os hashes das senhas

Algumas senhas, como INDEXER_PASSWORD e DASHBOARD_PASSWORD, devem ser convertidas em hash antes de serem aplicadas.

Execute o seguinte comando:

docker run --rm -ti wazuh/wazuh-indexer:4.12.0 bash /usr/share/wazuh-indexer/plugins/opensearch-security/tools/hash.sh

Quando aparecer Password:, digite a senha usada nos environment. Por exemplo, se você usou MyS3cr37P450r.* para DASHBOARD_PASSWORD, digite exatamente essa senha. Pressione Enter e anote o hash exibido, pois será necessário nos próximos passos.

6. Inserindo os hashes no arquivo internal_users.yml

Abra o arquivo config/wazuh_indexer/internal_users.yml e substitua os hashes dos usuários admin e kibanaserver pelos valores gerados no passo anterior. Além disso, altere o campo reserved: de ambos para false, para que o sistema aceite as alterações.

Usuário admin:

admin:
  hash: "<HASH_DA_SENHA_DO_DASHBOARD>"
  reserved: false
  backend_roles:
    - "admin"
  description: "Demo admin user"

Usuário kibanaserver:

kibanaserver:
  hash: "<HASH_DA_SENHA_DO_INDEXER>"
  reserved: false
  description: "Demo kibanaserver user"

Esses usuários são utilizados respectivamente pela interface do dashboard e pela conexão interna com o indexer. O hash deve corresponder exatamente à senha definida nos environment.

7. Atualizando a senha do Wazuh Dashboard

No arquivo config/wazuh_dashboard/wazuh.yml, atualize a autenticação com o Wazuh Manager:

hosts:
  - 1513629884013:
      url: "https://wazuh.manager"
      port: 55000
      username: wazuh-wui
      password: "MyS3cr37P450r.*"
      run_as: false

Esse é o usuário e senha utilizado pelo dashboard para comunicação com a API do manager.

8. Subindo os serviços com Docker Compose

Com as configurações finalizadas, suba todos os serviços com:

docker compose up -d

Aguarde a inicialização completa dos containers, especialmente o indexer, que pode levar alguns minutos na primeira execução. Verifique os logs com docker compose logs -f se necessário.

9. Aplicando os hashes ao Wazuh Indexer

Após o indexer estar totalmente iniciado, entre no container correspondente. Verifique o nome com docker ps e acesse:

docker exec -it multi-node-wazuh.indexer-1 bash

Configure as variáveis de ambiente:

export INSTALLATION_DIR=/usr/share/wazuh-indexer
CACERT=$INSTALLATION_DIR/certs/root-ca.pem
KEY=$INSTALLATION_DIR/certs/admin-key.pem
CERT=$INSTALLATION_DIR/certs/admin.pem
export JAVA_HOME=/usr/share/wazuh-indexer/jdk

Identifique o nome do nó e aplique as configurações:

HOST=$(grep node.name $INSTALLATION_DIR/opensearch.yml | awk '{print $2}')
bash /usr/share/wazuh-indexer/plugins/opensearch-security/tools/securityadmin.sh \
  -cd /usr/share/wazuh-indexer/opensearch-security/ \
  -nhnv -cacert $CACERT -cert $CERT -key $KEY -p 9200 -icl -h $HOST

Esse script aplica os novos hashes e ativa as permissões internas de acesso.


Com todos os passos executados corretamente, você terá um ambiente Wazuh distribuído, seguro e funcional, pronto para ser integrado a ambientes corporativos de médio e grande porte.

Documentação utilizada:
https://documentation.wazuh.com/current/deployment-options/docker/wazuh-container.html