Configurar SPF, DKIM e DMARC para Evitar que Emails Caiam no Spam

Guia técnico pra configurar SPF, DKIM e DMARC no DNS da sua VPS e parar de cair em spam no Gmail e Outlook. Comandos, exemplos e verificação real.

Emails enviados de uma VPS recém-provisionada caem em spam no Gmail e Outlook por padrão. O motivo raramente é o conteúdo da mensagem — é a falta dos três registros DNS de autenticação que provedores grandes esperam encontrar: SPF, DKIM e DMARC. Sem eles, o servidor de destino trata o email como “anônimo” e aplica a regra mais restritiva da política antispam.

Este guia mostra como configurar os três registros do zero numa VPS Ubuntu 24.04 LTS rodando Postfix, com chave DKIM real gerada via OpenDKIM. O foco é deixar a configuração em produção, validada por ferramentas públicas, e com política DMARC progressiva pra não bloquear emails legítimos durante a transição. Tempo estimado: 30 a 45 minutos contando propagação DNS.

A persona aqui é o sysadmin que já tem Postfix instalado e enviando emails — só que esses emails estão indo pra caixa de spam. Se você está montando o servidor de email do zero, o mesmo procedimento se aplica depois que o Postfix estiver recebendo e enviando.

Pré-requisitos

O que você precisa antes de começar

VPS Ubuntu 24.04 LTS com acesso root via SSH. Postfix instalado e configurado pra enviar emails. Domínio próprio com acesso ao painel de DNS do registrador (Registro.br, Cloudflare, etc). PTR reverso já configurado no IP da VPS apontando pro hostname do servidor. Porta 25 outbound liberada no provedor.

Sistema Ubuntu 24.04 LTS
MTA Postfix 3.8+
Filtro DKIM OpenDKIM 2.11
Porta SMTP 25 (outbound)

Antes de mexer em DNS, confirme que o Postfix está enviando mensagens. Rode echo "teste" | mail -s "teste" [email protected] e verifique o cabeçalho recebido — você vai ver spf=none, dkim=none e dmarc=none no Authentication-Results. É exatamente isso que vamos resolver.

Configurar o registro SPF

SPF (Sender Policy Framework) é o registro mais simples dos três. Ele diz quais servidores estão autorizados a enviar emails em nome do seu domínio. O servidor de destino consulta o registro SPF do envelope-from e compara com o IP que originou a conexão.

01

Identifique o IP público da sua VPS:

curl -s https://api.ipify.org

Anote o valor — você vai usá-lo no registro SPF e na hora de validar.

02

No painel DNS do seu domínio, crie um registro TXT na raiz (@ ou o próprio domínio) com o seguinte conteúdo:

v=spf1 ip4:SEU.IP.AQUI.123 -all

O -all no final é um hard fail: instrui o destinatário a rejeitar emails de qualquer outro IP. Se você usa serviços externos (Mailgun, Google Workspace), use include: antes do -all:

v=spf1 ip4:SEU.IP.AQUI.123 include:_spf.google.com -all
Um SPF por domínio

Se você já tem um registro TXT começando com v=spf1, edite o existente — não crie outro. Múltiplos registros SPF causam PermError e a autenticação falha inteira, mesmo com tudo certo.

03

Aguarde a propagação (geralmente 5-15 minutos) e valide:

dig +short TXT seudominio.com.br | grep spf1

A saída deve retornar exatamente o registro que você criou.

Instalar e configurar OpenDKIM

DKIM (DomainKeys Identified Mail) assina cada email com uma chave privada armazenada no servidor. A chave pública fica num registro DNS — o destinatário usa ela pra verificar a assinatura. Isso protege contra modificação do conteúdo em trânsito e prova que o email saiu mesmo do seu domínio.

04

Instale o OpenDKIM e os utilitários:

sudo apt update
sudo apt install -y opendkim opendkim-tools
05

Crie a estrutura de diretórios e gere a chave de 2048 bits:

sudo mkdir -p /etc/opendkim/keys/seudominio.com.br
cd /etc/opendkim/keys/seudominio.com.br
sudo opendkim-genkey -b 2048 -d seudominio.com.br -s mail
sudo chown -R opendkim:opendkim /etc/opendkim
sudo chmod 600 /etc/opendkim/keys/seudominio.com.br/mail.private

O comando gera dois arquivos: mail.private (chave privada, fica no servidor) e mail.txt (chave pública, vai pro DNS). O seletor mail é arbitrário — qualquer string serve, mas use algo descritivo se você for ter múltiplos seletores no futuro.

06

Edite /etc/opendkim.conf com a configuração mínima funcional:

Domain                  seudominio.com.br
KeyFile                 /etc/opendkim/keys/seudominio.com.br/mail.private
Selector                mail
Socket                  inet:8891@localhost
Mode                    sv
SubDomains              no
AutoRestart             yes
UMask                   002
Syslog                  yes
07

Integre o OpenDKIM ao Postfix editando /etc/postfix/main.cf:

milter_protocol = 6
milter_default_action = accept
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891

Reinicie ambos os serviços:

sudo systemctl restart opendkim
sudo systemctl restart postfix
sudo systemctl enable opendkim
08

Pegue o conteúdo da chave pública pra colocar no DNS:

sudo cat /etc/opendkim/keys/seudominio.com.br/mail.txt

A saída tem o formato mail._domainkey IN TXT ( "v=DKIM1; ..." ). Copie só o conteúdo entre aspas — tudo que começa em v=DKIM1; e segue até o final. Algumas chaves vêm quebradas em duas strings entre parênteses — concatene mentalmente, removendo as aspas internas e quebras de linha.

No painel DNS, crie um registro TXT com:

  • Nome: mail._domainkey
  • Valor: o conteúdo completo da chave (v=DKIM1; k=rsa; p=MIIBIjANBgkqh...)
Provedor DNS truncando o registro

Se o painel reclamar que o valor é grande demais (acima de 255 caracteres), a chave precisa ser dividida em strings quoted concatenadas. A maioria dos provedores modernos aceita colar o valor inteiro e divide automaticamente — Cloudflare, Route53 e Registro.br fazem isso. Se o seu não faz, divida manualmente em pedaços de 200 caracteres entre aspas, separados por espaço.

Publicar a política DMARC

DMARC (Domain-based Message Authentication, Reporting, and Conformance) amarra SPF e DKIM ao nome do domínio visível pro usuário (o From: do cabeçalho) e diz ao destinatário o que fazer quando a autenticação falha. Sem DMARC, SPF e DKIM são meramente informativos — o destinatário escolhe a política sozinho.

09

No DNS, crie um registro TXT no subdomínio _dmarc:

A política p=none é o ponto de partida obrigatório: você recebe relatórios diários por email mas nenhuma ação é tomada. Isso permite identificar fontes legítimas que ainda não estão configuradas antes de subir a política.

10

Depois de 2 a 4 semanas com p=none e os relatórios analisados, suba pra quarentena:

v=DMARC1; p=quarantine; pct=25; rua=mailto:[email protected]; fo=1

O pct=25 aplica a política em apenas 25% dos emails que falharem — útil pra detectar problemas sem impacto total. Após mais 1-2 semanas sem incidentes, suba pra pct=100 e depois pra p=reject.

Não pule direto pra p=reject

Subir de p=none direto pra p=reject antes de verificar os relatórios DMARC frequentemente derruba emails legítimos de sistemas terceiros que assinam em nome do seu domínio (CRM, faturamento, monitoramento). Os relatórios mostram exatamente quais IPs precisam ser autorizados.

Verificar a entrega real

Configuração no DNS não garante que emails chegam na caixa de entrada. A verificação tem que ser feita com mensagens reais entregues a provedores reais.

11

Envie um email teste pra um endereço Gmail e abra a mensagem recebida. Clique em “Mostrar original” no menu do Gmail e procure pela seção Authentication-Results:

Authentication-Results: mx.google.com;
  dkim=pass [email protected]
  spf=pass [email protected]
  dmarc=pass header.from=seudominio.com.br

Os três precisam mostrar pass. Se qualquer um mostrar fail, softfail ou none, volte e revise o registro correspondente.

12

Use a ferramenta mail-tester.com pra uma avaliação completa: envie um email pro endereço gerado pela ferramenta e acesse o relatório. A nota mínima aceitável é 9/10 — abaixo disso há ajustes pendentes.

Resolução de problemas comuns

DKIM passa em testes mas falha no Gmail

Quase sempre é discrepância entre o seletor configurado no OpenDKIM e o publicado no DNS. Confirme com dig +short TXT mail._domainkey.seudominio.com.br — o valor retornado deve bater exatamente com o conteúdo de mail.txt. Outro motivo frequente: a chave foi colada com quebras de linha que o painel DNS não removeu.

SPF retorna PermError

Indica múltiplos registros TXT começando com v=spf1 no mesmo domínio. Liste com dig +short TXT seudominio.com.br e remova duplicados consolidando tudo num registro só.

Emails ainda caem em spam apesar de tudo passar

Verifique a reputação do IP em mxtoolbox.com/blacklists.aspx. IPs novos ou recém-saídos de blacklist precisam de aquecimento — comece com volume baixo (5-10 emails/dia pra contatos engajados) e suba gradualmente ao longo de 4-6 semanas.

Próximos passos

  • Configure relatórios DMARC agregados num parser dedicado (postmark, dmarcian) pra visualizar fontes não autorizadas de forma estruturada
  • Adicione um seletor DKIM secundário rotativo a cada 6 meses pra manter higiene criptográfica
  • Implemente MTA-STS e TLS Reporting pra garantir entrega via TLS estrito em provedores que suportam
  • Configure BIMI depois que p=quarantine ou p=reject estiver estável por 30+ dias — exibe seu logo na caixa de entrada do Gmail e Yahoo

Se você está colocando email transacional em produção, uma VPS Hostini já vem com PTR reverso editável pelo painel e porta 25 liberada por padrão — duas barreiras comuns que VPS de outros provedores deixam fechadas.

Perguntas frequentes

Posso ter mais de um registro SPF para o mesmo domínio?

Não. A RFC 7208 proíbe múltiplos registros TXT começando com v=spf1 no mesmo domínio — provedores tratam como PermError e o SPF inteiro falha. Se você precisa autorizar várias fontes (VPS própria + Mailgun + Google Workspace), una tudo em um único registro com vários mecanismos include.

Qual o tamanho ideal da chave DKIM, 1024 ou 2048 bits?

2048 bits é o padrão atual e o que Gmail e Yahoo exigem desde 2024 pra remetentes que enviam mais de 5 mil emails por dia. Chaves de 1024 ainda funcionam tecnicamente, mas são consideradas fracas. A única limitação prática é que alguns provedores DNS truncam registros TXT acima de 255 caracteres — quase todos hoje aceitam quoted strings concatenadas, então não há motivo pra ficar em 1024.

Quanto tempo demora pra DMARC começar a impactar a entrega?

O registro DNS propaga em minutos a algumas horas, mas o efeito real depende da política. Com p=none você só recebe relatórios — nada muda na entrega. Com p=quarantine ou p=reject, provedores começam a aplicar imediatamente após ler o registro. Recomenda-se rodar p=none por 2 a 4 semanas antes de subir pra quarantine, pra analisar os relatórios e descobrir todas as fontes legítimas que enviam pelo seu domínio.

Preciso de PTR reverso configurado no IP da VPS?

Sim. Gmail, Outlook e a maioria dos antispam corporativos rejeitam ou marcam como spam emails vindos de IPs sem PTR válido, ou com PTR genérico do provedor (tipo 187-45-x-x.cloud.provedor.com). O PTR deve resolver pra um hostname que aponta de volta pro mesmo IP (forward-confirmed reverse DNS). Em VPS da Hostini você configura o PTR pelo painel.

Por que meus emails caem em spam mesmo com SPF, DKIM e DMARC todos passando?

Autenticação não é reputação. Se o IP da VPS é novo ou já foi usado pra spam antes, provedores começam desconfiando independente da configuração DNS. Verifique o IP em mxtoolbox.com/blacklists.aspx, faça aquecimento gradual do volume (poucos emails por dia subindo lentamente) e mantenha taxa de bounce baixa. Conteúdo do email também conta — anexos suspeitos, links encurtados e excesso de imagens prejudicam.

DMARC com p=reject quebra emails encaminhados (forward)?

Pode quebrar quando o servidor que encaminha modifica headers ou o envelope sem reassinar com DKIM. SPF quase sempre falha em forward (o IP do servidor que encaminhou não está autorizado no domínio original). DMARC passa se DKIM passar, então mantenha a chave DKIM forte. Pra listas de discussão que reescrevem o From, configure ARC ou aceite que parte do tráfego será afetada.

Tópicos:
Próximos passos Cloud Ryzen com NVMe e proteção DDoS sempre ativa.Coloque em produção numa VPS Hostini →
Esse tutorial foi útil?
Falar no WhatsApp