Ir al contenido
← Blog

SPF y el límite de 255 caracteres: cadenas y división

Por Thomas · CISO virtual · 24 de agosto de 2026

«El registro supera los 255 caracteres.» El mensaje aparece al pegar un SPF algo largo en la interfaz de un proveedor de DNS, y desencadena casi siempre la misma inquietud: la lista de plataformas de envío ya no cabe, ¿hay que sacrificar alguna? La respuesta es no — pero exige entender qué mide realmente el límite. Porque este límite no pertenece a SPF: pertenece al DNS. Y no se aplica al registro entero, sino a cada una de las cadenas de caracteres que lo componen.

El matiz no tiene nada de académico; lo cambia todo. Un registro SPF de 400 caracteres es perfectamente conforme a los estándares, a condición de estar dividido en varias cadenas de 255 bytes como máximo, que el verificador vuelve a pegar en el momento de la lectura. El verdadero problema vive en otra parte: entre lo que las RFC autorizan y lo que los formularios web de los proveedores de DNS aceptan hay un abismo — rechazos en seco, división automática cuando hay suerte y, sobre todo, truncamientos silenciosos que convierten un registro válido en un error permanente.

Este artículo desmonta la mecánica: de dónde viene el límite (el formato binario del DNS), cómo funciona la división en varias cadenas, dónde se rompe en la práctica, por qué el tamaño de las respuestas UDP añade una segunda razón para la concisión, y cómo adelgazar un registro obeso — sin confundir este límite de bytes con el de las diez consultas DNS, que es otra historia completamente distinta.

Un límite del DNS antes que de SPF

La RFC 1035, que fija el formato de los mensajes DNS desde 1987, describe el contenido de un registro TXT como una secuencia de una o varias «character-strings». Cada cadena se codifica en el cable con un prefijo de un solo byte que anuncia su longitud. Un byte solo sabe contar de 0 a 255: ese es el origen exacto, y el único, del famoso límite. No es una decisión de SPF ni un capricho de proveedor — es una restricción del formato de transmisión del protocolo, inmutable desde hace casi cuarenta años.

La consecuencia directa: el límite se aplica por cadena, nunca por registro. Un TXT puede contener varias cadenas puestas una tras otra, y su tamaño total solo está acotado por el del mensaje DNS — en teoría hasta 65 535 bytes de datos, en la práctica mucho menos, como se verá más abajo. La fórmula «SPF está limitado a 255 caracteres», repetida en incontables foros, es por tanto falsa tal cual. La versión exacta cabe en una frase: cada cadena de un registro TXT está limitada a 255 bytes, y un registro SPF puede contener varias.

Un último apunte de vocabulario: el límite se cuenta en bytes, no en «caracteres» en el sentido visual. Para SPF, que solo contiene ASCII, ambos coinciden exactamente; contar bytes sigue siendo el reflejo correcto, porque evita sorpresas en otros usos del TXT.

La división en varias cadenas: sintaxis y reensamblado

En un archivo de zona, la división se escribe yuxtaponiendo cadenas entre comillas:

ejemplo.es.  IN  TXT  ( "v=spf1 ip4:192.0.2.0/28 ip4:198.51.100.0/26 include:_spf.google.com "
                        "include:spf.protection.outlook.com include:sendgrid.net ~all" )

La RFC 7208, que define SPF, precisa en su apartado 3.3 lo que hace el verificador: concatena las cadenas sin añadir espacios. Las dos cadenas de arriba vuelven a ser un único registro lógico, leído como si el corte nunca hubiera existido. El punto de corte puede caer en cualquier sitio, incluso en mitad de un mecanismo: "…include:_spf.goo" "gle.com ~all" sigue siendo válido tras el reensamblado, porque la concatenación se hace byte a byte. La legibilidad aconseja, eso sí, cortar en la frontera de un término.

La trampa clásica se esconde precisamente en ese «sin añadir espacios». El espacio que separa dos mecanismos debe existir dentro de una de las cadenas — al final de la primera o al principio de la segunda. Olvidarlo suelda dos mecanismos en un único token inválido, include:sendgrid.netinclude:spf.mailjet.com, y el registro entero pasa a ser sintácticamente erróneo: permerror en cada evaluación, para todos los flujos del dominio.

Otra confusión que conviene despejar de entrada: varias cadenas dentro de un registro no tienen nada que ver con varios registros TXT que empiecen cada uno por v=spf1. El primer caso está expresamente previsto por el estándar; el segundo es una falta, castigada también con un error permanente, y diseccionada en qué pasa con varios registros SPF.

Dónde se rompe en la práctica: interfaces DNS y copiar-pegar

Ante un valor de más de 255 caracteres, las interfaces de los proveedores de DNS se reparten en tres familias. La primera rechaza en seco: mensaje de error explícito, el valor no se guarda. Molesto pero sano — el fallo es visible y se corrige en un minuto, dividiendo a mano. La segunda familia divide automáticamente: la interfaz acepta el valor largo y lo segmenta en cadenas conformes al generar la zona. Cloudflare procede así, y es el comportamiento ideal: el valor se pega de un bloque y los resolutores reciben un registro correcto.

La tercera familia es la peligrosa: la que trunca o corrompe en silencio. Un campo de formulario con un maxlength invisible amputa el valor pegado en el carácter 255, a menudo en plena mitad de un mecanismo — el registro publicado termina entonces en include:_spf.ejemplo- seguido de nada. Resultado: SPF sintácticamente inválido, permerror sistemático. Bajo DMARC, un permerror de SPF equivale a la ausencia de SPF: toda la autenticación descansa desde ese momento en DKIM, y los flujos que solo llevan SPF — ciertas herramientas de negocio, viejos servidores de aplicaciones — fallan sin más.

El copiar-pegar añade su propia capa de trampas: un salto de línea insertado por un cliente de correo o un procesador de textos, comillas tipográficas sustituidas a las rectas por un corrector automático, una interfaz que espera el valor desnudo y almacena las comillas como caracteres literales. Ninguna de estas corrupciones dispara una alerta en el momento de la introducción; solo se revelan en la verificación externa, una vez propagado el registro — de ahí el reflejo dig detallado más abajo.

El tamaño de las respuestas: UDP, EDNS y robustez

El límite por cadena no es la única razón para vigilar el peso de un SPF. El DNS transporta históricamente sus respuestas por UDP, con un techo de 512 bytes por mensaje heredado de la RFC 1035. La extensión EDNS0 elevó ese techo — la mayoría de los resolutores anuncian hoy 1 232 bytes, el valor recomendado desde el DNS Flag Day de 2020 —, pero el mecanismo de socorro no ha cambiado: una respuesta demasiado grande se marca como truncada (bit TC), y el cliente debe reintentar por TCP. Ahora bien, viejos cortafuegos siguen bloqueando el puerto 53 en TCP, y ciertos equipos intermedios maltratan los paquetes UDP voluminosos. Una respuesta obesa se convierte entonces en una respuesta perdida: el verificador devuelve temperror, y el mensaje legítimo queda diferido, o evaluado sin autenticación.

Un detalle agrava el cálculo: una consulta TXT devuelve todos los registros TXT del nombre, no solo el SPF. Los tokens de verificación acumulados con los años — google-site-verification=…, MS=…, validaciones de herramientas SaaS olvidadas — comparten la misma respuesta e hinchan su tamaño. Un SPF de 300 bytes dentro de una respuesta que ya carga 600 bytes de tokens cruza el umbral mucho antes de lo previsto. La RFC 7208 recomienda explícitamente mantener la respuesta en dimensiones modestas: la robustez aboga por la concisión, incluso cuando la división en cadenas hace la longitud perfectamente «legal».

Adelgazar un registro SPF obeso

Antes de dividir, mejor acortar. Un SPF obeso es casi siempre un SPF sedimentado: años de añadidos, nunca una retirada. La limpieza sigue un orden lógico.

  • Los mecanismos muertos. La plataforma de emailing abandonada hace dos años, el servidor retirado, la agencia cuyo contrato terminó: sus include: y sus ip4: siguen en el registro. Los informes DMARC zanjan la cuestión — una fuente ausente de los informes desde hace meses puede salir.
  • Las redundancias. Un ip4: que designa una dirección ya cubierta por un include:, dos include: del mismo proveedor bajo nombres distintos, un mx cuando los servidores entrantes nunca envían nada: bytes regalados.
  • La agregación CIDR. Cuatro direcciones contiguas listadas una a una (ip4:192.0.2.16 ip4:192.0.2.17 ip4:192.0.2.18 ip4:192.0.2.19) se comprimen en un solo bloque ip4:192.0.2.16/30. En rangos más amplios, el ahorro se cuenta en decenas de bytes.
  • El mecanismo ptr. Desaconsejado por la propia RFC 7208, costoso y poco fiable: su sitio está en los archivos, no en el registro.
  • La delegación por subdominio. La palanca más potente: la newsletter sale de news.ejemplo.es, la facturación de billing.ejemplo.es, cada uno con su propio SPF corto. El dominio principal solo carga con sus flujos propios, y cada registro respira.

Dos técnicas vecinas merecen una remisión más que un tratamiento aquí. El aplanamiento — sustituir los include: por sus direcciones IP resueltas — reduce las consultas DNS pero alarga el registro, exactamente lo contrario del objetivo de esta página; sus promesas y sus trampas se examinan en el aplanamiento SPF y sus riesgos. En cuanto a las macros de la RFC 7208, capaces de compactar radicalmente ciertos casos de uso, tienen su propio artículo: las macros SPF y el mecanismo exists.

255 caracteres y 10 lookups: dos límites que nada une

El límite de los 255 caracteres se confunde con regularidad con el otro techo célebre de SPF: los diez mecanismos que desencadenan una consulta DNS (include, a, mx, ptr, exists, más el modificador redirect). Y sin embargo no comparten nada. El primero es una restricción de codificación del DNS: se mide en bytes y se sortea limpiamente con la división en cadenas. El segundo es una regla del propio SPF: se cuenta en resoluciones DNS y desemboca en un permerror normativo a partir de la undécima consulta.

La confusión nace de que ambos golpean a las mismas víctimas — los registros que crecieron sin vigilancia —, pero los remedios divergen, y a veces chocan frontalmente. El aplanamiento cura los lookups agravando el tamaño; la división en cadenas cura el tamaño sin retirar una sola consulta. Un registro muy corto puede reventar el techo de consultas (tres include: anidados bastan), mientras que un registro de 350 bytes compuesto únicamente de ip4: no consume ni un lookup. Identificar cuál de los dos techos plantea realmente el problema es, pues, el requisito previo a toda corrección — el techo de las diez consultas DNS tiene su propio manual de uso, y conviene leerlo antes de tocar nada.

La verificación: dig, comillas y recuento

La verificación no exige más que dig, presente en cualquier máquina Unix (o nslookup -type=TXT en Windows):

$ dig +short TXT ejemplo.es
"v=spf1 ip4:192.0.2.0/28 include:_spf.google.com " "include:sendgrid.net ~all"
"google-site-verification=kX3v…"

La salida lo dice todo. Cada par de comillas materializa una cadena: dos pares en la línea SPF significan que el registro está dividido y que la división sobrevivió a la interfaz del proveedor. El espacio de unión se controla a simple vista — aquí, al final de la primera cadena. El recuento global cabe en un comando:

$ dig +short TXT ejemplo.es | grep spf1 | wc -c

Lo esencial no es el total, sino el reparto: cada cadena individual debe quedarse por debajo de los 255 bytes, algo que la presencia de varias cadenas entre comillas demuestra de un vistazo. Tres reflejos completan el utillaje: verificar tras la propagación (el TTL del registro antiguo puede enmascarar el cambio durante horas), interrogar a un resolutor público (@1.1.1.1, @9.9.9.9) en lugar de la caché local, y vigilar los informes DMARC en los días siguientes — un permerror por truncamiento se lee allí negro sobre blanco, donde la interfaz DNS jamás mostrará nada.

En resumen

El «límite de los 255 caracteres» de SPF es en realidad una regla del DNS: 255 bytes por cadena de caracteres de un registro TXT, nunca por registro. Un SPF largo sigue siendo conforme si está dividido en varias cadenas que el verificador concatena sin añadir espacios; las roturas reales vienen de las interfaces que truncan en silencio, de los copiar-pegar corrompidos y de las respuestas DNS que se han vuelto demasiado grandes para UDP. El orden correcto de las operaciones: adelgazar primero (mecanismos muertos, redundancias, agregación CIDR, subdominios dedicados), dividir después si aún hace falta, verificar siempre con dig — y no confundir nunca este límite de bytes con el techo de las diez consultas DNS, que obedece a otras leyes y reclama otros remedios.

Para saber en unos segundos si el registro de un dominio roza el límite, está dividido con limpieza o arrastra bytes muertos, un análisis DMARC gratuito muestra el estado de SPF junto a DKIM y la política DMARC, división incluida. Y para seguir en el tiempo lo que los informes cuentan de las fuentes reales del dominio, la creación de una cuenta abre la vigilancia continua — el límite de los 255 bytes, ese, no se moverá.

Guías relacionadas

Sobre el autor

ThomasThomas es el CISO virtual de DMARC.com: un copiloto especializado en la autenticación de correo que acompaña a las organizaciones de p=none hasta p=reject, sin romper su correo. Sus guías se basan en los datos reales del Observatorio DMARC y de los informes RUA analizados por la plataforma.