SPF, DMARC e DKIM: o guia completo de autenticação de e-mail
Saiba como SPF, DMARC e DKIM protegem seu domínio contra falsificação. Audite todos os 3 registros em 30 segundos com chamadas de API gratuitas e corrija os 6 erros de configuração mais comuns.
Seu domínio passa em todas as verificações de segurança. Seu certificado SSL é válido, seus cabeçalhos são rígidos, seu O CSP está bloqueado. Em seguida, um e-mail de phishing chega à caixa de entrada de um cliente, do seu domínio, com o nome da sua empresa no campo "De". O e-mail é falso, mas o dano é real.
Isso acontece porque o e-mail foi projetado em 1982 sem verificação de remetente integrada. Qualquer um pode definir qualquer endereço "De" em um e-mail e sem registros SPF, DMARC e DKIM em seu domínio, os servidores receptores não têm como detectar a falsificação. Mais de 90% dos ataques de phishing usam falsificação de domínio e autenticação de e-mail mal configurada são a porta aberta.
Este guia aborda o que cada registro faz, como funcionam juntos e como auditar todos os três em qualquer domínio com um único script usando o API de segurança DNS botoi.
Como funciona a autenticação de e-mail
Três registros DNS funcionam como camadas de defesa. Cada um resolve um problema diferente:
- FPS respostas: "Este servidor tem permissão para enviar e-mail para este domínio?"
- DKIM responde: "Esta mensagem foi alterada depois de sair do servidor do remetente?"
- DMARC responde: "O que devo fazer se o SPF ou DKIM falhar e para onde envio os relatórios?"
Quando alguém envia um e-mail alegando ser de you@example.com, o recebimento
o servidor verifica esses registros em sequência. Se SPF e DKIM falharem e o DMARC disser
p=reject, a mensagem será descartada antes de chegar à caixa de entrada. Sem tudo
terceiro, existem lacunas que os invasores exploram.
SPF: quem pode enviar em seu nome
SPF (Sender Policy Framework) é um registro DNS TXT na raiz do seu domínio. Ele lista cada
Endereço IP e servidor de e-mail autorizado a enviar e-mails para o seu domínio. Quando um servidor receptor
recebe um e-mail de example.com, ele verifica o registro SPF para ver se o envio
servidor está na lista de aprovados.
Verifique o registro SPF de qualquer domínio com uma única chamada de API:
curl -s -X POST https://api.botoi.com/v1/dns-security/spf-check \\
-H "Content-Type: application/json" \\
-d '{"domain": "example.com"}'
Resposta:
{
"success": true,
"data": {
"domain": "example.com",
"has_spf": true,
"record": "v=spf1 include:_spf.google.com ~all",
"mechanisms": ["include:_spf.google.com", "~all"],
"all_policy": "~all",
"includes": ["_spf.google.com"],
"valid": true
}
}
Os principais campos a serem verificados:
-
has_spf: Faz um registro TXT começando comv=spf1existe? Se for falso, qualquer servidor pode falsificar e-mails do seu domínio. -
valid: O registro é analisado sem erros? Os registros SPF quebram silenciosamente quando eles excedem o limite de pesquisa de 10 DNS. -
all_policy: o mecanismo de rastreamento que define o que acontece com remetentes não listados.-all(falha difícil) os rejeita.~all(falha suave) os marca como suspeitos.+allpermite a todos, o que anula todo o propósito.
O limite de 10 pesquisas
Os registros SPF permitem no máximo 10 pesquisas de DNS. Cada include:, a:,
mx:, e redirect: mecanismo conta como uma pesquisa. Inclusões aninhadas
conte também. Depois de adicionar o Google Workspace, sua ferramenta de marketing, seu serviço de e-mail transacional,
e um CRM, você atinge esse limite rapidamente.
Quando você excede 10 pesquisas, todo o registro SPF se torna inválido. As APIs valid
campo captura isso. Corrija-o nivelando inclusões aninhadas em intervalos de IP ou consolidando
fornecedores.
DMARC: o que fazer quando as verificações falham
DMARC (Autenticação, Relatórios e Conformidade de Mensagens Baseadas em Domínio) une SPF e DKIM
juntos. Ele mora em _dmarc.example.com como um registro TXT e informa ao recebimento
servidores duas coisas: o que fazer com mensagens que falham na autenticação e para onde enviar
relatórios sobre essas falhas.
Verifique seu registro DMARC:
curl -s -X POST https://api.botoi.com/v1/dns-security/dmarc-check \\
-H "Content-Type: application/json" \\
-d '{"domain": "example.com"}'
Resposta:
{
"success": true,
"data": {
"domain": "example.com",
"has_dmarc": true,
"record": "v=DMARC1; p=reject; rua=mailto:dmarc@example.com; pct=100",
"policy": "reject",
"subdomain_policy": null,
"reporting": {
"rua": ["mailto:dmarc@example.com"],
"ruf": []
},
"pct": 100,
"alignment": {
"dkim": "r",
"spf": "r"
}
}
}
Políticas DMARC
O policy campo determina o que acontece com mensagens com falha:
-
none: Não tome nenhuma ação. Apenas monitorar. Você recebe relatórios, mas e-mails falsificados ainda chegar às caixas de entrada. -
quarantine: mova mensagens com falha para spam. O destinatário ainda pode encontrá-los se eles olharem. -
reject: Elimine completamente as mensagens com falha. A proteção mais forte, mas configuração incorreta significa perda de e-mail legítimo.
Estratégia segura de implementação do DMARC
Indo direto para p=reject é arriscado. Siga este caminho:
- Comece com
p=none; rua=mailto:dmarc@example.compara coletar relatórios por 2 a 4 semanas - Revise os relatórios. Identifique quaisquer remetentes legítimos que falhem na autenticação. Corrija suas inclusões SPF e chaves DKIM.
- Mover para
p=quarantine; pct=10colocar em quarentena 10% das mensagens com falha - Aumentar
pctpara 25, 50 e depois 100 nas próximas semanas, conforme você confirma que nenhum e-mail legítimo foi afetado - Mudar para
p=reject; pct=100depois de ter confiança em sua configuração
O pct O campo na resposta da API mostra onde você está nesta implementação. Um domínio
em pct=100 com policy=reject tem proteção total.
DKIM: assinaturas criptográficas em todos os e-mails
DKIM (DomainKeys Identified Mail) adiciona uma assinatura criptográfica aos cabeçalhos de cada mensagem de saída. O servidor remetente assina a mensagem com uma chave privada; o servidor receptor verifica-o em relação a uma chave pública publicada em seu DNS. Se a mensagem foi alterada em trânsito (cabeçalhos alterados, corpo modificado, encaminhado através de uma lista de discussão que reescreve o conteúdo), o a assinatura falha.
Registros DKIM ao vivo em [selector]._domainkey.example.com. O seletor é um rótulo
seu provedor de e-mail atribui, como google para o Google Workspace ou selector1
para Microsoft 365.
Verifique um registro DKIM:
curl -s -X POST https://api.botoi.com/v1/dns-security/dkim-check \\
-H "Content-Type: application/json" \\
-d '{"domain": "example.com", "selector": "google"}'
Resposta:
{
"success": true,
"data": {
"domain": "example.com",
"selector": "google",
"has_dkim": true,
"record": "v=DKIM1; k=rsa; p=MIIBIjANBgkq...",
"key_type": "rsa",
"public_key_length": 2048
}
}
Campos principais:
-
has_dkim: Uma chave pública foi publicada para este seletor? Se for falso, DKIM a verificação falha para todas as mensagens assinadas com este seletor. -
public_key_length: o NIST recomenda um mínimo de 2.048 bits. Chaves abaixo de 1024 os bits são fracos o suficiente para serem fatorados. -
key_type: RSA é o padrão. Ed25519 é mais rápido e usa teclas mais curtas, mas tem suporte limitado ao provedor de e-mail.
DKIM e encaminhamento de e-mail
É por isso que o DKIM é importante mesmo quando o SPF está configurado. Quando alguém encaminha seu e-mail, o IP do servidor de encaminhamento não está no seu registro SPF, portanto o SPF falha. Mas a assinatura DKIM sobrevive ao encaminhamento (desde que o conteúdo não seja modificado). DMARC passa se SPF ou DKIM se alinha, então DKIM é sua rede de segurança para mensagens encaminhadas.
Como os três trabalham juntos
| Ameaça | FPS | DKIM | DMARC |
|---|---|---|---|
| E-mail falsificado de servidor não autorizado | Detecta | Detecta (sem assinatura válida) | Aplica a política |
| Corpo da mensagem adulterado em trânsito | Não detecta | Detecta | Aplica a política |
| E-mail encaminhado de remetente legítimo | Falha (IP de servidor diferente) | Passes (assinatura intacta) | Aprovado se o DKIM estiver alinhado |
| Falsificação de subdomínio (user@fake.example.com) | Sem proteção | Sem proteção | Bloqueios via sp=reject |
| Visibilidade em falhas de autenticação | Nenhum | Nenhum | Envia relatórios agregados |
Nenhum registro fornece cobertura completa. SPF sem DMARC significa que as falhas não são aplicadas. DKIM sem SPF significa que qualquer pessoa com uma chave válida pode enviar do seu domínio. DMARC sem ambos SPF e DKIM não têm nada contra o que aplicar.
Audite seu domínio em 30 segundos
Este script de shell verifica todos os três registros e imprime um resumo de aprovação/reprovação. Ele usa o botoi API de segurança DNS; nenhuma chave de API é necessária para até 5 solicitações por minuto.
#!/bin/bash
# Audit SPF, DMARC, and DKIM for a domain in 30 seconds
DOMAIN=\${1:-"example.com"}
DKIM_SELECTOR=\${2:-"google"}
API="https://api.botoi.com/v1/dns-security"
PASS=0
FAIL=0
echo "Auditing email authentication for \$DOMAIN"
echo "==========================================="
# SPF check
SPF=\$(curl -s -X POST "\$API/spf-check" \\
-H "Content-Type: application/json" \\
-d "{\\"domain\\": \\"\$DOMAIN\\"}")
HAS_SPF=\$(echo "\$SPF" | jq -r '.data.has_spf')
SPF_VALID=\$(echo "\$SPF" | jq -r '.data.valid')
SPF_RECORD=\$(echo "\$SPF" | jq -r '.data.record // "not found"')
ALL_POLICY=\$(echo "\$SPF" | jq -r '.data.all_policy // "none"')
if [ "\$HAS_SPF" = "true" ] && [ "\$SPF_VALID" = "true" ]; then
echo "[PASS] SPF: \$SPF_RECORD"
PASS=\$((PASS + 1))
else
echo "[FAIL] SPF: \$SPF_RECORD"
FAIL=\$((FAIL + 1))
fi
if [ "\$ALL_POLICY" = "+all" ]; then
echo " WARNING: +all allows any server to send as your domain"
fi
# DMARC check
DMARC=\$(curl -s -X POST "\$API/dmarc-check" \\
-H "Content-Type: application/json" \\
-d "{\\"domain\\": \\"\$DOMAIN\\"}")
HAS_DMARC=\$(echo "\$DMARC" | jq -r '.data.has_dmarc')
POLICY=\$(echo "\$DMARC" | jq -r '.data.policy // "not set"')
PCT=\$(echo "\$DMARC" | jq -r '.data.pct // 0')
if [ "\$HAS_DMARC" = "true" ]; then
echo "[PASS] DMARC: policy=\$POLICY pct=\$PCT%"
PASS=\$((PASS + 1))
else
echo "[FAIL] DMARC: no record found"
FAIL=\$((FAIL + 1))
fi
if [ "\$POLICY" = "none" ]; then
echo " WARNING: policy=none only monitors, does not enforce"
fi
# DKIM check
DKIM=\$(curl -s -X POST "\$API/dkim-check" \\
-H "Content-Type: application/json" \\
-d "{\\"domain\\": \\"\$DOMAIN\\", \\"selector\\": \\"\$DKIM_SELECTOR\\"}")
HAS_DKIM=\$(echo "\$DKIM" | jq -r '.data.has_dkim')
KEY_TYPE=\$(echo "\$DKIM" | jq -r '.data.key_type // "unknown"')
KEY_LEN=\$(echo "\$DKIM" | jq -r '.data.public_key_length // 0')
if [ "\$HAS_DKIM" = "true" ]; then
echo "[PASS] DKIM: selector=\$DKIM_SELECTOR key_type=\$KEY_TYPE key_length=\$KEY_LEN"
PASS=\$((PASS + 1))
else
echo "[FAIL] DKIM: no record for selector '\$DKIM_SELECTOR'"
FAIL=\$((FAIL + 1))
fi
if [ "\$HAS_DKIM" = "true" ] && [ "\$KEY_LEN" -lt 2048 ] 2>/dev/null; then
echo " WARNING: DKIM key is \$KEY_LEN bits (2048 recommended)"
fi
# Summary
echo ""
echo "Results: \$PASS passed, \$FAIL failed"
[ "\$FAIL" -eq 0 ] && echo "All checks passed." || exit 1
Execute:
bash audit.sh example.com google
O primeiro argumento é o seu domínio; o segundo é o seu seletor DKIM. O script faz 3 API chamadas (dentro do limite do nível gratuito), verifica cada registro, sinaliza avisos para configurações fracas, e sai com um código diferente de zero se alguma verificação falhar. Solte-o em um cron job ou pipeline de CI para monitoramento contínuo.
Se você preferir JavaScript, aqui está a mesma auditoria de uma função assíncrona:
async function auditEmailAuth(domain, dkimSelector = "google") {
const api = "https://api.botoi.com/v1/dns-security";
const headers = { "Content-Type": "application/json" };
const [spf, dmarc, dkim] = await Promise.all([
fetch(\`\${api}/spf-check\`, {
method: "POST",
headers,
body: JSON.stringify({ domain }),
}).then((r) => r.json()),
fetch(\`\${api}/dmarc-check\`, {
method: "POST",
headers,
body: JSON.stringify({ domain }),
}).then((r) => r.json()),
fetch(\`\${api}/dkim-check\`, {
method: "POST",
headers,
body: JSON.stringify({ domain, selector: dkimSelector }),
}).then((r) => r.json()),
]);
return {
domain,
spf: {
exists: spf.data.has_spf,
valid: spf.data.valid,
record: spf.data.record,
allPolicy: spf.data.all_policy,
},
dmarc: {
exists: dmarc.data.has_dmarc,
policy: dmarc.data.policy,
pct: dmarc.data.pct,
reporting: dmarc.data.reporting?.rua || [],
},
dkim: {
exists: dkim.data.has_dkim,
selector: dkimSelector,
keyType: dkim.data.key_type,
keyLength: dkim.data.public_key_length,
},
};
}
// Usage
const report = await auditEmailAuth("example.com", "google");
console.log(JSON.stringify(report, null, 2));
Configurações comuns do provedor
Cada provedor de e-mail tem seu próprio domínio SPF e seletor DKIM. Aqui estão os valores para os provedores mais comuns:
| Provedor | FPS inclui | Seletor(es) DKIM |
|---|---|---|
| Google Workspace | include:_spf.google.com |
google |
| Microsoft 365 | include:spf.protection.outlook.com |
selector1, selector2 |
| Amazon SES | include:amazonses.com |
Baseado em UUID (verifique o console SES) |
| SendGrid | include:sendgrid.net |
s1, s2 |
| Carimbo postal | include:spf.mtasv.net |
Por domínio (verifique as configurações de DNS do carimbo postal) |
| Mailchimp / Mandril | include:servers.mcsv.net |
k1 |
Se você usa vários provedores, seu registro SPF inclui todos eles em uma única entrada TXT.
Por exemplo: v=spf1 include:_spf.google.com include:sendgrid.net ~all. Assistir
o limite de 10 pesquisas à medida que você adiciona provedores.
Pontos-chave
-
FPS controla quais servidores podem enviar e-mails para seu domínio. Verifique com
o
/v1/dns-security/spf-checkponto final. Fique atento ao limite de 10 pesquisas e evitar+all. -
DMARC define o que acontece quando o SPF ou DKIM falha. Distribua gradualmente a partir
p=noneparap=rejectusando opctcampo. Sempre definido umruaendereço para receber relatórios. -
DKIM prova a integridade da mensagem com assinaturas criptográficas. Usar 2048 bits
mínimo de chaves e verifique se seu seletor está publicado com
/v1/dns-security/dkim-check. - Todos os três registros funcionam juntos. O SPF sozinho não impede a falsificação de e-mails encaminhados. DKIM sozinho não informa aos receptores o que fazer em caso de falha. DMARC sem SPF e DKIM não tem nada a impor.
- Automatize suas verificações. Execute o script de auditoria em um agendamento ou em CI para detectar desvios de DNS, provedor migrações e exclusões acidentais de registros antes que afetem a capacidade de entrega.
FAQ
- O que é um registro SPF e por que preciso de um?
- Um registro SPF (Sender Policy Framework) é uma entrada DNS TXT que lista todos os servidores autorizados a enviar e-mails em nome do seu domínio. Sem ele, qualquer servidor na Internet pode enviar e-mails que parecem vir do seu domínio, e os servidores de recebimento de e-mail não têm como saber a diferença. A maioria dos domínios precisa de pelo menos um registro SPF que inclua seu provedor de e-mail.
- Como posso verificar se meu domínio possui um registro DMARC?
- Consulte o registro DNS TXT em _dmarc.seudominio.com. Você pode fazer isso com dig, nslookup ou enviando uma solicitação POST para a API de verificação botoi DMARC com seu nome de domínio. A API retorna o registro completo analisado, incluindo política, porcentagem e endereços de relatórios.
- Preciso do DKIM se já tiver FPS?
- Sim. SPF e DKIM resolvem problemas diferentes. O SPF verifica se o servidor de envio está autorizado; O DKIM verifica se o conteúdo da mensagem não foi alterado em trânsito. O encaminhamento de e-mail quebra o alinhamento do SPF, mas preserva as assinaturas DKIM. O DMARC exige que pelo menos um deles seja aprovado, portanto, ter ambos oferece resiliência quando ocorre o encaminhamento ou a retransmissão.
- O que acontece se eu definir minha política DMARC para rejeição imediata?
- Os servidores de recebimento descartarão todas as mensagens que falharem no alinhamento SPF e DKIM. Se você tiver registros configurados incorretamente, esquecidos remetentes de terceiros ou regras de encaminhamento que você não considerou, os e-mails legítimos serão descartados silenciosamente. Comece com p=none para coletar relatórios, passe para p=quarantine em 10% e defina p=reject somente depois de confirmar que todos os e-mails legítimos passam pela autenticação.
- Com que frequência devo auditar meus registros de autenticação de e-mail?
- No mínimo, verifique após cada alteração de DNS, migração de provedor de e-mail ou ao adicionar um novo serviço de envio (ferramentas de marketing, e-mail transacional, CRM). Uma verificação automatizada semanal detecta quebras silenciosas, como exceder o limite de pesquisa SPF 10 ou uma chave DKIM expirada. Os endpoints da API de segurança DNS botoi facilitam a automatização em CI ou em um cron job.
Comece a construir com botoi
150+ endpoints de API para consultas, processamento de texto, geração de imagens e utilitários para desenvolvedores. Plano gratuito, sem cartão de crédito.