DKIM, DMARC e SPF: Autenticação de Email para PME em 2026
Desde fevereiro de 2024, o Google e o Yahoo exigem autenticação de email (SPF, DKIM e DMARC) para qualquer remetente que envie mais de 5000 mensagens por dia. Em 2026, estes requisitos são praticamente obrigatórios para todos — sem estes três registos DNS, o email da sua empresa vai direto para o spam ou é simplesmente rejeitado. Este guia mostra como configurar e diagnosticar os três protocolos, com exemplos práticos para Postfix numa PME.
Neste artigo
- O que são SPF, DKIM e DMARC
- Porque são obrigatórios em 2026
- Configurar SPF (registo TXT)
- Configurar DKIM (chaves 2048-bit e rotação)
- Configurar DMARC (políticas e relatórios)
- Exemplo completo para PME com Postfix
- Ferramentas de diagnóstico
- Erros comuns e soluções
- Checklist final de implementação
O que são SPF, DKIM e DMARC
Os três protocolos trabalham em conjunto para validar que um email vem realmente de quem diz ser. Cada um resolve um problema diferente:
| Protocolo | O que valida | Registo DNS | Analogia |
|---|---|---|---|
| SPF | Quais IPs/servidores podem enviar email pelo domínio | TXT no domínio raiz | Lista de funcionários autorizados a usar a papelaria |
| DKIM | Assinatura criptográfica do conteúdo do email | TXT no selector (ex: default._domainkey) |
Assinatura digital que prova que a mensagem não foi alterada |
| DMARC | O que fazer quando SPF ou DKIM falham | TXT em _dmarc |
Política de segurança que diz “se não tem assinatura, recusar” |
SPF — Sender Policy Framework
O SPF (definido no RFC 7208) é um registo TXT no domínio que lista os endereços IP e servidores autorizados a enviar email em nome desse domínio. Quando um servidor de destino recebe uma mensagem, consulta o registo SPF do domínio do remetente (envelope MAIL FROM) e verifica se o IP de origem está na lista.
DKIM — DomainKeys Identified Mail
O DKIM (definido no RFC 6376) adiciona uma assinatura criptográfica ao cabeçalho do email. O servidor de origem assina a mensagem com uma chave privada e publica a chave pública no DNS. O servidor de destino recupera a chave pública, valida a assinatura e confirma que o conteúdo não foi alterado em trânsito.
DMARC — Domain-based Message Authentication
O DMARC (definido no RFC 7489) é a política que une SPF e DKIM. Define o que o servidor de destino deve fazer quando a autenticação falha: nada (p=none), enviar para quarentena (p=quarantine) ou rejeitar (p=reject). Inclui também relatórios agregados (RUA) e forenses (RUF) enviados por email para análise.
Porque são obrigatórios em 2026
Em fevereiro de 2024, o Google e o Yahoo implementaram requisitos obrigatórios para remetentes em massa (acima de 5000 mensagens/dia). Em 2026, estes requisitos são a norma para praticamente todos os remetentes:
- Configurar SPF e DKIM no domínio
- Configurar DMARC com pelo menos
p=none(recomendadop=quarantineoup=reject) - Não usar domínios de remetente “de” não alinhados com o domínio de envio
- Manter taxa de spam abaixo de 0,3% (Google) ou 0,1% (Yahoo)
- Suportar unsubscrição com um clique (List-Unsubscribe header)
Consulte os requisitos oficiais diretamente nas fontes: Google Workspace — Sender Guidelines e Yahoo — Sender Requirements.
Para uma PME portuguesa, as consequências de não ter estes registos são severas:
- Emails para clientes Gmail/Yahoo vão para spam ou são rejeitados
- Microsoft 365 e Outlook.com também aplicam políticas cada vez mais rigorosas
- Risco de spoofing: atacantes podem enviar email falsos em nome do domínio da empresa
- Não conformidade com NIS2 (Decreto-Lei n.º 125/2025), que exige controlos de autenticação
Configurar SPF (registo TXT)
O SPF é o mais simples de configurar. Adiciona-se um registo TXT no domínio raiz com a lista de IPs/servidores autorizados.
Sintaxe SPF
v=spf1 ip4:203.0.113.10 include:_spf.google.com include:spf.protection.outlook.com -all
Principais mecanismos:
| Mecanismo | Função | Exemplo |
|---|---|---|
ip4 / ip6 |
Autorizar IP específico ou range | ip4:203.0.113.10 |
include |
Incluir SPF de outro domínio | include:_spf.google.com |
a |
Autorizar o IP do registo A do domínio | a ou a:mail.empresa.pt |
mx |
Autorizar os servidores MX do domínio | mx |
~all |
Softfail — marcar como suspeito mas aceitar | Recomendado em fase de teste |
-all |
Hardfail — rejeitar tudo o que não está na lista | Recomendado em produção |
+all ou ?all — permitem que qualquer IP envie email pelo domínio, anulando completamente a proteção SPF. Usar sempre -all em produção ou ~all temporariamente durante testes.Exemplos por cenário
Servidor próprio (Postfix) com IP fixo:
empresa.pt. IN TXT "v=spf1 ip4:203.0.113.10 -all"
Google Workspace:
empresa.pt. IN TXT "v=spf1 include:_spf.google.com ~all"
Microsoft 365:
empresa.pt. IN TXT "v=spf1 include:spf.protection.outlook.com -all"
Misto (servidor próprio + Microsoft 365 + newsletter via Mailchimp):
empresa.pt. IN TXT "v=spf1 ip4:203.0.113.10 include:spf.protection.outlook.com include:servers.mcsv.net -all"
include conta como uma consulta. Se exceder 10, o SPF retorna PermError. Use SPF Survey da dmarcian para verificar o número de lookups.Verificar SPF com dig
dig TXT empresa.pt +short
# Resultado esperado:
"v=spf1 ip4:203.0.113.10 include:spf.protection.outlook.com -all"
Configurar DKIM (chaves 2048-bit e rotação)
O DKIM é mais complexo porque envolve geração de chaves criptográficas. O processo é: gerar par de chaves, publicar a chave pública no DNS e configurar o servidor de email para assinar com a chave privada.
Gerar chaves DKIM com OpenDKIM
# Instalar OpenDKIM (Debian/Ubuntu)
sudo apt install opendkim opendkim-tools
# Gerar chave 2048-bit para o domínio empresa.pt
# Selector: default (pode ser qualquer nome, ex: 202601)
sudo opendkim-genkey -b 2048 -d empresa.pt -s default -D /etc/opendkim/keys/
# Resultado: dois ficheiros
# /etc/opendkim/keys/default.private (chave privada — NÃO publicar)
# /etc/opendkim/keys/default.txt (registo DNS — publicar)
O ficheiro default.txt contém o registo TXT para o DNS:
default._domainkey.empresa.pt. IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..."
chmod 600.Selector e rotação de chaves
O selector é o nome que identifica a chave DKIM no DNS. No exemplo acima, usámos default, mas é recomendado usar nomes com data para facilitar a rotação:
# Selector com data: 202601
sudo opendkim-genkey -b 2048 -d empresa.pt -s 202601 -D /etc/opendkim/keys/
# Registo DNS:
202601._domainkey.empresa.pt. IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..."
A rotação de chaves deve ser feita periodicamente (recomendado a cada 6-12 meses). O processo:
- Gerar nova chave com selector novo (ex:
202607) - Publicar a nova chave pública no DNS
- Configurar o OpenDKIM para usar a nova chave privada
- Reiniciar o OpenDKIM e testar o envio
- Depois de confirmar, remover a chave antiga do DNS (após TTL expirar)
Configurar OpenDKIM no Postfix
Ficheiro /etc/opendkim.conf:
# /etc/opendkim.conf
Domain empresa.pt
KeyFile /etc/opendkim/keys/default.private
Selector default
Socket inet:12301@localhost
LogWhy yes
Syslog yes
SyslogSuccess yes
Canonicalization relaxed/relaxed
Mode sv
AutoRestart yes
AutoRestartRate 10/1h
SignatureAlgorithm rsa-sha256
Integração com Postfix via milter em /etc/postfix/main.cf:
# /etc/postfix/main.cf — adicionar no fim
milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:localhost:12301
non_smtpd_milters = inet:localhost:12301
# Reiniciar serviços
sudo systemctl restart opendkim
sudo systemctl restart postfix
# Verificar que o OpenDKIM está a escutar
ss -tlnp | grep 12301
Verificar DKIM com dig
dig TXT default._domainkey.empresa.pt +short
# Resultado esperado:
"v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..."
Configurar DMARC (políticas e relatórios)
O DMARC é o terceiro pilar e define a política de tratamento quando SPF ou DKIM falham. O registo TXT é publicado em _dmarc.dominio.pt.
Sintaxe DMARC
_dmarc.empresa.pt. IN TXT "v=DMARC1; p=quarantine; rua=mailto:[email protected]; ruf=mailto:[email protected]; pct=100; adkim=s; aspf=s"
Principais tags DMARC:
| Tag | Função | Valores |
|---|---|---|
p |
Política de tratamento | none, quarantine, reject |
rua |
Relatórios agregados (diários) | mailto:endereç[email protected] |
ruf |
Relatórios forenses (por mensagem) | mailto:endereç[email protected] |
pct |
Percentagem de mensagens sujeitas à política | 0-100 (recomendado 100) |
adkim |
Alinhamento DKIM | s (strict) ou r (relaxed) |
aspf |
Alinhamento SPF | s (strict) ou r (relaxed) |
sp |
Política para subdomínios | none, quarantine, reject |
Estratégia de implementação progressiva
Não se deve passar diretamente para p=reject. A abordagem recomendada em três fases:
Fase 1 — Monitorização (1-2 semanas):
_dmarc.empresa.pt. IN TXT "v=DMARC1; p=none; rua=mailto:[email protected]; ruf=mailto:[email protected]; pct=100; adkim=s; aspf=s"
Fase 2 — Quarentena (2-4 semanas):
_dmarc.empresa.pt. IN TXT "v=DMARC1; p=quarantine; rua=mailto:[email protected]; ruf=mailto:[email protected]; pct=100; adkim=s; aspf=s"
Fase 3 — Rejeição (produção):
_dmarc.empresa.pt. IN TXT "v=DMARC1; p=reject; rua=mailto:[email protected]; ruf=mailto:[email protected]; pct=100; adkim=s; aspf=s"
Relatórios RUA e RUF
Os relatórios RUA (Report URI Aggregate) são enviados diariamente em formato XML e contêm estatísticas agregadas: número de mensagens, resultados SPF/DKIM, IPs de origem. Os relatórios RUF (Report URI Forensic) são enviados por mensagem individual que falha a autenticação e incluem cabeçalhos completos (parcialmente redigidos).
Verificar DMARC com dig
dig TXT _dmarc.empresa.pt +short
# Resultado esperado:
"v=DMARC1; p=reject; rua=mailto:[email protected]; ruf=mailto:[email protected]; pct=100; adkim=s; aspf=s"
Exemplo completo para PME com Postfix
Cenário: PME empresa.pt com servidor Postfix em 203.0.113.10, a enviar email diretamente (sem relay externo).
1. Registos DNS
# MX
empresa.pt. IN MX 10 mail.empresa.pt.
mail.empresa.pt. IN A 203.0.113.10
# SPF
empresa.pt. IN TXT "v=spf1 ip4:203.0.113.10 -all"
# DKIM (selector: default)
default._domainkey.empresa.pt. IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..."
# DMARC
_dmarc.empresa.pt. IN TXT "v=DMARC1; p=quarantine; rua=mailto:[email protected]; pct=100; adkim=s; aspf=s"
2. Instalar e configurar OpenDKIM
# Instalar
sudo apt update && sudo apt install opendkim opendkim-tools postfix
# Gerar chave 2048-bit
sudo opendkim-genkey -b 2048 -d empresa.pt -s default -D /etc/opendkim/keys/
# Ajustar permissões
sudo chown -R opendkim:opendkim /etc/opendkim/keys/
sudo chmod 600 /etc/opendkim/keys/default.private
sudo chmod 644 /etc/opendkim/keys/default.txt
# Adicionar utilizador postfix ao grupo opendkim
sudo usermod -aG opendkim postfix
Ficheiro /etc/opendkim.conf:
Domain empresa.pt
KeyFile /etc/opendkim/keys/default.private
Selector default
Socket local:/var/spool/postfix/opendkim/opendkim.sock
LogWhy yes
Syslog yes
SyslogSuccess yes
Canonicalization relaxed/relaxed
Mode sv
AutoRestart yes
AutoRestartRate 10/1h
SignatureAlgorithm rsa-sha256
UserID opendkim
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts
Ficheiro /etc/opendkim/TrustedHosts:
127.0.0.1
::1
localhost
203.0.113.10
mail.empresa.pt
empresa.pt
Criar directoria para o socket e ajustar permissões:
sudo mkdir -p /var/spool/postfix/opendkim
sudo chown opendkim:postfix /var/spool/postfix/opendkim
sudo chmod 750 /var/spool/postfix/opendkim
3. Configurar Postfix
Adicionar ao ficheiro /etc/postfix/main.cf:
# Configurações básicas
myhostname = mail.empresa.pt
mydomain = empresa.pt
myorigin = $mydomain
inet_interfaces = all
inet_protocols = ipv4
# Milter OpenDKIM
milter_default_action = accept
milter_protocol = 6
smtpd_milters = unix:/opendkim/opendkim.sock
non_smtpd_milters = unix:/opendkim/opendkim.sock
4. Reiniciar e testar
# Reiniciar serviços
sudo systemctl restart opendkim postfix
# Verificar estado
sudo systemctl status opendkim
sudo systemctl status postfix
# Enviar email de teste
echo "Teste DKIM" | mail -s "Teste DKIM/SPF/DMARC" [email protected]
# Verificar logs
sudo journalctl -u opendkim -f
sudo tail -f /var/log/mail.log
Ferramentas de diagnóstico
Para além do dig e nslookup (que verificam registos DNS), existem ferramentas online que validam a autenticação de email de ponta a ponta:
| Ferramenta | Função | Custo |
|---|---|---|
| MXToolbox | Verifica SPF, DKIM, DMARC, MX, blacklists | Gratuito (limitado) |
| mail-tester.com | Envia email e recebe score de 10 (spam, auth, conteúdo) | Gratuito (3 testes/dia) |
dig / nslookup |
Consultar registos DNS diretamente | Gratuito (CLI) |
| dmarcian Domain Checker | Avalia DMARC e relatórios | Gratuito |
| Google Admin Toolbox | Diagnóstico de entrega para Gmail | Gratuito |
Comandos de diagnóstico com dig
# Verificar SPF
dig TXT empresa.pt +short
# Verificar DKIM (substituir selector)
dig TXT default._domainkey.empresa.pt +short
# Verificar DMARC
dig TXT _dmarc.empresa.pt +short
# Verificar MX
dig MX empresa.pt +short
# Usar servidor DNS específico (ex: Cloudflare)
dig @1.1.1.1 TXT empresa.pt +short
# Verificar propagação DNS (Google DNS)
dig @8.8.8.8 TXT empresa.pt +short
Diagnosticar cabeçalhos de email recebido
Para verificar se o email enviado está a passar SPF, DKIM e DMARC, enviar uma mensagem para uma caixa Gmail e inspecionar os cabeçalhos:
# No Gmail: Mostrar original (tres pontos > Mostrar original)
# Procurar por:
Authentication-Results: mx.google.com;
dkim=pass [email protected] header.s=default header.b=abc123;
spf=pass (google.com: domain of [email protected] designates 203.0.113.10 as permitted sender) [email protected];
dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=empresa.pt
# Resultados esperados:
# dkim=pass → DKIM validado
# spf=pass → SPF validado
# dmarc=pass → DMARC validado
dkim=fail ou spf=fail: NÃO ignorar. Email que falha autenticação em Gmail/Yahoo vai para spam. Se dmarc=fail com p=reject, a mensagem é simplesmente rejeitada e não chega ao destinatário.
O kbase.pt disponibiliza um Message Header Analyzer gratuito que analisa cabeçalhos de email (RFC 2822) e apresenta de forma clara o percurso da mensagem entre servidores, tempos de entrega, registos SPF/DKIM/DMARC e detecção de atrasos. Basta colar o cabeçalho completo (obtido no Gmail via “Mostrar original” ou no Outlook via “Propriedades da mensagem”) na ferramenta para obter um relatório legível sem necessidade de interpretar o raw manualmente.
Erros comuns e soluções
| Sintoma | Causa provável | Solução |
|---|---|---|
dkim=fail (key mismatch) |
Chave privada no servidor não corresponde à chave pública no DNS | Regenerar par de chaves e republicar. Verificar selector correcto no OpenDKIM e no DNS |
spf=fail (IP missing) |
IP de saída não está no registo SPF | Adicionar ip4:IP_CORRECTO ao registo. Verificar IP real com curl ifconfig.me |
dmarc=fail com SPF e DKIM pass |
Falta de alinhamento: domínio do cabeçalho From difere do envelope MAIL FROM ou do domínio DKIM | Garantir que o domínio no header From corresponde ao domínio assinado por DKIM e ao envelope sender |
| Email legítimo vai para spam | DMARC em p=quarantine ou p=reject antes de validar |
Reverter para p=none, analisar relatórios RUA, identificar fontes legítimas, ajustar SPF/DKIM e depois progredir |
| SPF PermError | Excesso de 10 lookups DNS (includes aninhados) | Reduzir includes. Usar SPF flattening (ex: serviço de macros SPF) ou consolidar fontes de envio |
| Email de formulário web falha SPF | O servidor web envia com MAIL FROM do visitante, não do domínio | Configurar formulário para enviar com MAIL FROM do domínio (ex: [email protected]) ou usar SMTP autenticado |
| DKIM key too small | Chave de 1024-bit (deprecated) | Regenerar com -b 2048 e republicar |
| DNS não propaga | TTL alto ou cache DNS | Reduzir TTL antes de mudanças. Verificar com dig @8.8.8.8 e dig @1.1.1.1 |
Checklist final de implementação
- Inventariar fontes de envio — listar todos os IPs, servidores e serviços terceiros que enviam email pelo domínio (Postfix, Microsoft 365, Google Workspace, Mailchimp, formulários web, alertas de monitorização)
- Configurar SPF — criar registo TXT no domínio raiz com todos os IPs e includes necessários, terminar com
~allinicialmente - Gerar chaves DKIM 2048-bit — usar OpenDKIM para gerar par de chaves com selector descritivo (ex:
202601) - Publicar chave pública DKIM no DNS — registo TXT em
selector._domainkey.dominio.pt - Configurar servidor de email — integrar OpenDKIM com Postfix via milter, reiniciar serviços
- Testar envio — enviar email para mail-tester.com e para uma caixa Gmail, verificar score e cabeçalhos de autenticação
- Configurar DMARC em p=none — publicar registo TXT com
p=nonee endereço RUA para receber relatórios - Analisar relatórios durante 1-2 semanas — identificar fontes legítimas que falham autenticação e corrigir SPF/DKIM
- Mudar SPF para -all — após confirmar que todas as fontes legítimas passam, mudar de
~allpara-all - Progredir DMARC para quarantine — após 100% das fontes legítimas a passar, mudar para
p=quarantine - Progredir DMARC para reject — após 2-4 semanas sem falsos positivos, mudar para
p=reject - Planear rotação de chaves — definir calendário (a cada 6 meses) e documentar procedimento de rotação DKIM
- Configurar monitorização contínua — usar serviço de análise DMARC (dmarcian, Postmark) para receber alertas de spikes de falhas
Artigos Relacionados
- Postfix SMTP: Configurar Relay Email para PME em 2026
- Tudo Sobre Registos DNS: MX, SPF, DKIM, DMARC e Diagnóstico
- nslookup e dig: Diagnóstico e Validação de Registos DNS para Sysadmins
- Phishing Moderno: Como Detectar e Prevenir Ataques em 2026
- Microsoft Defender for Endpoint: Implementação e Configuração para PME
- Erro 550 5.7.515 Access Denied no Outlook.com: Resolver com SPF, DKIM e DMARC