Como criar servidor de email com Mailcow em VPS Linux

Guia técnico pra criar servidor email Mailcow em VPS Linux com Postfix, Dovecot, SOGo, DKIM, SPF, DMARC e painel web em menos de 1 hora.

Rodar seu próprio servidor de email deixou de ser tabu — Mailcow empacota Postfix, Dovecot, SOGo, Rspamd, ClickHouse e administração web em containers Docker isolados, eliminando 90% do trabalho de configuração manual que antigamente consumia dias. Você sobe o stack completo num VPS Linux em menos de uma hora.

Este tutorial é pra desenvolvedor ou sysadmin que precisa de email profissional sob controle próprio — sem depender de Workspace, Microsoft 365 ou Zoho. Aplicações típicas: empresa que quer caixas postais ilimitadas sem custo por usuário, SaaS que precisa de servidor SMTP transacional com reputação isolada, ou profissional técnico que valoriza privacidade de correspondência.

Tempo estimado de execução: 45-60 minutos, dos quais 15-20 minutos são propagação de DNS. O resto é instalação automatizada e configuração do domínio no painel.

Pré-requisitos

Antes de começar, você precisa ter os recursos alinhados. Email é sensível a IP, DNS reverso e portas — pular qualquer um desses pontos significa mensagens caindo em spam mesmo com TLS válido.

Recursos mínimos

Mailcow recomenda 6 GB de RAM, 20 GB de disco e 2 vCPU pra operação confortável. Sistema operacional: Ubuntu 22.04/24.04 LTS ou Debian 12. Acesso root via SSH. Domínio próprio com controle de DNS (Cloudflare, Registro.br, etc).

Hostname sugerido mail.seudominio.com
Portas SMTP 25, 465, 587
Portas IMAP/POP 143, 993, 110, 995
Painel web 443 (HTTPS)
Sieve 4190

Configure o registro PTR (DNS reverso) do IP do VPS apontando pro hostname escolhido antes de continuar. Em painel de provedor de VPS você encontra isso normalmente em “Rede” ou “IP reverso”. Sem PTR válido, a entrega pra Gmail e Outlook degrada drasticamente.

Confirme também que a porta 25 outbound está aberta — muitos provedores bloqueiam SMTP saída por padrão. Teste com telnet smtp.gmail.com 25 ou nc -vz smtp.gmail.com 25 a partir do VPS. Se der timeout, abra ticket no suporte do provedor antes de prosseguir.

Preparar o sistema base

A primeira fase deixa o servidor pronto pra Docker e Mailcow. Trabalhamos com pacotes oficiais de cada projeto, evitando repos de terceiros.

01

Atualize o sistema e instale dependências básicas:

sudo apt update && sudo apt upgrade -y
sudo apt install -y curl git ca-certificates gnupg lsb-release

Atualização completa do sistema garante kernel e bibliotecas TLS recentes — crítico pra negociação de certificados Let’s Encrypt e cipher suites modernas no Postfix/Dovecot.

02

Instale Docker Engine seguindo o método oficial:

curl -fsSL https://get.docker.com | sudo bash
sudo systemctl enable --now docker

O script oficial detecta a distro, configura o repo apt e instala docker-ce + docker-compose-plugin. Confirme com docker --version e docker compose version (note: subcomando compose, sem hífen — é o plugin v2).

03

Defina o hostname FQDN do servidor:

sudo hostnamectl set-hostname mail.seudominio.com

Edite /etc/hosts adicionando a linha:

127.0.1.1 mail.seudominio.com mail

Postfix usa o hostname do sistema pra apresentar-se em EHLO durante handshake SMTP. Hostname errado quebra rDNS check de servidores remotos.

04

Configure o firewall liberando as portas necessárias:

sudo ufw allow 22/tcp
sudo ufw allow 25,80,110,143,443,465,587,993,995,4190/tcp
sudo ufw enable
Confira o SSH primeiro

Antes de ativar o UFW, confirme que você consegue reconectar em outra sessão SSH. Ativar firewall sem liberar a porta 22 trava você fora do VPS.

Instalar Mailcow

Com o sistema pronto, clonamos o repositório oficial e geramos a configuração base. O setup interativo pergunta o hostname e gera as senhas aleatórias dos serviços internos.

05

Clone o repositório oficial em /opt:

sudo git clone https://github.com/mailcow/mailcow-dockerized /opt/mailcow-dockerized
cd /opt/mailcow-dockerized

O diretório /opt é a convenção pro stack — scripts oficiais de backup e update assumem esse caminho. Não use /root nem /home.

06

Gere o arquivo de configuração:

sudo ./generate_config.sh

Quando perguntar pelo hostname FQDN, digite mail.seudominio.com (o mesmo do passo 03). O script gera mailcow.conf com senhas aleatórias pro MySQL, Redis e API. Não edite as senhas manualmente — backups dependem desses valores.

07

Suba o stack completo:

sudo docker compose pull
sudo docker compose up -d

O pull baixa ~3 GB de imagens (Postfix, Dovecot, SOGo, Rspamd, MySQL, Redis, ClickHouse, Nginx, ACME, Watchdog, Netfilter). O up cria todos os containers em background. Primeiro boot leva 2-3 minutos pra MySQL inicializar schemas.

08

Verifique que todos os containers subiram:

sudo docker compose ps

Você deve ver ~15 containers com status running ou healthy. Se algum aparecer restarting, rode sudo docker compose logs <nome-do-container> pra investigar — comum no primeiro boot quando MySQL ainda está populando.

Configurar DNS do domínio

Mailcow está rodando, mas o domínio não chega lá ainda. Precisamos publicar 6 registros DNS: MX, A, SPF, DKIM, DMARC e autodiscover. Esses registros são o que torna o servidor confiável pros grandes provedores.

09

Acesse o painel pela primeira vez:

https://mail.seudominio.com

Login default: usuário admin, senha moohoo. Troque imediatamente em Sistema → Administradores. O Mailcow já gerou certificado Let’s Encrypt automaticamente se as portas 80 e 443 estavam acessíveis quando subiu.

10

Adicione o domínio em Configuração → Domínios → Adicionar domínio. Preencha:

Domínio seudominio.com
Quota padrão por caixa 3072 MB
Máx. de caixas 10
Limite diário SMTP 1000

Após criar o domínio, vá em Configuração → Configuração → ARC/DKIM. O Mailcow gera o par de chaves automaticamente — copie o registro TXT mostrado.

11

Publique os registros DNS no seu provedor (exemplo pra Cloudflare):

seudominio.com.        IN A      203.0.113.10
mail.seudominio.com.   IN A      203.0.113.10
seudominio.com.        IN MX 10  mail.seudominio.com.
seudominio.com.        IN TXT    "v=spf1 mx -all"
dkim._domainkey.seudominio.com. IN TXT "v=DKIM1; k=rsa; p=MIIBI..."
_dmarc.seudominio.com. IN TXT    "v=DMARC1; p=quarantine; rua=mailto:[email protected]"
autodiscover.seudominio.com. IN CNAME mail.seudominio.com.
autoconfig.seudominio.com.   IN CNAME mail.seudominio.com.

Substitua 203.0.113.10 pelo IP do seu VPS e a chave DKIM pelo valor real gerado no passo 10. Propagação leva de 5 a 30 minutos dependendo do TTL.

DMARC progressivo

Comece DMARC com p=none por 1-2 semanas e monitore os relatórios em rua=. Depois escale pra quarantine e finalmente reject quando tiver certeza que SPF e DKIM passam pra 100% dos seus envios legítimos.

Criar caixas postais e testar

Domínio adicionado e DNS propagado, agora criamos a primeira caixa postal real e validamos o envio bidirecional.

12

Em Email → Caixas postais → Adicionar caixa postal, preencha usuário, domínio, nome completo, senha e quota. Repita pra cada usuário.

Acesse o webmail em https://mail.seudominio.com/SOGo/. Login com email completo ([email protected]) + senha definida. SOGo entrega calendário, contatos e ActiveSync pra clientes móveis sem configuração extra.

13

Configure cliente desktop (Thunderbird, Outlook, Apple Mail) com auto-discovery: os registros autodiscover e autoconfig que você publicou no DNS fazem o cliente preencher servidores e portas sozinho. Caso configure manual:

IMAP mail.seudominio.com:993 (SSL/TLS)
SMTP mail.seudominio.com:587 (STARTTLS)
Sieve mail.seudominio.com:4190 (STARTTLS)

Verificação

Confirme que entregabilidade está saudável antes de migrar caixas postais reais ou rotear domínio em produção.

Envie email de teste pra um endereço Gmail e cheque o cabeçalho da mensagem recebida (no Gmail: três pontos → “Mostrar original”). Procure as linhas:

spf=pass
dkim=pass
dmarc=pass

Se algum aparecer fail ou neutral, há erro de DNS — revise SPF, DKIM e PTR. Uma alternativa rápida é mandar email pra [email protected], que retorna relatório detalhado em segundos.

Teste recepção mandando do Gmail pro endereço no seudominio.com. Confira se chega na inbox (não em spam). Se cair em spam, o problema costuma ser PTR ausente ou IP do VPS em blocklist — verifique em mxtoolbox.com/blacklists.

Resolução de problemas

Containers ficam reiniciando

Causa comum: MySQL não conseguiu inicializar por falta de RAM. Rode free -h e confirme que tem ao menos 4 GB livres. Se o VPS tem 4 GB total e memória já foi consumida, aumente swap:

sudo fallocate -l 4G /swapfile && sudo chmod 600 /swapfile
sudo mkswap /swapfile && sudo swapon /swapfile

Adicione /swapfile none swap sw 0 0 em /etc/fstab pra persistir.

Let’s Encrypt não emite certificado

Verifique no log do container ACME:

sudo docker compose logs acme-mailcow

Causas frequentes: porta 80 bloqueada por firewall externo, registro A de mail.seudominio.com ainda não propagado, ou rate limit do Let’s Encrypt (50 emissões/semana por domínio raiz).

Emails saem mas caem em spam

Cheque o PTR com dig -x SEU_IP +short. Resultado precisa retornar mail.seudominio.com. exatamente — não o hostname genérico do provedor. Se estiver errado, ajuste no painel do provedor de VPS. Propagação leva até 24h.

Próximos passos

Com o servidor rodando, considere:

  • Configurar backup automatizado com helper-scripts/backup_and_restore.sh do próprio repositório Mailcow, agendado via cron diário pra um destino externo (S3 compatível ou outro VPS).
  • Habilitar 2FA no painel admin em Configuração → Administradores → Editar → Two-factor authentication (suporta TOTP e Yubikey).
  • Migrar caixas postais antigas via Sync Jobs (Email → Configuração → Sync jobs) — conecta no IMAP origem e replica preservando flags.
  • Ajustar limites de envio por domínio conforme reputação cresce — começar com 500/dia e subir gradualmente até 5000/dia.

Se você está colocando isso em produção e quer porta 25 já liberada, PTR configurável pelo painel e suporte técnico em português, uma VPS Hostini entrega o ambiente Linux pronto pra rodar Mailcow sem fricção com bloqueios de provedor.

Perguntas frequentes

Mailcow funciona em VPS de 2 GB de RAM?

Tecnicamente sobe, mas o Rspamd e o ClickHouse engasgam sob carga real. O mínimo recomendado oficial é 6 GB de RAM e 20 GB de disco. Pra produção com 5+ caixas postais ativas, considere 8 GB e SSD NVMe — o ClickHouse faz I/O intensivo de logs.

Posso instalar Mailcow ao lado de outros serviços no mesmo VPS?

Não recomendado. Mailcow ocupa portas 25, 465, 587, 110, 143, 993, 995, 80, 443 e 4190, além de assumir o Docker daemon. Conflitos com Nginx/Apache locais são frequentes. Use VPS dedicado pro stack de email.

Por que minha porta 25 está bloqueada e como libero?

Provedores de nuvem bloqueiam SMTP outbound (porta 25) por padrão pra mitigar spam. Você precisa abrir ticket no provedor pedindo desbloqueio, justificando o uso (servidor de email transacional próprio). Sem isso, Mailcow recebe mas não envia.

Mailcow gera os registros DKIM automaticamente?

Sim. Após adicionar o domínio no painel (Configuração → Domínios), o Mailcow gera o par de chaves DKIM e mostra o registro TXT pra publicar no DNS. O seletor padrão é dkim. Você só copia e cola no seu provedor de DNS.

Como migrar caixas postais existentes pro Mailcow?

Use a função Sync Jobs do painel (Email → Configuração → Sync jobs). Mailcow conecta no IMAP origem e replica mensagens preservando flags e estrutura de pastas. Funciona com Gmail, Outlook, qualquer servidor IMAP — desde que você tenha senha de app/IMAP habilitado.

Preciso de IP reverso (PTR) configurado?

Sim, obrigatório. Sem PTR válido apontando pro hostname do servidor (mail.seudominio.com), Gmail, Outlook e a maioria dos grandes provedores rejeitam ou marcam como spam. Configure o PTR no painel do provedor de VPS antes de enviar o primeiro email.

Tópicos:
Próximos passos Cloud Ryzen com NVMe e proteção DDoS sempre ativa.Coloque em produção numa VPS Hostini →
Esse tutorial foi útil?
Falar no WhatsApp