Como configurar SPF, DKIM e DMARC em Postfix para melhorar entrega de e‑mails (passo a passo)

Redes & Segurança · Por · Publicado em · Atualizado em · 8 min de leitura

Envelope marrom com cartões parcialmente visíveis e mão articulada de madeira ao lado
Visual neutro para tutoriais de e‑mail e configuração de servidores Foto: Lisett Kruusimäe / Pexels

Neste guia você verá como configurar SPF, DKIM e DMARC em Postfix para melhorar entrega de e‑mails. Vamos publicar os registros no DNS, assinar mensagens com DKIM via OpenDKIM, alinhar DMARC e validar tudo com testes. Serve para servidores Linux com Postfix já em produção ou recém‑instalados.

O que vamos fazer e pré‑requisitos

Vamos configurar autenticação de e‑mail em três frentes. SPF define quem pode enviar pelo seu domínio. DKIM assina mensagens. DMARC aplica política e gera relatórios.

Pré‑requisitos: acesso root ou sudo, Postfix instalado, domínio com DNS sob seu controle e portas abertas. Se usa firewall, libere 25 e 587. Veja em como configurar firewall no Ubuntu com UFW.

Se está montando o servidor do zero, este guia ajuda a preparar o sistema: Como instalar o Ubuntu Server passo a passo.

Importante: configure um hostname FQDN e o PTR (reverse DNS) no provedor. Sem PTR correto, provedores grandes costumam rejeitar ou pontuar mal seus envios.

  • Acesso ao DNS do domínio
  • Postfix instalado e enviando/recebendo e‑mails
  • Hostname FQDN consistente (ex.: mail.exemplo.com)
  • Portas 25/587 liberadas no firewall
  • Tempo de propagação DNS (pode levar horas)
Registro Tipo Nome/Host Exemplo de valor
SPF TXT @ (raiz do domínio) v=spf1 mx -all
DKIM TXT default._domainkey v=DKIM1; k=rsa; p=CHAVE_PUBLICA
DMARC TXT _dmarc v=DMARC1; p=quarantine; rua=mailto:[email protected]

Verificar domínio, hostname e HELO do Postfix

O domínio no cabeçalho From deve alinhar com o HELO/EHLO do Postfix e com o PTR. Valide e ajuste myhostname e myorigin. Evite HELO genérico ou IP literal.

Cheque também mydomain e o endereço usado para e‑mails gerados localmente.

# Ver seu hostname atual
hostname -f

# Conferir parâmetros relevantes do Postfix
postconf -n | egrep 'myhostname|mydomain|myorigin|smtpd_banner'

# Ajustar hostname (exemplo) — substitua pelo seu FQDN
sudo postconf -e 'myhostname = mail.exemplo.com'
sudo postconf -e 'myorigin = $mydomain'

# Reiniciar o Postfix após ajustes
sudo systemctl restart postfix

SPF: criar e publicar o registro TXT

SPF declara quais hosts podem enviar e‑mails pelo seu domínio. O registro é TXT na raiz do domínio. Comece com política moderada e endureça após testar. Apenas um registro SPF por domínio; múltiplos quebram a validação.

Se também envia por serviços externos, inclua mecanismos adequados com include, ip4 ou ip6.

  • -all bloqueia remetentes fora da lista (estrito)
  • ~all marca como suspeito, mas não bloqueia (relaxado)
  • Use mx para autorizar os MX do domínio
  • Adicione ip4:/ip6: para IPs específicos
  • Evite ultrapassar o limite de 10 consultas DNS
Exemplo Descrição Quando usar
v=spf1 mx -all Somente os MX podem enviar Domínios simples, um servidor
v=spf1 ip4:203.0.113.10 a mx ~all Autoriza IP fixo, A e MX Fase de testes (mais tolerante)
v=spf1 mx include:mailservice.example ~all Inclui serviço de terceiros Envio também por provedores externos
# Exemplo de linha de zona (provedores têm telas próprias para isso)
# Tipo: TXT | Nome/Host: @ | Valor:
"v=spf1 mx -all"

# Após publicar, valide a resolução
dig +short TXT exemplo.com | sed 's/\"/"/g'

DKIM: instalar e integrar OpenDKIM ao Postfix

DKIM assina mensagens com uma chave privada; o destinatário valida com a chave pública no DNS. Usaremos OpenDKIM como milter do Postfix.

Também é hora de garantir TLS no SMTP. Para certificados gratuitos, veja Como gerar SSL grátis com Let's Encrypt.

# Instalar OpenDKIM e ferramentas
sudo apt update && sudo apt install -y opendkim opendkim-tools

# Diretórios e arquivos básicos
sudo mkdir -p /etc/opendkim/keys/exemplo.com

# Configuração principal do OpenDKIM
sudo tee /etc/opendkim.conf >/dev/null <<'CONF'
Syslog                  yes
UMask                   002
UserID                  opendkim:opendkim
Socket                  inet:8891@localhost
Selector                default
Mode                    sv
Canonicalization        relaxed/simple
AutoRestart             yes
OversignHeaders         From
KeyTable                /etc/opendkim/KeyTable
SigningTable            /etc/opendkim/SigningTable
TrustedHosts            /etc/opendkim/TrustedHosts
CONF

# Mapas de assinatura e hosts confiáveis
sudo tee /etc/opendkim/KeyTable >/dev/null <<'CONF'
default._domainkey.exemplo.com exemplo.com:default:/etc/opendkim/keys/exemplo.com/default.private
CONF

sudo tee /etc/opendkim/SigningTable >/dev/null <<'CONF'
*@exemplo.com default._domainkey.exemplo.com
CONF

sudo tee /etc/opendkim/TrustedHosts >/dev/null <<'CONF'
127.0.0.1
::1
localhost
*.exemplo.com
CONF

# Permissões
sudo chown -R opendkim:opendkim /etc/opendkim
sudo chmod -R go-rwx /etc/opendkim/keys

# Habilitar o milter no Postfix
sudo postconf -e 'milter_default_action = accept'
sudo postconf -e 'milter_protocol = 6'
sudo postconf -e 'smtpd_milters = inet:localhost:8891'
sudo postconf -e 'non_smtpd_milters = inet:localhost:8891'

# Ativar serviços
sudo systemctl enable --now opendkim
sudo systemctl restart postfix

DKIM: gerar a chave e publicar no DNS

Gere um par de chaves por domínio e selector. Publique a chave pública no DNS como TXT em default._domainkey.seudominio. Proteja a chave privada com permissões restritas.

Depois de publicar, valide com a ferramenta e só então faça envios reais.

  • Use tamanho de chave 2048 bits
  • Um selector por política/chave (ex.: default, s2026)
  • Rotacione a chave periodicamente
  • Copie apenas o valor p= para o DNS
# Gere a chave (substitua exemplo.com e o selector se desejar)
cd /etc/opendkim/keys/exemplo.com
sudo opendkim-genkey -s default -d exemplo.com -b 2048
sudo chown opendkim:opendkim default.private
sudo chmod 600 default.private

# Exiba a entrada DNS sugerida
cat default.txt

# Reinicie para garantir leitura das chaves
sudo systemctl restart opendkim postfix

DMARC: definir política, alinhamento e relatórios

DMARC instrui destinatários sobre o que fazer quando SPF ou DKIM falham e envia relatórios. Comece com p=none para observar. Evolua depois para quarantine e reject quando tudo estiver alinhado.

Alinhamento exige que o domínio em From coincida com o domínio validado por SPF ou DKIM. Use adkim/aspf=s (strict) quando estiver confiante.

  • p=none apenas monitora (sem impacto na entrega)
  • p=quarantine envia suspeitos ao spam
  • p=reject rejeita mensagens não alinhadas
  • rua/ruf recebem relatórios agregados/forenses
  • pct controla a porcentagem da política aplicada
Política Efeito Uso recomendado
p=none Somente coleta relatórios Fase inicial, validar configuração
p=quarantine Mensagens suspeitas vão para spam Intermediário, após reduzir falsos positivos
p=reject Rejeita mensagens não alinhadas Fase final, quando tudo está correto
# Registro DMARC (TXT) — Nome/Host: _dmarc
# Ajuste emails de relatório para sua caixa dedicada
"v=DMARC1; p=none; rua=mailto:[email protected]; ruf=mailto:[email protected]; fo=1; adkim=s; aspf=s; pct=100"

# Após publicar, confira
dig +short TXT _dmarc.exemplo.com | sed 's/\"/"/g'

Testes: validar SPF, DKIM e DMARC

Valide primeiro os registros DNS. Depois, confira a chave DKIM com a ferramenta e envie um e‑mail de teste para uma caixa externa. Verifique nos cabeçalhos Authentication‑Results, DKIM‑Signature e Received‑SPF.

Se usa TLS no SMTP, confirme o certificado e os conjuntos de cifras negociados.

  • Confirme que existe apenas um registro SPF
  • Checagem DKIM: selector correto e chave pública publicada
  • Alinhamento DMARC: From coincide com domínio validado
  • Envie para provedores diferentes e compare cabeçalhos
# SPF e DMARC
dig +short TXT exemplo.com | sed 's/\"/"/g'
dig +short TXT _dmarc.exemplo.com | sed 's/\"/"/g'

# DKIM: teste do selector (default) — substitua domínio
opendkim-testkey -d exemplo.com -s default -vvv

# Após enviar um e-mail de teste, veja logs locais
sudo journalctl -u postfix -n 100 | egrep 'DKIM|smtpd|policy' || tail -n 100 /var/log/mail.log

Problemas comuns e como resolver

Alguns erros se repetem. Confira esta lista antes de depurar mais a fundo.

Lembre que propagação DNS pode levar horas. Testes imediatos podem falhar por cache.

  • Várias entradas SPF: mantenha só uma; combine mecanismos
  • Selector DKIM errado: confirme default._domainkey.seudominio
  • Permissões da chave privada: 600 e dono opendkim
  • Milter não carregou: cheque smtpd_milters e porta 8891
  • DMARC falha por desalinhamento: From difere do domínio DKIM/SPF
  • Serviço de terceiros enviando sem SPF/DKIM: ajuste include/keys

Perguntas frequentes

Posso ter mais de um registro SPF?

Não. Deve existir apenas um registro TXT de SPF por domínio. Se precisar autorizar vários serviços, combine mecanismos no mesmo valor (mx, a, ip4/ip6, include). Registros SPF múltiplos fazem a validação falhar e prejudicam a entrega.

Qual política DMARC devo usar primeiro?

Comece com p=none para coletar relatórios e ajustar alinhamento. Quando estiver estável, avance para p=quarantine e, por fim, p=reject. Ajuste pct para aplicar gradualmente. Use adkim/aspf=s quando tudo estiver alinhado.

O que é o selector DKIM e como escolher?

O selector identifica qual chave pública usar (ex.: default, s2026). Ele compõe o nome DNS do registro, como default._domainkey.seudominio. Use um selector por chave ativa. Para rotação, crie um novo selector, publique a chave e troque a configuração.

Quanto tempo demora para a configuração funcionar?

A parte local, no Postfix e no OpenDKIM, é imediata após reiniciar serviços. Já o DNS pode levar de minutos a horas para propagar, conforme o TTL e caches. Sempre valide com consultas DNS e, só depois, teste envios para várias caixas.

Preciso de TLS para SPF, DKIM e DMARC funcionarem?

Não é obrigatório para a validação, mas é recomendado para segurança e reputação. Habilite STARTTLS no Postfix com um certificado válido, de preferência automatizado. Isso reduz interceptações e melhora a postura do seu servidor.

Precisa de ajuda para ajustar Postfix e DNS?

Se a autenticação ainda falha ou você quer revisar sua configuração antes de aplicar políticas mais rígidas, fale comigo para uma sessão de suporte pontual.

Falar sobre suporte técnico

Veja também