Home Comunidade Eventos YouTube Networks Desafios // produtos Academy News CTI | CVE Contato

07 - TXT (Texto)

video explicativo
Video explicativoEspaco reservado para o video desta anotação — adicione 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.