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.0Copie 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-node2. 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 generatorOs 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_PASSWORDdeve ter o mesmo valor emwazuh.masterewazuh.worker - A variável
API_PASSWORDdeve ter o mesmo valor emwazuh.masterewazuh.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.shQuando 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 -dAguarde 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 bashConfigure 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/jdkIdentifique 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 $HOSTEsse 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