Pular para o conteúdo
couryo

Guias

Como configurar SPF, DKIM e DMARC (com registro.br e Cloudflare)

O que é SPF, DKIM e DMARC, os registros certos para cada um e o passo a passo no registro.br, na Cloudflare e no hPanel, com os erros mais comuns e como conferir se funcionou.

Atualizado em

Ver em Markdown

SPF, DKIM e DMARC são três registros no DNS do seu domínio. Juntos, eles dizem aos provedores de e-mail quem pode enviar em seu nome e o que fazer com quem finge ser você. Sem eles, o seu e-mail tem muito mais chance de cair no spam ou de ser recusado.

Os três em uma frase cada#

Registro Onde fica O que faz
SPF TXT no domínio (ou subdomínio) do envelope lista os servidores que podem enviar por aquele domínio
DKIM TXT ou CNAME em <seletor>._domainkey.seudominio publica a chave que confere a assinatura de cada mensagem
DMARC TXT em _dmarc.seudominio exige que SPF ou DKIM estejam alinhados com o domínio do From e diz o que fazer quando não estão

Alinhamento é a palavra-chave. O DMARC passa quando pelo menos um destes vale:

  • o DKIM passou e o domínio da assinatura (d=) é o domínio do From ou um subdomínio dele;
  • o SPF passou e o domínio do envelope (o "return path") é o domínio do From ou um subdomínio dele.

SPF#

Um exemplo para quem usa Google Workspace no e-mail da empresa e mais um serviço de envio:

TXT em exemplo.com.br
v=spf1 include:_spf.google.com include:spf.servico-de-envio.com ~all

Regras que evitam dor de cabeça:

  • Um registro SPF por nome. Dois registros v=spf1 no mesmo domínio invalidam os dois. Junte tudo num só.
  • No máximo 10 consultas de DNS. Cada include, a, mx e redirect conta, inclusive os que estão dentro dos includes. Acima de 10, o SPF falha com permerror.
  • Termine com ~all ou -all. Nunca +all: ele autoriza o mundo inteiro.
  • O SPF é conferido no domínio do envelope, não no From. Serviços que usam um subdomínio seu como return path (por exemplo, bounces.exemplo.com.br) levam o SPF para lá e não precisam mexer no SPF do domínio principal.

DKIM#

O serviço que envia gera a chave e diz qual registro criar. Ele pode vir de dois jeitos:

TXT (a chave publicada direto)
servico1._domainkey.exemplo.com.br   TXT   "v=DKIM1; k=rsa; p=MIIBIjANBgkqh..."
CNAME (a chave fica com o serviço, que pode trocá-la sem você mexer)
servico1._domainkey.exemplo.com.br   CNAME   servico1.chaves.servico-de-envio.com
  • O trecho antes de ._domainkey é o seletor. Cada serviço usa o seu; vários podem conviver no mesmo domínio.
  • Prefira chaves de 2048 bits. Chaves longas em TXT às vezes precisam ser quebradas em partes de até 255 caracteres; a maioria dos painéis faz isso sozinha.
  • Confira que o serviço assina com o seu domínio (d=exemplo.com.br), não só com o dele. Sem isso, o DMARC não alinha.

DMARC#

Comece observando:

TXT em _dmarc.exemplo.com.br
v=DMARC1; p=none; rua=mailto:dmarc@exemplo.com.br; adkim=r; aspf=r
Parte Significado
p=none só observar e mandar relatórios; nada é bloqueado
p=quarantine mensagens que falham vão para o spam
p=reject mensagens que falham são recusadas
rua=mailto:... para onde os provedores mandam os relatórios agregados (XML diário)
adkim=r, aspf=r alinhamento relaxado: subdomínios contam como o mesmo domínio
pct=25 opcional: aplica a política a só uma parte das mensagens, para subir aos poucos

Suba de none para quarantine e depois para reject só quando os relatórios mostrarem que todos os serviços que enviam pelo seu domínio (e-mail da empresa, cobrança, CRM, sistema) passam alinhados. Subir cedo demais faz e-mail legítimo sumir.

Passo a passo na Cloudflare#

  1. Entre no painel, escolha o domínio e abra DNS > Records.
  2. Clique em Add record.
  3. Escolha o Type (TXT ou CNAME).
  4. Em Name, escreva só a parte antes do domínio: @ para o domínio principal, _dmarc, servico1._domainkey ou bounces. A Cloudflare completa o resto.
  5. Em Content (ou Target, no CNAME), cole o valor.
  6. Nos CNAMEs de e-mail, deixe o Proxy status em "DNS only" (nuvem cinza). Com a nuvem laranja, o registro passa a responder com os IPs da Cloudflare e o DKIM e o return path quebram.
  7. Salve. Na Cloudflare, a mudança costuma aparecer em poucos minutos.

Passo a passo no registro.br#

Primeiro, descubra quem responde pelo DNS do domínio. No registro.br, abra o domínio e veja os servidores DNS:

  • Se usa os servidores do registro.br, a zona é editada ali: abra o domínio, vá em DNS > Editar zona (ative o modo avançado se o painel pedir) e use Nova entrada para cada registro.
  • Se os servidores são de outro lugar (Cloudflare, hospedagem), editar no registro.br não muda nada: crie os registros no painel desse outro lugar.

Ao criar a entrada no registro.br:

Campo Exemplo
Nome só a parte antes do domínio: _dmarc, servico1._domainkey, bounces (deixe vazio para o domínio principal)
Tipo TXT ou CNAME
Dados o valor do registro

Salve a zona. A propagação pode levar de alguns minutos a algumas horas.

Passo a passo no hPanel (painel de hospedagem)#

  1. Em Domínios, escolha o domínio e abra DNS / Nameservers.
  2. Na lista de registros, confira o que já existe: painéis de hospedagem costumam criar um SPF (e às vezes um DMARC) para o e-mail da própria hospedagem.
  3. Se já existe um SPF, edite e acrescente o include novo, em vez de criar outro registro. O mesmo vale para o DMARC: um só por domínio.
  4. Para cada registro novo, escolha o Tipo, preencha o Nome só com a parte antes do domínio (@ para o principal) e o valor em Aponta para (CNAME) ou Valor TXT (TXT).
  5. Salve e espere a propagação.

Como conferir se funcionou#

No terminal:

Terminal
dig +short TXT exemplo.com.br                    # SPF
dig +short TXT _dmarc.exemplo.com.br             # DMARC
dig +short CNAME servico1._domainkey.exemplo.com.br

No Windows, nslookup -type=TXT _dmarc.exemplo.com.br faz o mesmo. Depois, mande um e-mail para uma conta do Gmail, abra Mostrar original e procure SPF: PASS, DKIM: PASS e DMARC: PASS.

Erros mais comuns#

Erro Como aparece Correção
Dois registros SPF spf=permerror juntar num registro só
Mais de 10 consultas no SPF spf=permerror tirar includes que não usa mais
Nome com o domínio repetido registro em _dmarc.exemplo.com.br.exemplo.com.br escrever só _dmarc no campo de nome
CNAME com proxy na Cloudflare DKIM não encontrado mudar para "DNS only"
Dois registros DMARC DMARC ignorado apagar um
DKIM do serviço, não do seu domínio dkim=pass mas dmarc=fail configurar o domínio próprio de assinatura no serviço
p=reject antes da hora e-mail da cobrança ou do CRM some voltar para p=none, corrigir os serviços e subir de novo

Onde o Couryo entra#

No Couryo, você não mexe no SPF do domínio principal: o envelope usa um subdomínio seu (bounces.), o DKIM é publicado por CNAME (a chave pode ser trocada sem você tocar no DNS) e o DMARC começa em p=none. Com o domínio na Cloudflare, os registros são criados sozinhos. Depois, o agente de entregabilidade lê os relatórios e avisa quando é seguro subir para quarantine e reject, com o registro pronto. Detalhes em Domínios e DNS.

Perguntas frequentes#

Preciso dos três ou basta um?#

Os três. O Gmail e o Yahoo exigem SPF ou DKIM de todo remetente, e SPF, DKIM e DMARC de quem envia mais de 5 mil por dia; a Microsoft exige os três de quem envia em volume. Mesmo abaixo disso, os três juntos são o que mais pesa para chegar na caixa de entrada.

Posso ter mais de um DKIM?#

Pode e é normal: cada serviço usa um seletor diferente (google._domainkey, servico1._domainkey...). O que não pode é mais de um SPF ou mais de um DMARC no mesmo nome.

Quanto tempo o DNS leva para propagar?#

Depende do TTL do registro e do painel. Na Cloudflare costuma ser questão de minutos; em outros painéis, de minutos a algumas horas. Se depois de um dia o registro não aparece no dig, confira se você editou o painel certo (o dos servidores DNS do domínio).

O que coloco no rua do DMARC?#

Um endereço que recebe os relatórios XML diários dos provedores. Como eles são difíceis de ler à mão, o comum é apontar para um serviço que junta e explica os relatórios.

O SPF com ~all ou -all?#

Os dois funcionam. Com DMARC em vigor, a decisão final é do DMARC, então ~all é a escolha mais segura enquanto você ainda não conferiu todos os serviços que enviam pelo domínio.