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
- Entender Postfix e Relay de Email
- Pré-requisitos e Instalação
- Passo 1 — Configurar Postfix com Relay Microsoft 365
- Passo 2 — TLS e Encriptação
- Passo 3 — SPF, DKIM e DMARC
- Passo 4 — Aliases e Encaminhamento
- Passo 5 — Testar Entrega e Debugar
- Passo 6 — Rate Limiting e Queue Management
- Postfix vs Outros MTAs — Comparação
- Erros Comuns
- 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 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:
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 headerReceived:relayhost— servidor de relay. Os parêntesis rectos[ ]desactivam lookup MX (usar A record directamente)smtp_sasl_auth_enable— ativa autenticação no relaysmtp_sasl_password_maps— ficheiro com credenciais do relaysmtp_tls_security_level = encrypt— exige TLS. Rejeita conexões sem encriptaçãoinet_interfaces = loopback-only— apenas aceita email local (não de fora). Segurança: não é um open relaymynetworks = 127.0.0.0/8— apenas localhost pode enviar. Aplicações no servidor usamsendmailou porta 25 localsmtp_destination_rate_delay = 1s— 1 segundo entre envios para o mesmo destino (evita rate limit do relay)
Criar ficheiro de credenciais:
O que cada comando faz:
sasl_passwd— ficheiro comhost user:password. O user é a conta Microsoft 365 que vai enviarpostmap— 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:
4. Passo 2 — TLS e Encriptação
O Postfix já foi configurado com TLS no passo anterior. Para reforçar:
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 fortestls_preempt_cipherlist = yes— servidor escolhe a cifra (não o cliente)
Reiniciar:
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:
O que cada parte faz:
v=spf1— versão SPFinclude: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:
- Microsoft 365 admin center > Security > Policies & rules > Threat policies > Email authentication settings > DKIM
- Seleccionar domínio
empresa.pt - ativar “Sign messages for this domain with DKIM signatures”
- Adicionar os 2 registos CNAME fornecidos no DNS do domínio
Para relay self-hosted (não M365), instalar OpenDKIM:
Gerar chaves:
sudo mv mail.private /etc/opendkim/
sudo mv mail.txt /etc/opendkim/
Adicionar a chave pública (mail.txt) como registo TXT no DNS:
DMARC (Domain-based Message Authentication)
Adicionar registo TXT DMARC no DNS:
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 emailpct=100— aplicar a 100% dos emailsadkim=s— alinhamento DKIM estritoaspf=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:
O que cada alias faz:
root: [email protected]— emails enviados pararoot@srv01vão para[email protected]backup: [email protected]— scripts de backup enviam parabackup@que encaminha para adminmonitoring: [email protected]— alertas de monitorização vão para a equipa de TI
Aplicar aliases:
sudo systemctl reload postfix
7. Passo 5 — Testar Entrega e Debugar
Enviar email de teste:
Se mail não estiver instalado: sudo apt install mailutils.
Verificar logs:
Output de sucesso:
Se o email não chega, verificar:
- Logs do Postfix:
grep "status=" /var/log/mail.log | tail -20 - Spam folder do destinatário: verificar se está no spam
- SPF:
dig TXT empresa.pt— confirmar que o registo SPF existe - DKIM: enviar email para
[email protected]— responde com relatório de autenticação - Blacklists: verificar em mxtoolbox.com/blacklists
8. Passo 6 — Rate Limiting e Queue Management
Verificar queue de emails pendentes
Output:
A3B4C5D6 500 Mon Jun 23 14:32:01 [email protected]
[email protected]
Forçar envio da queue
Apagar emails da queue
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
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.cfconfigurado com relay host correcto - [ ]
sasl_passwdcriado, 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 comp=none) - [ ] Aliases configurados (
/etc/aliases+newaliases) - [ ] Email de teste enviado e recebido (verificar spam folder)
- [ ] Queue limpa (
mailqsem items antigos) - [ ] Rate limiting configurado para não exceder limit do relay
Artigos Relacionados
- NIS2: Implementação em 90 Dias — Email security como controlo NIS2 (SPF/DKIM/DMARC)
- Linux Server Hardening Checklist 2026 — Hardening do servidor Postfix
- SIEM para PME 2026: Graylog + Sentinel — Enviar logs Postfix para SIEM
- Git para Sysadmins 2026 — Versionar configuração Postfix no Git
- Cloudflare Tunnel Zero Trust 2026 — Exposer Postfix admin via Cloudflare Tunnel