Postfix SMTP: Configurar Relay Email para PME em 2026

SCHEMA MARKUP JSON-LD  |  ✎ Duarte Spínola  |  Tags:

Enviar email a partir de servidores Linux — alertas de monitorização, relatórios de backup, tickets de helpdesk — parece trivial até os emails começarem a chegar ao spam. ISPs bloqueiam portas SMTP, Microsoft 365 exige autenticação, Google Workspace tem limits. A solução é configurar Postfix como relay através de um provedor legítimo (Microsoft 365, SendGrid, Mailgun). Este artigo configura Postfix com relay autenticado, TLS, SPF/DKIM/DMARC e troubleshooting de entrega (Postfix docs).

Neste artigo

  1. Entender Postfix e Relay de Email
  2. Pré-requisitos e Instalação
  3. Passo 1 — Configurar Postfix com Relay Microsoft 365
  4. Passo 2 — TLS e Encriptação
  5. Passo 3 — SPF, DKIM e DMARC
  6. Passo 4 — Aliases e Encaminhamento
  7. Passo 5 — Testar Entrega e Debugar
  8. Passo 6 — Rate Limiting e Queue Management
  9. Postfix vs Outros MTAs — Comparação
  10. Erros Comuns
  11. Checklist Rápido de Verificação

1. Entender Postfix e Relay de Email

Postfix é um MTA (Mail Transfer Agent) — software que envia e recebe email via protocolo SMTP. Foi criado por Wietse Venema em 1998 como alternativa mais segura ao Sendmail. Hoje é o MTA default em Ubuntu, Debian e macOS.

Analogia: Postfix é como uma estação de correios. Recebe cartas (emails) de aplicações locais (monitorização, backup, cron), selava-as (TLS + DKIM), e entrega-as ao destinatário via provedor de email (Microsoft 365, SendGrid). Se a entrega falha, guarda a carta na estação (queue) e tenta novamente mais tarde.

Conceito Função Analogia
MTA Envia/recebe email via SMTP Estação de correios
Relay Envia através de outro servidor Entregar via CTT em vez de entregar à mão
TLS Encripta a conexão SMTP Envelope selado
SPF Autoriza IPs a enviar Lista de estações autorizadas
DKIM Assina o email digitalmente Selo de cera com brasão
DMARC Política de tratamento de falhas Instruções para devolver cartas não entregues
Queue Emails pendentes Caixa de cartas por entregar

O problema que relay resolve: enviar email directamente da internet está bloqueado. A maioria dos ISPs bloqueia a porta 25 (SMTP) para combater spam. Mesmo desbloqueada, IPs dinâmicos estão em blacklists. A solução é relay através de um provedor de email com reputação estabelecida (Postfix relay).

2. Pré-requisitos e Instalação

Requisito Detalhe
Servidor Linux Ubuntu 22.04+, Debian 12+
Conta de relay Microsoft 365, SendGrid, Mailgun, ou Gmail App Password
Porta 587 outbound (submission) para o relay
DNS Registo SPF + DKIM no domínio

Instalar Postfix:

sudo apt update
sudo apt install postfix libsasl2-modules

Durante a instalação, o Postfix pergunta o tipo de configuração:

Tipo Quando usar
No configuration Personalizar manualmente
Internet Site Receber email directamente (porta 25 aberta)
Internet with smarthost Este artigo — relay através de outro servidor
Satellite system Apenas enviar, não receber
Local only Apenas email interno

Seleccionar Satellite system (apenas enviar via relay). Introduzir o domínio (empresa.pt) e o relay host (smtp.empresa.pt ou [smtp.office365.com]:587).

Se libsasl2-modules não instalar automaticamente, instalar manualmente: sudo apt install libsasl2-modules. Este pacote fornece suporte SASL para autenticação SMTP (Postfix+SASL).

3. Passo 1 — Configurar Postfix com Relay Microsoft 365

Configurar o Postfix para relay através de Microsoft 365 com autenticação:

sudo tee /etc/postfix/main.cf > /dev/null << 'EOF' # Identidade
myhostname = srv01.empresa.pt
mydomain = empresa.pt
myorigin = $mydomain

# Relay
relayhost = [smtp.office365.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_security_level = encrypt

# TLS
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtp_use_tls = yes

# Local
inet_interfaces = loopback-only
mydestination = $myhostname, localhost, localhost.localdomain
mynetworks = 127.0.0.0/8

# Rate limiting
smtp_destination_concurrency_limit = 2
smtp_destination_rate_delay = 1s
EOF

O que cada linha faz:

  • myhostname — hostname do servidor. Aparece no header Received:
  • relayhost — servidor de relay. Os parêntesis rectos [ ] desactivam lookup MX (usar A record directamente)
  • smtp_sasl_auth_enable — ativa autenticação no relay
  • smtp_sasl_password_maps — ficheiro com credenciais do relay
  • smtp_tls_security_level = encrypt — exige TLS. Rejeita conexões sem encriptação
  • inet_interfaces = loopback-only — apenas aceita email local (não de fora). Segurança: não é um open relay
  • mynetworks = 127.0.0.0/8 — apenas localhost pode enviar. Aplicações no servidor usam sendmail ou porta 25 local
  • smtp_destination_rate_delay = 1s — 1 segundo entre envios para o mesmo destino (evita rate limit do relay)

Criar ficheiro de credenciais:

sudo tee /etc/postfix/sasl_passwd > /dev/null << 'EOF' [smtp.office365.com]:587 [email protected]:Password123! EOF sudo postmap /etc/postfix/sasl_passwd sudo chmod 600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db

O que cada comando faz:

  • sasl_passwd — ficheiro com host user:password. O user é a conta Microsoft 365 que vai enviar
  • postmap — converte o ficheiro de texto para formato hash (.db) que o Postfix lê
  • chmod 600 — apenas root pode ler as credenciais

⚠️ Atenção

Se usas MFA na conta Microsoft 365 (deverias), não podes usar a password normal. Criar uma App Password em Microsoft 365 security settings ou usar uma conta de serviço sem MFA.

Reiniciar Postfix:

sudo systemctl restart postfix

4. Passo 2 — TLS e Encriptação

O Postfix já foi configurado com TLS no passo anterior. Para reforçar:

# Adicionar ao final de main.cf
sudo tee -a /etc/postfix/main.cf > /dev/null << 'EOF' # TLS hardening
smtp_tls_loglevel = 1
smtp_tls_note_starttls_offer = yes
smtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_mandatory_ciphers = high
tls_preempt_cipherlist = yes
EOF

O que cada parâmetro faz:

  • smtp_tls_loglevel = 1 — regista negociações TLS (útil para debug)
  • smtp_tls_protocols — desactiva protocolos antigos (SSLv2, SSLv3, TLS 1.0, 1.1). Apenas TLS 1.2+
  • smtp_tls_mandatory_ciphers = high — exige cifras fortes
  • tls_preempt_cipherlist = yes — servidor escolhe a cifra (não o cliente)

Reiniciar:

sudo systemctl restart postfix

5. Passo 3 — SPF, DKIM e DMARC

Mesmo com relay, os emails podem chegar ao spam se o domínio não tiver SPF, DKIM e DMARC configurados.

SPF (Sender Policy Framework)

Adicionar registo TXT no DNS do domínio:

empresa.pt. IN TXT “v=spf1 include:spf.protection.outlook.com -all”

O que cada parte faz:

  • v=spf1 — versão SPF
  • include:spf.protection.outlook.com — autoriza IPs do Microsoft 365 a enviar email
  • -all — falha: rejeitar emails de IPs não autorizados

DKIM (DomainKeys Identified Mail)

No Microsoft 365, DKIM é configurado no admin center:

  1. Microsoft 365 admin center > Security > Policies & rules > Threat policies > Email authentication settings > DKIM
  2. Seleccionar domínio empresa.pt
  3. ativar “Sign messages for this domain with DKIM signatures”
  4. Adicionar os 2 registos CNAME fornecidos no DNS do domínio

Para relay self-hosted (não M365), instalar OpenDKIM:

sudo apt install opendkim opendkim-tools

Gerar chaves:

sudo opendkim-genkey -s mail -d empresa.pt -b 2048
sudo mv mail.private /etc/opendkim/
sudo mv mail.txt /etc/opendkim/

Adicionar a chave pública (mail.txt) como registo TXT no DNS:

mail._domainkey.empresa.pt. IN TXT “v=DKIM1; k=rsa; p=MIGfMA0…”

DMARC (Domain-based Message Authentication)

Adicionar registo TXT DMARC no DNS:

_dmarc.empresa.pt. IN TXT “v=DMARC1; p=quarantine; rua=mailto:[email protected]; pct=100; adkim=s; aspf=s”

O que cada parte faz:

  • p=quarantine — emails que falham SPF/DKIM vão para spam (não rejeitar, para não perder email legítimo durante teste)
  • rua=mailto:[email protected] — relatórios diários enviados para este email
  • pct=100 — aplicar a 100% dos emails
  • adkim=s — alinhamento DKIM estrito
  • aspf=s — alinhamento SPF estrito

⚠️ ℹ️ Nota

Começar com p=none (apenas monitorizar, não agir) durante 1-2 semanas. Analisar os relatórios DMARC. Se não há falsos positivos, mudar para p=quarantine. Só depois de 30 dias sem problemas, considerar p=reject (DMARC docs).

6. Passo 4 — Aliases e Encaminhamento

Para que aplicações enviem email como [email protected] sem serem contas reais:

sudo tee /etc/aliases > /dev/null << 'EOF' root: [email protected] postmaster: [email protected] backup: [email protected] monitoring: [email protected] EOF sudo newaliases

O que cada alias faz:

Aplicar aliases:

sudo newaliases
sudo systemctl reload postfix

7. Passo 5 — Testar Entrega e Debugar

Enviar email de teste:

echo “Teste de relay Postfix – $(date)” | mail -s “Teste Postfix” [email protected]

Se mail não estiver instalado: sudo apt install mailutils.

Verificar logs:

sudo tail -f /var/log/mail.log

Output de sucesso:

postfix/smtp[12345]: ABCDEF: to=, relay=smtp.office365.com[52.58.x.x]:587, delay=2.3, delays=0.1/0.01/1.8/0.4, dsn=2.7.0, status=sent (250 2.7.0 Submission successful)

Se o email não chega, verificar:

  1. Logs do Postfix: grep "status=" /var/log/mail.log | tail -20
  2. Spam folder do destinatário: verificar se está no spam
  3. SPF: dig TXT empresa.pt — confirmar que o registo SPF existe
  4. DKIM: enviar email para [email protected] — responde com relatório de autenticação
  5. Blacklists: verificar em mxtoolbox.com/blacklists

8. Passo 6 — Rate Limiting e Queue Management

Verificar queue de emails pendentes

sudo mailq

Output:

-Queue ID- –Size– —-Arrival Time—- -Sender/Recipient——-
A3B4C5D6 500 Mon Jun 23 14:32:01 [email protected]
[email protected]

Forçar envio da queue

sudo postfix flush

Apagar emails da queue

# Apagar tudo
sudo postsuper -d ALL

# Apagar email específico
sudo postsuper -d A3B4C5D6

⚠️ Atenção

postsuper -d ALL apaga TODOS os emails em queue. Usar apenas quando tens a certeza que nenhum é importante.

Rate limiting para não exceder limits do relay

# Adicionar ao main.cf
sudo tee -a /etc/postfix/main.cf > /dev/null << 'EOF' # Rate limiting Microsoft 365 (30 emails/min)
smtp_destination_concurrency_limit = 5
smtp_destination_rate_delay = 2s
default_destination_rate_delay = 2s
EOF
sudo systemctl reload postfix

O Microsoft 365 tem um limite de ~30 emails por minuto para contas individuais. O rate limiting do Postfix garante que não excedes este limite.

9. Postfix vs Outros MTAs — Comparação

Feature Postfix Exim Sendmail msmtp
Segurança Excelente Boa Histórico de vulnerabilidades N/A (apenas client)
Configuração Simples (main.cf) Complexa Muito complexa Simples
Relay Sim Sim Sim Sim (apenas relay)
Queue management Sim (mailq, postsuper) Sim Sim Não
Performance Alta Alta Média N/A
Default em Ubuntu, Debian Debian (alternative) Legacy
Ideal para Servidores PME Debian tradicional Legacy Apenas enviar de scripts

Recomendação para PME: Postfix para servidores que precisam de relay robusto com queue e rate limiting. msmtp para scripts simples que só precisam de enviar um email occasional (mais leve que Postfix, sem queue).

10. Erros Comuns

Problema Causa Solução
Email vai para spam Sem SPF/DKIM/DMARC Configurar os 3 registos DNS
Authentication required Credenciais erradas ou App Password Verificar sasl_passwd — usar App Password se MFA
Connection timed out Porta 587 bloqueada pelo firewall Verificar telnet smtp.office365.com 587
Relay access denied mynetworks não inclui o cliente Adicionar rede do cliente a mynetworks
Email chega com remetente errado myorigin ou sender_canonical mal configurado Verificar myorigin = $mydomain e aliases
TLS handshake falha CA certificates desactualizados sudo update-ca-certificates
Queue cheia Relay down ou rate limit excedido mailq para ver, postsuper -d para apagar
DKIM fail no destinatário CNAME DKIM não propagou Verificar dig TXT selector._domainkey.empresa.pt

11. Checklist Rápido de Verificação

  • [ ] Postfix instalado e a correr (systemctl status postfix)
  • [ ] main.cf configurado com relay host correcto
  • [ ] sasl_passwd criado, postmap aplicado, permissões 600
  • [ ] TLS ativo (smtp_tls_security_level = encrypt)
  • [ ] SPF registo TXT no DNS (dig TXT empresa.pt)
  • [ ] DKIM ativo (M365 admin center ou OpenDKIM)
  • [ ] DMARC com p=quarantine (começar com p=none)
  • [ ] Aliases configurados (/etc/aliases + newaliases)
  • [ ] Email de teste enviado e recebido (verificar spam folder)
  • [ ] Queue limpa (mailq sem items antigos)
  • [ ] Rate limiting configurado para não exceder limit do relay

Artigos Relacionados

← Voltar ao Índice