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 emwazuh.master
ewazuh.worker
- A variável
API_PASSWORD
deve ter o mesmo valor emwazuh.master
ewazuh.dashboard
- A variável
DASHBOARD_PASSWORD
é usada apenas nowazuh.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