07 - TXT (Texto)
video: https://youtu.be/... no frontmatter da nota.Registro TXT (Texto)
1. Definição e Finalidade
O registro TXT (Text) é o tipo 16 do DNS, definido originalmente na RFC 1035 (1987). Seu propósito inicial era puramente informativo: armazenar strings de texto arbitrário associadas a um domínio, para comentários, notas administrativas ou metadados legíveis por humanos.
Com o passar das décadas, o registro TXT se transformou no canal genérico de configuração do DNS. Como o DNS é ubíquo, gratuito e não requer infraestrutura adicional, diversos protocolos passaram a publicar configurações via TXT: SPF, DKIM, DMARC, verificação de domínio, ACME DNS-01 challenge, registros de service discovery (e alternativas ao SRV), MTA-STS, BIMI, entre dezenas de outros. Hoje, um único domínio costuma ter 5 a 15 registros TXT.
2. Sintaxe e Formato
Sintaxe Básica em Zone File
nome TTL IN TXT "texto entre aspas"
Strings Múltiplas
Um registro TXT pode conter múltiplas strings entre aspas, que são concatenadas pelo cliente:
_dmarc.exemplo.com. 3600 IN TXT "v=DMARC1; p=reject; rua=mailto:dmarc@exemplo.com; ruf=mailto:"
"forensics@exemplo.com; fo=1; adkim=s; aspf=s; ri=86400; pct=100"
Cada string pode ter até 255 caracteres. Strings maiores que isso precisam ser fragmentadas. A maioria dos softwares resolve a concatenação automaticamente, mas é uma armadilha comum em zone files artesanais.
Limites
- Máximo de 255 bytes por string individual.
- Máximo prático do RDATA: limitado pela resposta DNS inteira (512 bytes sem EDNS0; 4.096 com EDNS0; mais com TCP).
- Um nome pode ter múltiplos registros TXT (RRset); o cliente recebe todos.
3. Usos Modernos Principais
3.1 SPF (Sender Policy Framework)
Define quais servidores de email estão autorizados a enviar mensagens em nome do domínio. Publicado no registro TXT do próprio domínio (sem prefixo). Recebedores consultam SPF antes de aceitar a mensagem.
exemplo.com. 3600 IN TXT "v=spf1 ip4:203.0.113.0/24 ip4:198.51.100.10 -all"
Mecanismos:
- v=spf1 — versão do protocolo (obrigatório como primeiro campo).
- ip4: / ip6: — autoriza IPs ou faixas.
- include: — delega a outro domínio (ex: include:_spf.google.com).
- a / mx — autoriza os IPs dos registros A ou MX do domínio.
- -all (fail hard), ~all (soft fail), +all (permitir tudo — nunca use).
- ?all (neutral).
3.2 DKIM (DomainKeys Identified Mail)
Publica a chave pública usada para validar assinaturas DKIM nas mensagens. O nome do registro é seletor._domainkey.exemplo.com, onde seletor identifica a chave (ex: google, mail, k1).
google._domainkey.exemplo.com. 3600 IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu0RqZ8dFVg2Nh7M3+PqZr8L"
"w/YwFf3pJ2vh8XR2E3q4m8/PHGF1zZ8wJ5pYfM5s5B2tP/QxjQfYf7+KJd+Lg5wB5T..."
Campos:
- v=DKIM1 — versão.
- k=rsa — algoritmo da chave (rsa é o mais comum; ed25519 em adoção).
- p= — chave pública em base64.
- s=email — tipo de serviço (opcional).
- t=s — flags (s = strict, só para DKIM).
3.3 DMARC (Domain-based Message Authentication, Reporting & Conformance)
Publica a política de como o receptor deve tratar mensagens que falham SPF/DKIM, e para onde enviar relatórios.
_dmarc.exemplo.com. 3600 IN TXT "v=DMARC1; p=reject; sp=reject; rua=mailto:dmarc-ag@exemplo.com; ruf=mailto:dmarc-forensics@exemplo.com; fo=1; adkim=s; aspf=s; ri=86400; pct=100"
p=— política para o domínio principal (none,quarantine,reject).sp=— política para subdomínios.rua=— e-mail para receber relatórios agregados (XML diário).ruf=— e-mail para relatórios forenses (mensagens com falha).pct=— percentual de mensagens sujeitas à política (rampa de adoção).adkim=s/aspf=s— modo strict para DKIM/SPF (r= relaxed).
3.4 Verificação de Domínio
Google Workspace, Microsoft 365, AWS, Atlassian e centenas de serviços exigem prova de posse do domínio. Geram um token aleatório que você publica como TXT:
@ 3600 IN TXT "google-site-verification=ABCXyZ1234567890abcdefghijklmnopqrstuvwxyz"
@ 3600 IN TXT "MS=ms12345678"
_amazonses.exemplo.com. 3600 IN TXT "pPM5kZ7Qx..."
3.5 ACME DNS-01 Challenge (Let's Encrypt)
Para emitir certificados TLS, o Let's Encrypt (e qualquer CA compatível com ACME — RFC 8555) usa desafios. O DNS-01 challenge pede que você publique um TXT em _acme-challenge.exemplo.com com o conteúdo calculado a partir do token da ACME e da chave da conta.
_acme-challenge.exemplo.com. 60 IN TXT "kJ1qXqL3V8gPs0QY9aN8gZ6JQy2t8z6pY8wN3s2x7vQ"
Vantagem: permite wildcard *.exemplo.com. Desvantagem: requer automação para publicar/remover o TXT a cada renovação (a cada 60-90 dias).
3.6 MTA-STS
Indica que o domínio suporta MTA-STS (RFC 8461), um mecanismo de policy para forçar TLS em conexões SMTP.
_mta-sts.exemplo.com. 3600 IN TXT "v=STSv1; id=20240101T000000Z"
A policy em si é publicada em https://mta-sts.exemplo.com/.well-known/mta-sts.txt.
3.7 BIMI (Brand Indicators for Message Identification)
Permite que marcas exibam logotipo ao lado de emails no cliente do destinatário. Exige DMARC com p=quarantine ou reject.
default._bimi.exemplo.com. 3600 IN TXT "v=BIMI1; l=https://exemplo.com/logo.svg; a=https://exemplo.com/auth.pem"
4. Inspeção e Diagnóstico
Consultar todos os TXTs de um domínio
dig google.com TXT +short
# "v=spf1 include:_spf.google.com ~all"
# "google-site-verification=..."
dig _dmarc.google.com TXT +short
dig google._domainkey.google.com TXT +short
dig _acme-challenge.exemplo.com TXT +short
Validar SPF
# Instalar pyspf
pip install pyspf dnspython
python -c "import spf; print(spf.check('203.0.113.1','user@exemplo.com','admin@example.org'))"
# Online:
# https://mxtoolbox.com/SPFRecordGenerator.aspx
# https://www.kitterman.com/spf/validate.html
Validar DMARC
# Online, com análise de políticas:
# https://dmarcian.com/dmarc-inspector/
Verificar tamanho da resposta
dig exemplo.com TXT +stats | grep "MSG SIZE"
# Se passar de 512 bytes e cair para TCP, pode indicar RDATA grande demais
dig +nsid exemplo.com TXT
5. Boas Práticas e Armadilhas
Boas Práticas
Publique SPF, DKIM e DMARC mesmo que p=none no início (os relatórios rua= mostram quem está enviando em seu nome). Use DKIM com chaves de 2048 bits, rotacionadas anualmente. Separe seletores DKIM por emissor (google._domainkey, mailgun._domainkey). Automatize ACME DNS-01 com acme.sh, certbot ou cliente ACME nativo de cloud providers, integrado à API do DNS autoritativo. Mantenha TXTs curtos — use include no SPF ao invés de listar 30 IPs.
Armadilhas Comuns
Limite de 10 lookups DNS em SPF: a especificação impõe o limite. Se você tem include: demais, o SPF falha com PermError. Solução: usar serviços de "SPF flattening" ou reduzir includes. Aspas em TXT: BIND exige aspas duplas; ao copiar de uma tela web, pode-se colar acidentalmente caracteres não-ASCII. Concatenação de strings longas: um RUA de DMARC longo precisa ser quebrado em múltiplas strings de 255 caracteres cada. Caracteres especiais: aspas dentro de TXT precisam ser escapadas (\"). Subdomínios: SPF não herda automaticamente — você precisa publicar TXT em cada subdomínio que envia email, ou usar sp= no DMARC.
6. Exemplo Completo de Zone File
$ORIGIN exemplo.com.br.
$TTL 3600
@ 3600 IN TXT "v=spf1 ip4:203.0.113.0/24 include:_spf.google.com -all"
@ 3600 IN TXT "google-site-verification=ABCXyZ..."
_dmarc 3600 IN TXT "v=DMARC1; p=reject; sp=reject; rua=mailto:dmarc@exemplo.com.br; fo=1; adkim=s; aspf=s; pct=100"
google._domainkey 3600 IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..."
_mta-sts 3600 IN TXT "v=STSv1; id=20240101T000000Z"
_acme-challenge 60 IN TXT "kJ1qXqL3V8gPs0QY9aN8gZ6JQy2t8z6pY8wN3s2x7vQ"
7. Conclusão
O registro TXT, originalmente pensado como uma nota livre em zone files, evoluiu para o canal de configuração universal do DNS. Sua flexibilidade permite que novos protocolos sejam implantados sem alterar o formato do DNS nem exigir novos tipos de registro. Para engenheiros de redes e sistemas, dominar TXT é essencial: ele é usado para autenticação de email, segurança de mensagem (DMARC), emissão de certificados TLS (ACME), verificação de propriedade e dezenas de outros propósitos. A regra prática é: se você precisa publicar uma configuração pública associada ao seu domínio, provavelmente será um TXT.