Docs / Email Security (ESPM)

SPF (Sender Policy Framework) publica la lista de IPs autorizadas para enviar email por tu dominio. El problema es que la spec impone un límite de 10 DNS lookups por evaluación, y ese límite se agota rápidamente cuando usás más de 3-4 servicios cloud.

Ejemplo de SPF que rompe el límite

Este SPF, típico de una empresa mediana, agota los 10 lookups:

v=spf1 include:_spf.google.com include:spf.hubspot.com include:sendgrid.net include:mailgun.org include:mandrillapp.com include:_spf.salesforce.com include:_spf.zendesk.com ~all

Cada include: cuenta al menos 1 lookup y puede recursivamente resolver a más. Google solo (_spf.google.com) resuelve a 3-4 lookups internos. Al pasar los 10, el receiver devuelve PermError y ninguna IP pasa SPF — aunque estén en la lista.

Cómo detectarlo

En el dashboard, la sección SPF Health te muestra el conteo actual y las cadenas. Si ves un badge rojo con 10+ lookups, tenés un problema activo.

También en línea de comandos:

dig +short TXT tuempresa.com | grep 'v=spf1'
# Contá tantos "include:" como veas + los "a:" y "mx:" recursivos

Solución 1 — Consolidar servicios

Antes de tocar la spec: ¿realmente usás los 7 servicios? Muchos SPF acarrean legado de vendors que ya no se usan. Auditá con Discovery de la plataforma cuáles están efectivamente enviando en los últimos 90 días y remové los muertos.

Solución 2 — Flattening

Cuando no podés consolidar más, el flattening es la respuesta. Consiste en reemplazar los include: por las IPs concretas que resuelven, así:

v=spf1 ip4:209.85.128.0/17 ip4:216.58.192.0/19 ip4:104.192.0.0/18 ... ~all

El resultado es un SPF con 0 lookups (solo IPs literales). El costo: si un vendor cambia sus IPs, tu SPF queda desactualizado.

La plataforma resuelve esto con un flattener automático que regenera el SPF cada vez que uno de los includes cambia. En tu DNS publicás un CNAME al flattener y nosotros lo mantenemos:

tuempresa.com. IN TXT "v=spf1 redirect=_spf.emate.cloud/tk_abc123"

El TXT dinámico detrás del token se actualiza sin que vos toques nada.

Verificación

Después de cualquier cambio, esperá el TTL y ejecutá:

# Debería devolver "Pass" desde una IP autorizada.
dig +short TXT tuempresa.com
# En la plataforma: /email-security/domain/tuempresa.com/spf-health

Escenarios especiales

Sub-dominios con vendors distintos

Si mail.tuempresa.com usa SendGrid pero el root usa Google Workspace, publicá un SPF distinto en cada uno. No hereda — hay que ponerlo explícito en el subdominio.

~all vs -all

  • ~all = softfail. El receiver recibe la señal pero típicamente entrega el correo igual (marca spam).
  • -all = hardfail. El receiver rechaza si SPF falla.

Con DMARC en enforcement (p=quarantine o p=reject), la diferencia se vuelve menor — DMARC toma la decisión final. Usar -all es más seguro por defecto.