SSD Nodes Learn Hosting plans →
Guias Matt ConnorPor Matt Connor · Atualizado 2026-10-04

Stalwart no VPS: servidor de e-mail em um binário

Veja o que o binário Rust v0.16.19 substitui em Postfix e Dovecot, o que ele não resolve e quando o mailcow ainda é a melhor escolha.

O que o Stalwart reúne num único binário

O Stalwart é um servidor de e-mail que pode executar num único VPS como um binário Rust. O mesmo processo responde a SMTP, IMAP, POP3, JMAP, CalDAV, CardDAV e WebDAV. Também inclui o próprio filtro de spam, o próprio armazenamento de mensagens e o próprio cliente ACME. Uma stack convencional executa esse trabalho com Postfix, Dovecot, Rspamd, uma base de dados para as contas e uma ferramenta de certificados separada. O Stalwart substitui tudo isso por uma única unidade de serviço e um único ficheiro de configuração em /etc/stalwart/config.json.

Todos os valores, nomes de definições e comandos abaixo foram obtidos na documentação, nas páginas de versões e no script de instalação do Stalwart, consultados em 28 August 2026, tendo como referência a versão v0.16.19 (publicada em 24 August 2026). Estes são comandos para executar no seu próprio servidor. Cada comando é seguido pela verificação que indica se foi executado com sucesso.

O Stalwart é distribuído sob uma licença dupla: GNU Affero General Public License v3.0 (AGPL-3.0) e Stalwart Enterprise License v2. Algumas funcionalidades estão disponíveis apenas na edição Enterprise. A lista documentada de endpoints HTTP identifica /scim/v2/* essas funcionalidades. Leia os termos da licença antes de planear uma implementação baseada numa funcionalidade que ainda não testou.

Um único binário reduz efetivamente o número de componentes. Não reduz os dois fatores que determinam se as suas mensagens chegam ao destino.

A porta 25 e a reputação no DNS não dependem do software utilizado

A porta TCP 25 de saída é o primeiro ponto de verificação. Muitos fornecedores de VPS bloqueiam-na por predefinição em contas novas. Uma porta 25 bloqueada significa que o servidor consegue comunicar consigo próprio, mas com mais ninguém. Teste-a antes de instalar qualquer componente.

sudo apt update && sudo apt install -y netcat-openbsd
nc -vz -w 5 alt1.aspmx.l.google.com 25

Um resultado normal apresenta Connection to alt1.aspmx.l.google.com ... 25 port [tcp/smtp] succeeded! em cerca de um segundo. Uma porta bloqueada espera os cinco segundos completos e depois apresenta nc: connect to alt1.aspmx.l.google.com port 25 (tcp) failed: Connection timed out, porque os pacotes são descartados a montante e nada envia um reset de volta. Se isso acontecer, abra um ticket junto do fornecedor. Nenhum servidor de correio consegue contornar um pacote descartado.

O segundo ponto de verificação é a forma como as redes recetoras avaliam o seu endereço IP e o seu domínio. Isso inclui o DNS inverso do IP, SPF, DKIM, DMARC e o histórico de envio do bloco de endereços que lhe foi atribuído. A página de configuração de DNS do Stalwart é clara sobre onde esse trabalho é feito: os registos de DNS inverso "são normalmente configurados pelo fornecedor de alojamento, não pelo próprio Stalwart". O mesmo se aplica ao resto desta categoria. As configurações ficam na sua zona DNS e no painel de controlo do fornecedor, não no servidor de correio.

Por isso, esta página não volta a explicar esses registos. Temos uma página que o faz: Configurar SPF, DKIM e DMARC uma vez para tudo o que envia correio. Se ainda não decidiu se quer executar um servidor de correio próprio, comece por a nossa análise honesta sobre se o correio eletrónico autoalojado ainda compensa. Escolher o Stalwart não altera nenhum desses fatores.

O que um VPS pequeno precisa para executar um servidor de e-mail Stalwart

A página de requisitos do sistema do Stalwart, consultada em 28 de agosto de 2026, apresenta estes números. O consumo de memória em inatividade é de cerca de 100 MB. Uma instalação pequena, com 5 a 10 utilizadores, funciona com 1 GB de RAM. Uma configuração com pouco tráfego e cerca de 5 utilizadores funciona com um único núcleo de CPU. A página acrescenta que "à medida que a simultaneidade e a atividade aumentam, serão necessários mais núcleos de CPU para manter uma latência baixa e um débito elevado". O limite predefinido é de 8,192 ligações simultâneas em todos os serviços e pode ser configurado.

Essa página não indica um tamanho mínimo para o disco. Por isso, dimensione o disco para o volume de e-mail que espera manter, acrescentando espaço para a compactação do armazenamento.

Três caminhos de saída têm de funcionar. Caso contrário, o servidor apresenta falhas que parecem não ter relação com o e-mail. O servidor obtém o pacote da interface web a partir de https://github.com/stalwartlabs/webui/releases/latest/. Acede a https://acme-v02.api.letsencrypt.org/directory para obter certificados. Precisa de DNS nas portas UDP e TCP 53 para consultar registos MX e registos de autenticação. Uma firewall de saída restritiva que bloqueie o primeiro caminho deixa um servidor de e-mail em execução, mas sem interface de administração.

Instale uma versão fixada, não a versão "latest"

O instalador oficial é um script de shell. Leia-o antes de o executar.

curl --proto '=https' --tlsv1.2 -sSf https://get.stalw.art/install.sh -o install.sh
less install.sh
sudo sh install.sh

A leitura desse script em 28 August 2026 mostra exatamente o que ele faz. O script cria a conta de serviço stalwart e os diretórios necessários. Em seguida, faz o download a partir de https://github.com/stalwartlabs/stalwart/releases/latest/download. O binário é colocado em /usr/local/bin/stalwart com o modo 0755. A configuração vai para /etc/stalwart/config.json, os dados para /var/lib/stalwart e os logs para /var/log/stalwart. Os três diretórios ficam com o modo 0750 e pertencem a stalwart. Um ficheiro de ambiente é gravado em /etc/stalwart/stalwart.env com o modo 0640 e pertence a root:stalwart. O script aceita um prefixo de instalação opcional e uma flag --fdb para a compilação do FoundationDB. Não aceita um argumento de versão.

Este último ponto é importante. O script obtém sempre a versão mais recente, por isso dois servidores configurados com uma semana de diferença podem não executar o mesmo código. Fixe o binário manualmente logo depois. Esse também é o procedimento de atualização indicado pelas notas de lançamento da v0.16.19: "Se estiver a atualizar a partir da v0.16.x, substitua o binário (ou execute docker pull)."

STALWART_TAG=v0.16.19
curl -fsSLO "https://github.com/stalwartlabs/stalwart/releases/download/${STALWART_TAG}/stalwart-x86_64-unknown-linux-gnu.tar.gz"
tar zxf stalwart-x86_64-unknown-linux-gnu.tar.gz
sudo systemctl stop stalwart
sudo install -m 0755 -o root -g root stalwart /usr/local/bin/stalwart
sudo systemctl start stalwart
systemctl is-active stalwart

systemctl is-active stalwart deve apresentar active. Se apresentar qualquer outra coisa, consulte journalctl -u stalwart -n 50. Cada artefacto de lançamento é disponibilizado com um pacote .sigstore.json correspondente, por isso a assinatura do download pode ser verificada antes da instalação.

A unidade escrita pelo script é executada como User=stalwart e define AmbientCapabilities=CAP_NET_BIND_SERVICE. Essa capability permite que uma conta sem privilégios faça bind às portas 25, 443, 465 e 993. Se criar a sua própria unidade mais tarde e omitir essa linha, o serviço falha ao arrancar, porque um utilizador normal não pode fazer bind a uma porta inferior a 1024.

Onde a primeira palavra-passe de administrador é apresentada

O Stalwart inicia em modo de bootstrap e escreve uma palavra-passe temporária de 16 caracteres uma única vez no log do serviço.

sudo journalctl -u stalwart -n 200 | grep -A8 'bootstrap mode'

O assistente de configuração escuta em HTTP simples na porta 8080. Não exponha essa porta. Crie um túnel a partir do seu portátil através de SSH:

ssh -N -L 8080:127.0.0.1:8080 you@your-vps

Em seguida, abra http://127.0.0.1:8080/admin e inicie sessão como admin com a palavra-passe do log. O assistente pede o nome de host do servidor, o domínio de correio predefinido, TLS, o armazenamento, o diretório de contas, o registo e o tratamento de DNS. Reinicie o serviço quando terminar e, a partir desse momento, utilize https://<your-host>/admin.

Se a palavra-passe já tiver saído do log, defina uma palavra-passe fixa. O /etc/stalwart/stalwart.env inclui entradas comentadas para este fim, incluindo STALWART_RECOVERY_ADMIN=admin:changeme, STALWART_RECOVERY_MODE=true e STALWART_RECOVERY_MODE_PORT (predefinição: 8080). Retire os comentários, reinicie o serviço, inicie sessão e volte a comentar as entradas. A página de hardening do Stalwart recomenda guardar essa credencial apenas para situações de emergência. Nunca inicie sessão no IMAP, JMAP ou WebDAV com uma conta de administrador.

A mesma página indica quais os listeners a manter: a porta 25 para SMTP de entrada, 465 para submissão com TLS implícito, 993 para IMAPS e 443 para todo o tráfego HTTP. Considera 587, 143, 4190, 110, 995 e 8080 não essenciais e recomenda desativar a porta 8080 depois de concluir a configuração.

Executar no Docker com uma tag fixa

A imagem documentada é stalwartlabs/stalwart. A tag v0.16.19 estava disponível no Docker Hub em 28 August 2026, juntamente com uma variante -alpine. Fixe a versão do patch, e não a tag flutuante v0.16, pelo mesmo motivo indicado para o binário acima.

services:
  stalwart:
    image: stalwartlabs/stalwart:v0.16.19
    container_name: stalwart
    restart: unless-stopped
    ports:
      - "25:25"
      - "465:465"
      - "993:993"
      - "443:443"
      - "127.0.0.1:8080:8080"
    volumes:
      - stalwart-etc:/etc/stalwart
      - stalwart-data:/var/lib/stalwart
volumes:
  stalwart-etc:
  stalwart-data:

Esse ficheiro contém o comando documentado docker run escrito em Compose, com os listeners não essenciais removidos e a porta de configuração ligada a localhost. Inicie-o e leia a mesma linha de bootstrap:

docker compose up -d
docker compose logs stalwart 2>&1 | grep -A8 'bootstrap mode'

A página do Docker também documenta -e STALWART_RECOVERY_ADMIN=admin:mySecretPass como forma de definir uma credencial fixa no arranque. No Compose, essa opção corresponde à chave environment:, se preferir esse método a consultar os logs.

A lista completa de portas documentada e o motivo pelo qual este ficheiro é mais curto

A página Docker do Stalwart publica 443, 8080, 25, 587, 465, 143, 993, 110, 995 e 4190. A página de hardening classifica 587, 143, 110, 995 e 4190 como não essenciais e indica que 8080 deve ser desativada depois da configuração inicial. Adicione apenas as portas de que os clientes realmente precisam. Se um telefone exigir submissão com STARTTLS, publique 587. Se os utilizadores criarem regras Sieve a partir de um cliente de desktop, publique 4190.

Se o Compose ainda for novo para si, o nosso guia de Docker Compose para um VPS explica a estrutura dos ficheiros e o modelo de volumes nomeados usado aqui. Tenha atenção a um problema particularmente frequente em servidores de email: o Docker publica portas através das suas próprias regras de firewall, e essas regras são avaliadas antes das regras do ufw. Por isso, ufw deny 8080 não fecha uma porta publicada pelo Compose. É a associação a 127.0.0.1 no mapeamento de portas que realmente a fecha. É por isso que o ficheiro acima usa essa associação e o túnel SSH continua a funcionar.

TLS sem certbot e o custo dessa opção

O Stalwart implementa o ACME (ambiente de gestão automática de certificados) diretamente. Por isso, não há certbot nem hook de renovação. A documentação lista quatro métodos de validação. O HTTP-01 responde a um pedido de desafio na porta 80. O TLS-ALPN-01 apresenta um certificado específico para este fim na porta 443, usando o protocolo ALPN do ACME. O DNS-01 publica registos TXT temporários e é um dos dois métodos que podem emitir certificados wildcard. O DNS-PERSIST-01 usa registos TXT de autorização de longa duração, em vez de criar um novo registo a cada renovação.

O custo é que o Stalwart precisa de controlar a porta. O TLS-ALPN-01 funciona ao concluir diretamente o handshake TLS. Por isso, não funciona atrás de um reverse proxy que termina o TLS. Se o nginx ou o Caddy já controlarem a porta 443 nesse servidor, mude o Stalwart para DNS-01 ou atribua-lhe o seu próprio endereço IP.

DANE e MTA-STS: os padrões que você deve conhecer

Ambos são configurados por estratégia TLS no objeto MtaTlsStrategy, em Settings, MTA, Outbound, TLS Strategies, na interface web. O campo dane usa optional por padrão. Ele tenta validar DANE quando o destinatário publica registos TLSA e recorre ao STARTTLS normal quando não publica. Defina-o como require para que a entrega só prossiga quando existir um registo TLSA verificável. O campo mtaSts funciona da mesma forma e usa optional por padrão. Os tempos limite relacionados são tlsTimeout (3 minutos por padrão) e mtaStsTimeout (5 minutos por padrão).

No lado de entrada, o Stalwart pode publicar a sua própria política MTA-STS em https://mta-sts.<domain>/.well-known/mta-sts.txt, que requer a porta 443 aberta. O singleton MtaSts tem mode (testing por padrão), maxAge (7 dias por padrão) e mxHosts, que usa os nomes de host do seu certificado TLS quando está vazio. Deve fornecer dois registos DNS: um CNAME mta-sts que aponte para o host de e-mail e um registo TXT _mta-sts que contenha o identificador da política.

dig +short TXT _mta-sts.example.org
curl -s https://mta-sts.example.org/.well-known/mta-sts.txt

A consulta TXT deve devolver uma cadeia v=STSv1; id=..., e o curl deve devolver o corpo da política. Se o curl não devolver nada, a porta 443 está fechada ou o certificado para mta-sts.example.org nunca foi emitido.

Mantenha mode em testing até que ambas as verificações sejam concluídas com sucesso. Uma política no modo enforce com um certificado inválido impede outros servidores de entregar mensagens para si, e os utilizadores irão informá-lo do problema antes de ele aparecer num log. O DANE tem uma armadilha semelhante: requer uma zona assinada com DNSSEC, e um registo TLSA que fixe o certificado final tem de ser republicado sempre que o ACME renovar o certificado. Fixe a CA emissora ou aceite o trabalho adicional de renovar o registo.

A criptografia em repouso não é criptografia ponta a ponta

Esta é a funcionalidade mais frequentemente interpretada de forma incorreta, por isso apresentamos exatamente o que a documentação diz. As mensagens em texto simples de cada utilizador são encriptadas automaticamente com o certificado OpenPGP ou S/MIME do utilizador antes de serem gravadas no disco. encryptAtRest está ativado por predefinição e aplica-se às mensagens recebidas por SMTP ou LMTP, desde que o destinatário tenha registado uma chave de encriptação. encryptOnAppend tem o valor false por predefinição, «o que deixa as mensagens anexadas inalteradas para que os clientes mantenham controlo total sobre o conteúdo que armazenam». O OpenPGP utiliza PGP/MIME, e não o PGP/Inline mais antigo, com AES-256 ou AES-128. O Stalwart não gera chaves: os utilizadores exportam uma chave pública ASCII-armored e registam-na como um objeto PublicKey em Account, Public Keys.

Isto protege contra uma imagem de disco roubada, uma cópia de segurança roubada e um operador que leia o armazenamento depois da entrega. Sem a chave privada, os bytes armazenados não podem ser lidos, e o administrador também não os consegue desencriptar.

Isto não protege a mensagem durante o trânsito. Uma mensagem atravessa a Internet com o TLS que os dois servidores acordaram usar, chega em texto simples e o Stalwart encripta-a nesse momento. O remetente, o fornecedor do remetente e qualquer salto que tenha removido o TLS já tiveram acesso ao texto simples.

Vale a pena indicar claramente mais três limitações. As pastas Sent e Drafts são gravadas pelo cliente, através de uma operação append, e encryptOnAppend é false por predefinição; por isso, permanecem em texto simples, a menos que altere essa configuração. A documentação que consultei em 28 August 2026 descreve apenas o conteúdo das mensagens e não afirma que os dados do envelope, os cabeçalhos ou as entradas de índice sejam encriptados; por isso, não presuma que o são. Também não afirma que as mensagens armazenadas antes do carregamento de uma chave sejam novamente encriptadas; por isso, parta do princípio de que não são e confirme. Também não é indicado se a pesquisa de texto completo continua a funcionar nos corpos encriptados. Teste essa funcionalidade numa conta descartável antes de a prometer a alguém.

E, se um utilizador perder a chave privada, perde o acesso ao correio. Não existe um mecanismo de recuperação, por opção de conceção.

O WKD é uma tarefa de servidor web, não uma tarefa de servidor de correio

O WKD (Web Key Directory) é a outra metade do OpenPGP e resolve um problema diferente. Publica a sua chave pública num URL HTTPS fixo sob o seu domínio, para que o cliente de correio do remetente a possa encontrar e cifrar a mensagem antes de ela sair do computador do remetente. Isto é cifragem de ponta a ponta. A cifragem de dados em repouso do Stalwart aplica-se à cópia armazenada no disco. Configurar uma não configura a outra.

O Stalwart não serve WKD. Os endpoints HTTP documentados, consultados em 28 August 2026, listam caminhos well-known para jmap, caldav, carddav, oauth-authorization-server, openid-configuration, acme-challenge, mta-sts.txt, mail-v1.xml e autoconfig. Não existe um caminho openpgpkey. Sirva-o a partir de um servidor web estático comum.

A especificação define dois layouts. O método avançado usa https://openpgpkey.example.org/.well-known/openpgpkey/example.org/hu/iy9q119eutrkn8s1mk4r39qejnbu3n5q?l=Joe.Doe. O método direto usa https://example.org/.well-known/openpgpkey/hu/iy9q119eutrkn8s1mk4r39qejnbu3n5q?l=Joe.Doe. Essa cadeia de 32 caracteres é o SHA-1 da parte local convertida para minúsculas e codificada em z-base-32. Por isso, nunca deve criar estes nomes de ficheiro manualmente. O GnuPG cria-os por si.

gpg --export --armor you@example.org > you.asc
gpg-wks-client --print-wkd-url you@example.org
gpg-wks-client --install-key you.asc you@example.org

--print-wkd-url imprime o URL que um cliente vai consultar, usando a forma com subdomínio. --install-key grava a chave numa árvore de diretórios local que replica o layout do WKD, dentro de um diretório de nível superior chamado openpgpkey por predefinição e alterado com -C dir. Copie essa árvore para a raiz web, adicione o ficheiro policy necessário junto do diretório hu (um ficheiro vazio é válido) e consulte o seu próprio URL com curl para confirmar que devolve os bytes da chave, e não um 404.

Armazenamento numa única VPS

O Stalwart divide o armazenamento em quatro funções: um armazenamento de dados para registos estruturados, como o estado das caixas de correio; um armazenamento de blobs para os bytes brutos das mensagens e os anexos; um armazenamento de pesquisa para a indexação de texto completo; e um armazenamento em memória para limitadores de taxa, tokens de autenticação e dados de sessão. Cada função pode apontar para um backend diferente. A lista suportada inclui RocksDB, FoundationDB, PostgreSQL, MySQL, SQLite, armazenamento de objetos compatível com S3, Azure Blob Storage, Redis, ElasticSearch e Meilisearch.

Numa única VPS, a resposta é simples. A documentação chama ao RocksDB "o backend recomendado para instalações de nó único do Stalwart devido à sua velocidade e fiabilidade". O Redis é suportado apenas como armazenamento em memória e não pode ser usado como armazenamento de dados ou de blobs, pelo que não é necessário um contentor Redis separado para começar. Mude o armazenamento de blobs para S3 mais tarde, se as caixas de correio ultrapassarem a capacidade do disco.

Os backups dependem do backend. Para bases de dados externas, use o procedimento próprio dessa base de dados. Para as bases de dados incorporadas, a FAQ indica que deve copiar o diretório /var/lib/stalwart. Faça isso com o serviço parado ou a partir de um snapshot do sistema de ficheiros ou do volume. Uma cópia ao nível dos ficheiros de um armazenamento de pares chave-valor em execução pode capturá-lo durante uma operação de escrita, e só descobrirá o problema quando tentar restaurá-lo.

O filtro de spam que substitui o Rspamd

A filtragem é executada no mesmo processo, por isso não existe um segundo daemon que tenha de ser mantido em execução. O classificador é configurado no singleton SpamClassifier, em Settings, Spam Filter, Classifier. Usa o algoritmo FTRL-Proximal com feature hashing. FtrlFh é a predefinição recomendada para a maioria das implementações. FtrlCcfh substitui-o por cuckoo feature hashing para reduzir colisões de hash e destina-se a implementações de grande escala. O treino é contínuo: quando os utilizadores marcam uma mensagem como spam ou ham, essa classificação é aplicada diretamente às decisões futuras.

À volta do classificador existem blocklists DNS, greylisting, deteção de phishing, spam traps e Pyzor, além da opção de chamar o SpamAssassin através de milter se tiver regras das quais não quer abdicar.

Quando mailcow continua a ser a escolha certa

O Stalwart não tem webmail. Essa é a maior lacuna, e não está perto de ser resolvida. A documentação do mailcow, consultada em 28 August 2026, lista dezasseis componentes, incluindo o SOGo, que disponibiliza aos utilizadores uma caixa de entrada no browser e uma interface CalDAV e CardDAV desde o início. A publicação do roteiro do Stalwart, de 20 June 2025, diz que um webmail integrado está «nos nossos planos, mas não é atualmente a nossa prioridade imediata». A implementação será feita em Rust com Dioxus depois da versão 1.0, «muito provavelmente em algum momento de 2026». Em 28 August 2026, o blogue do projeto não tem nenhuma publicação a anunciar essa funcionalidade. Por isso, com o Stalwart, terá de instalar o Roundcube por sua conta ou pedir a todos os utilizadores que configurem um cliente de correio.

O Stalwart tem uma interface de administração web, portanto essa não é a lacuna que as pessoas esperam encontrar. A segunda lacuna é a maturidade da versão. A FAQ diz que o Stalwart está na versão 0.x e que a estrutura dos dados e a configuração podem mudar antes da v1.0, o que pode exigir uma migração. A própria publicação do projeto de June 2026 tem o título «Zero open bug reports: The road to Stalwart 1.0», indicando o estado atual: está perto, mas ainda não chegou lá.

A terceira lacuna é aquela que ninguém inclui numa lista de funcionalidades. Postfix, Dovecot e Rspamd têm uma década de respostas documentadas. Às duas da manhã, com mensagens na fila e utilizadores à espera, uma pesquisa que devolve uma cadeia de erro correspondente vale mais do que uma arquitetura elegante. Se essa é a sua situação, o nosso guia de instalação do mailcow percorre toda a stack, do início ao fim e a noite será mais curta.

Escolha o Stalwart quando quiser um único binário, um único ficheiro de configuração e JMAP, e estiver confortável em adotar uma solução recente. Escolha o mailcow quando quiser webmail já e uma grande base de respostas existentes.

Migrar o correio existente

O método genérico é IMAP para IMAP com imapsync, que não depende do software usado em nenhuma das extremidades. Faça primeiro uma execução de teste.

imapsync --dry \
  --host1 old.example.org --user1 you@example.org --passfile1 /root/.old.pw \
  --host2 mail.example.org --user2 you@example.org --passfile2 /root/.new.pw

--dry faz com que o imapsync "não execute nada de facto; apenas mostra o que faria", por isso leia essa saída antes de remover a flag. Cada ficheiro de palavra-passe contém a palavra-passe na primeira linha, por isso chmod 600 ambos e elimine-os depois.

O Stalwart também disponibiliza ferramentas mais recentes que a maioria dos guias de terceiros ainda não contempla. O blogue do projeto documenta o Vandelay, um importador e exportador JMAP (29 May 2026), e um proxy de migração para atualizações sem indisponibilidade (10 June 2026). Leia ambos antes de planear uma migração de grande escala, porque são mais recentes do que praticamente tudo o que encontrará publicado noutros locais.

Modos de falha e mensagens apresentadas

A interface de administração nunca carrega. A FAQ menciona este caso diretamente: o pacote da interface web é descarregado do GitHub na primeira execução. Por isso, um servidor sem acesso HTTPS de saída a github.com apresenta o serviço em execução, mas uma página em branco. Verifique com curl -sI https://github.com/stalwartlabs/webui/releases/latest/ a partir do servidor. As outras causas comuns indicadas são um esquema HTTP ou HTTPS incorreto e um reverse proxy que não encaminha o IP do cliente.

Não existe palavra-passe de bootstrap no log. Ela é apresentada uma única vez, durante o arranque, no modo de bootstrap. Se o serviço foi reiniciado entretanto, aumente a janela de consulta com sudo journalctl -u stalwart --since today | grep -A8 'bootstrap mode'. Se tiver desaparecido, defina STALWART_RECOVERY_ADMIN em /etc/stalwart/stalwart.env e reinicie.

O relay através de um proxy local é recusado. As notas de lançamento da versão v0.16.19 registam uma correção para rotas de relay rejeitadas com host resolves loopback address. Se encontrar exatamente essa mensagem, está a executar uma compilação mais antiga. Atualize para uma versão posterior; não tente contornar o problema.

O serviço não arranca depois de criar a sua própria unidade. Sem AmbientCapabilities=CAP_NET_BIND_SERVICE, o utilizador stalwart não pode associar-se às portas 25, 443, 465 ou 993, e o arranque falha no primeiro listener. Copie a linha de capacidades da unidade gerada pelo instalador.

Os certificados nunca são emitidos. O HTTP-01 precisa que a porta 80 esteja acessível e livre. O TLS-ALPN-01 precisa que o próprio Stalwart responda ao handshake TLS na porta 443. Se outro processo no servidor ocupar uma destas portas, o ACME continuará a falhar silenciosamente, enquanto o resto parece estar a funcionar normalmente.

FAQ

O Stalwart substitui o Postfix, o Dovecot e o Rspamd num único VPS?

Sim. Um único binário Rust responde a SMTP, IMAP, POP3, JMAP, CalDAV, CardDAV e WebDAV. Também inclui o filtro de spam, o armazenamento de mensagens e um cliente ACME. Existe uma única unidade systemd e um único ficheiro de configuração em /etc/stalwart/config.json, em vez de quatro daemons e da respetiva configuração de integração. O que não substitui é a sua zona DNS nem a política do seu fornecedor para a porta 25, que é onde o correio alojado localmente é efetivamente aceite ou bloqueado.

De quanta RAM precisa um servidor de correio Stalwart?

A página de requisitos do sistema do Stalwart, consultada em 28 August 2026, indica aproximadamente 100 MB em idle e diz que 1 GB de RAM é adequado para uma instalação pequena com 5 a 10 utilizadores. Uma instalação com cerca de 5 utilizadores e pouco tráfego funciona num único núcleo de CPU. O limite predefinido é de 8,192 ligações simultâneas em todos os serviços e pode ser configurado. Por isso, o limite aumenta com o número de ligações e o volume de correio, não apenas com o número de utilizadores. Não é publicado um tamanho mínimo de disco. Dimensione o disco para o correio que pretende manter.

Mudar para o Stalwart melhora a entregabilidade do meu correio?

Não. A entregabilidade depende de a porta TCP 25 de saída estar aberta no seu VPS, do reverse DNS do seu IP e dos registos SPF, DKIM e DMARC do seu domínio. O Stalwart suporta DANE, MTA-STS e relatórios de TLS para SMTP. Também pode publicar a sua política MTA-STS. No entanto, estes mecanismos protegem o transporte, não determinam se a rede recetora confia no seu endereço. Teste a porta 25 com nc -vz -w 5 alt1.aspmx.l.google.com 25 antes de instalar qualquer componente.

O Stalwart inclui webmail?

Não, em 28 August 2026. Inclui uma interface de administração web, que é uma coisa diferente. A publicação do roadmap do projeto, de 20 June 2025, diz que está previsto um cliente webmail depois da versão 1.0, desenvolvido em Rust com Dioxus, "most likely sometime in 2026". O blog do projeto ainda não publicou nenhum anúncio sobre esse cliente. Se os seus utilizadores precisarem agora de uma caixa de correio no navegador, instale o Roundcube juntamente com o Stalwart ou use uma stack que inclua o SOGo.

Contra o que protege a encriptação do Stalwart em repouso?

O Stalwart encripta as mensagens de cada utilizador com a respetiva chave pública OpenPGP ou S/MIME antes de as gravar no disco. Assim, o conteúdo não pode ser recuperado a partir de um disco roubado, de uma cópia de segurança roubada ou por um administrador que leia o armazenamento. Isto não é encriptação de ponta a ponta. A mensagem chega em texto simples e é encriptada no momento da entrega, pelo que todos os saltos anteriores a conseguem ver. encryptOnAppend tem o valor predefinido false. Por isso, as mensagens enviadas e os rascunhos gravados pelo seu cliente permanecem sem encriptação, a menos que altere essa opção. A documentação abrange apenas o conteúdo das mensagens. Não especifica nada sobre metadados, entradas de índice ou a re-encriptação de mensagens armazenadas antes do carregamento da chave. Confirme esses pontos por sua conta, em vez de os assumir.

#stalwart#email#self-hosting#mail-server#smtp