Um servidor com IP público começa a receber tentativas de login e varrimentos de portas poucos minutos depois de estar online. Sem monitorização, isso passa despercebido. O Wazuh é um SIEM open source que junta deteção de intrusões, monitorização de integridade de ficheiros e análise de vulnerabilidades, e corre bem em Docker. Este é o processo que uso na minha VPS.

O que vais precisar

  • Uma VPS Linux com Docker e Docker Compose instalados.
  • Pelo menos 8 GB de RAM. O Wazuh indexer (baseado em OpenSearch) sozinho pede cerca de 4 GB.
  • Acesso SSH com sudo.

1. Preparar o kernel

O indexer precisa de um limite de memória virtual maior do que o predefinido. Sem isto, o container arranca e morre logo a seguir.

sudo sysctl -w vm.max_map_count=262144
echo "vm.max_map_count=262144" | sudo tee /etc/sysctl.d/99-wazuh.conf

2. Obter a stack oficial

O projeto wazuh-docker tem uma configuração single-node pronta. Escolhe a versão mais recente na página de releases do repositório e usa essa tag no clone.

git clone https://github.com/wazuh/wazuh-docker.git -b v4.x.y   # troca pela versão atual
cd wazuh-docker/single-node

3. Gerar certificados e arrancar

Os componentes falam entre si por TLS. O próprio repositório traz um gerador de certificados:

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

Ao fim de um ou dois minutos devem aparecer três containers: manager, indexer e dashboard.

4. Não exponhas o painel à internet

Este é o erro mais comum. O docker-compose.yml publica o dashboard na porta 443 de todas as interfaces. Há uma armadilha extra: as portas publicadas pelo Docker passam por cima das regras do UFW, porque o Docker escreve diretamente no iptables. Ou seja, a firewall pode dizer que a porta está fechada e ela estar aberta.

A solução é ligar a porta só ao localhost, editando a secção do dashboard:

ports:
  - "127.0.0.1:8443:5601"

Depois acedes por um túnel SSH a partir do teu computador e abres https://localhost:8443 no browser:

ssh -L 8443:127.0.0.1:8443 utilizador@ip-da-vps

Muda também as passwords predefinidas antes de usares o sistema a sério. A documentação oficial do Wazuh explica o processo para a versão em Docker.

5. Instalar o agente no próprio servidor

O manager em Docker não vê o host sozinho. Para monitorizar a VPS, instala o agente diretamente no sistema e aponta-o para o manager local. A versão do agente não pode ser mais recente do que a do manager.

curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | sudo gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/wazuh.gpg --import
sudo chmod 644 /usr/share/keyrings/wazuh.gpg
echo "deb [signed-by=/usr/share/keyrings/wazuh.gpg] https://packages.wazuh.com/4.x/apt/ stable main" | sudo tee /etc/apt/sources.list.d/wazuh.list
sudo apt update
sudo WAZUH_MANAGER="127.0.0.1" apt install wazuh-agent
sudo systemctl enable --now wazuh-agent

As portas 1514 e 1515 do manager são as que o agente usa. Se só tens agentes no próprio servidor, liga-as também ao 127.0.0.1.

O que passas a ver

  • Tentativas de login por SSH com utilizadores que não existem e ataques de força bruta, com alertas em tempo real.
  • Alterações a ficheiros sensíveis como /etc/passwd ou a configuração do nginx (File Integrity Monitoring).
  • Pacotes do sistema com vulnerabilidades conhecidas.

No meu caso, junto o Wazuh ao Dozzle para ler os logs de todos os containers num só sítio. O Wazuh diz-me que algo se passa; o Dozzle ajuda a perceber o quê.

Resumo: bloqueia as portas no compose (127.0.0.1) em vez de confiar só na firewall, acede ao painel por túnel SSH e põe o agente no host.