Mailcow: Servidor de Email Self-Hosted com Docker para PME

O Mailcow é uma suite de email self-hosted baseada em Docker que reúne Postfix, Dovecot, SOGo, Rspamd, ClamAV e Nginx num único stack orquestrado. Para uma PME que precisa de controlo total sobre o seu email — sem depender de Google Workspace ou Microsoft 365 — o Mailcow oferece uma alternativa robusta, com webmail, anti-spam, DKIM/SPF/DMARC e administração via interface web.

Neste artigo

Introdução ao Mailcow

O Mailcow é um projecto open-source mantido pela comunidade, licenciado sob GPL v2, que empacota todos os componentes necessários para um servidor de email completo num conjunto de containers Docker geridos pelo Docker Compose. A arquitectura inclui:

  • Postfix — MTA para envio e recepção de email (SMTP)
  • Dovecot — IMAP/POP3 para acesso a caixas de correio
  • SOGo — webmail com calendário e contactos partilhados
  • Rspamd — anti-spam/anti-vírus com aprendizagem automática
  • ClamAV — motor anti-vírus open-source
  • Nginx — proxy reverso com TLS automático via Let’s Encrypt
  • MySQL/MariaDB — base de dados de configuração e utilizadores

ℹ Requisitos mínimos: 6 GB RAM (recomendado 8 GB com ClamAV activo), 20 GB disco, 1 vCPU, um domínio com DNS apontado para o servidor, portos 25, 80, 443, 465, 587, 993 e 995 abertas no firewall. O servidor não deve partilhar o IP com outros serviços web — o Nginx do Mailcow ocupa os portos 80/443.

Instalar via Docker

A instalação do Mailcow passa por clonar o repositório oficial, ajustar o ficheiro mailcow.conf e iniciar os containers com Docker Compose.

Passo 1 — Clonar o repositório

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

Passo 2 — Configurar mailcow.conf

Copia o ficheiro de exemplo e define o hostname (deve ser um subdomínio como mail.empresa.pt) e a timezone:

cp mailcow.conf.orig mailcow.conf
nano mailcow.conf

# Variáveis principais a editar:
MAILCOW_HOSTNAME=mail.empresa.pt
TZ=Europe/Lisbon
HTTP_PORT=80
HTTPS_PORT=443
SKIP_CLAMD=n
SKIP_SOGO=n

Passo 3 — Iniciar o stack

docker compose up -d

# Verificar se todos os containers estão a correr:
docker compose ps

A primeira inicialização descarrega todas as imagens e pode demorar 5-10 minutos. Quando terminar, acede a https://mail.empresa.pt e faz login com as credenciais por defeito: utilizador admin, palavra-passe moohoo. Altera imediatamente a palavra-passe de administrador.

⚠ Atenção: O porto 25 (SMTP) é frequentemente bloqueado por fornecedores cloud (AWS, Azure, Oracle Cloud). Verifica com o teu provider se o porto 25 está aberto antes de instalar. Se estiver bloqueado, considera usar um relay host SMTP (ex: Amazon SES, SendGrid) para envio.

Configurar DKIM, SPF e DMARC

Sem DKIM, SPF e DMARC configurados, o teu email será quase certamente classificado como spam pelo Gmail, Outlook e outros provedores. O Mailcow gera automáticamente as chaves DKIM — basta adicionares os registos DNS.

DKIM

No painel de administração do Mailcow, vai à Configuration → ARC/DKIM e copia a chave pública gerada. Adiciona um registo TXT no DNS do teu domínio:

# Nome: dkim._domainkey.empresa.pt
# Tipo: TXT
# Valor (exemplo):
v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...

SPF

O registo SPF indica quais os servidores autorizados a enviar email em nome do domínio:

# Nome: empresa.pt
# Tipo: TXT
# Valor:
v=spf1 mx a -all

DMARC

O DMARC une DKIM e SPF e define a política de tratamento de emails que falham a validação:

# Nome: _dmarc.empresa.pt
# Tipo: TXT
# Valor:
v=DMARC1; p=quarantine; rua=mailto:[email protected]; pct=100; adkim=s; aspf=s

ℹ Dica: Começa com p=none em DMARC para monitorizar sem rejeitar emails. Analisa os relatórios agregados durante 1-2 semanas e depois muda para p=quarantine e finalmente p=reject.

Webmail SOGo e Rspamd

SOGo Webmail

O SOGo é o webmail integrado do Mailcow, acessível em https://mail.empresa.pt/SOGo. Oferece calendário, contactos e partilha de pastas entre utilizadores. Suporta ActiveSync para sincronização com Outlook mobile e outras apps. Para activar o ActiveSync, basta ir à Configuration → Mail Setup e garantir que o SOGo está a correr (não definir SKIP_SOGO=y).

Rspamd — Anti-spam e Filtros

O Rspamd substitui o SpamAssassin tradicional com uma abordagem baseada em scoring com aprendizagem automática. A interface web do Rspamd está disponível em https://mail.empresa.pt/rspamd (credenciais definidas no mailcow.conf na variável RSPAMD_PASS).

Para treinar o Rspamd com emails de spam e ham legítimo, usa os comandos:

# Treinar com spam (false positives de ham):
docker exec -it mailcowdockerized-rspamd-mailcow-1 rspamc learn_spam /path/to/spam.eml

# Treinar com ham (false positives de spam):
docker exec -it mailcowdockerized-rspamd-mailcow-1 rspamc learn_ham /path/to/ham.eml

No painel do Rspamd podes ajustar o spam threshold — o valor por defeito é 15 para rejeitar e 6 para marcar como spam. Para uma PME, recomenda-se começar com thresholds mais permissivos e ir ajustando conforme os falsos positivos diminuem.

Erros Comuns e Soluções

A tabela seguinte resume os problemas mais frequentes em instalações Mailcow para PME e as respectivas soluções:

Problema Causa Solução
Emails não chegam ao Gmail Falta DKIM/SPF/DMARC ou IP em blacklist Configurar os 3 registos DNS; verificar IP em mxtoolbox.com; usar relay SMTP se IP for dinâmico
Porto 25 bloqueado Provider cloud bloqueia SMTP outbound Usar relay host (SES, SendGrid); configurar SMTP_RELAY_HOST no mailcow.conf
SOGo não sincroniza no Outlook ActiveSync não activo ou certificado inválido Confirmar SKIP_SOGO=n; renovar certificado TLS; verificar DNS aponta para o servidor
Containers reiniciam em loop RAM insuficiente (<4 GB) ou portos ocupados Aumentar RAM para 6+ GB; libertar portos 80/443 com netstat -tlnp
Rspamd marca tudo como spam Threshold muito baixo ou sem treino Aumentar threshold para 8 no painel Rspamd; treinar com ham legítimo
Certificado TLS não renova Porto 80 fechado ao exterior Abrir porto 80 no firewall para validação ACME do Let’s Encrypt
ClamAV consome muita RAM Base de vírus pesada em servidor pequeno Definir SKIP_CLAMD=y se RAM < 6 GB
Backup falha ou é lento Volumetria de email elevada Usar ./helper-scripts/backup_and_restore.sh com cron nocturno

ℹ Actualizações: O Mailcow lança actualizações frequentes. Antes de actualizar, faz backup completo com ./helper-scripts/backup_and_restore.sh backup all e testa em ambiente de staging. O comando de actualização e ./update.sh dentro do directório mailcow-dockerized.

O Mailcow é uma das melhores opções self-hosted para PME que precisam de independência em relação aos grandes provedores cloud. Com Docker, a instalação é relativamente simples, e a gestão via interface web evita a complexidade tradicional de administrar Postfix e Dovecot manualmente. A configuração correcta de DKIM/SPF/DMARC é essencial para garantir a entregabilidade — sem ela, nem o melhor servidor de email evita a pasta de spam.

Artigos Relacionados

Fontes oficiais: Documentação do Mailcow em docs.mailcow.email, Rspamd em rspamd.com/doc, e Docker Compose em docs.docker.com/compose.