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 MarkdownSPF, 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 doFromou um subdomínio dele; - o SPF passou e o domínio do envelope (o "return path") é o domínio do
Fromou um subdomínio dele.
SPF#
Um exemplo para quem usa Google Workspace no e-mail da empresa e mais um serviço de envio:
v=spf1 include:_spf.google.com include:spf.servico-de-envio.com ~allRegras que evitam dor de cabeça:
- Um registro SPF por nome. Dois registros
v=spf1no mesmo domínio invalidam os dois. Junte tudo num só. - No máximo 10 consultas de DNS. Cada
include,a,mxeredirectconta, inclusive os que estão dentro dos includes. Acima de 10, o SPF falha compermerror. - Termine com
~allou-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:
servico1._domainkey.exemplo.com.br TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqh..."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:
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#
- Entre no painel, escolha o domínio e abra DNS > Records.
- Clique em Add record.
- Escolha o Type (
TXTouCNAME). - Em Name, escreva só a parte antes do domínio:
@para o domínio principal,_dmarc,servico1._domainkeyoubounces. A Cloudflare completa o resto. - Em Content (ou Target, no CNAME), cole o valor.
- 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.
- 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)#
- Em Domínios, escolha o domínio e abra DNS / Nameservers.
- 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.
- Se já existe um SPF, edite e acrescente o
includenovo, em vez de criar outro registro. O mesmo vale para o DMARC: um só por domínio. - 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). - Salve e espere a propagação.
Como conferir se funcionou#
No terminal:
dig +short TXT exemplo.com.br # SPF
dig +short TXT _dmarc.exemplo.com.br # DMARC
dig +short CNAME servico1._domainkey.exemplo.com.brNo 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.