{"id":937,"date":"2025-10-28T17:46:43","date_gmt":"2025-10-28T17:46:43","guid":{"rendered":"https:\/\/danielribes.com\/blog\/?p=937"},"modified":"2026-04-06T11:47:42","modified_gmt":"2026-04-06T11:47:42","slug":"spf-cname-y-los-rfc","status":"publish","type":"post","link":"https:\/\/danielribes.com\/blog\/spf-cname-y-los-rfc\/","title":{"rendered":"SPF, CNAME y los RFC"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Hoy me las he visto con un peque\u00f1o l\u00edo de configuraciones de DNS. Cu\u00e1ndo ocurre esto la soluci\u00f3n es recurrir a las fuentes originales y estas son los RFC.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En concreto estos RFC:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc1034\" target=\"_blank\" rel=\"noreferrer noopener\">DOMAIN NAMES &#8211; CONCEPTS AND FACILITIES<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc1035\" target=\"_blank\" rel=\"noreferrer noopener\">DOMAIN NAMES &#8211; IMPLEMENTATION AND SPECIFICATION<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc7208\" target=\"_blank\" rel=\"noreferrer noopener\">Sender Policy Framework (SPF) for Authorizing Use of Domains in Email<\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">El problema es que no se pod\u00eda configurar un registro SPF en los DNS de un dominio porque ya exist\u00eda un registro CNAME con el mismo nombre que se quer\u00eda usar para el SPF.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por ejemplo, se quer\u00eda hacer esto:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>delante.ejemplo.com. CNAME misvps.aws.com.<br>delante.ejemplo.com. TXT \"v=spf1 ip4:203.0.113.50 -all\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Y aunque sean tipos de registros diferentes CNAME vs TXT, esto no es posible tal como se define en el RFC 1034, secci\u00f3n 3.6.2:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u00ab\u2026 If a CNAME RR is present at a node, no other data should be<br>present; this ensures that the data for a canonical name and its aliases cannot be different.\u00bb<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Si tienes ya un CNAME con un <strong>nombre no puedes tener otro registro <\/strong>(del tipo que sea) con el mismo nombre dentro la misma zona DNS.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Al intentar a\u00f1adir el SPF de <em>delante.ejemplo.com. IN TXT \u00abv=spf1 ip4:203.0.113.50 -all\u00bb,<\/em> la aplicaci\u00f3n de gesti\u00f3n de DNS detectaba la existencia previa del CNAME y no dejaba agregar el SPF.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Con esto claro el otro tema era confirmar que obviamente el SPF tiene que usar como nombre el mismo dominio que consta como MAIL FROM en la configuraci\u00f3n de env\u00edo de correo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esto se indica en el <a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc7208#section-3\" target=\"_blank\" rel=\"noreferrer noopener\">RFC 7208, secci\u00f3n 3. SPF Records<\/a><\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u00abAn SPF record is a DNS record that declares which hosts are, and are<br>not, authorized to use a domain name for the &#8216;HELO&#8217; and &#8216;MAIL FROM&#8217; identities.\u00bb<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">As\u00ed que si el MAIL FROM es, por ejemplo: contacto@delante.ejemplo.com<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El SPF se tiene que llamar &#8216;delante.ejemplo.com&#8217;, no hay otra.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Con el problema identificado y confirmado, hay que buscar una soluci\u00f3n, hay varias:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Eliminar el CNAME<\/strong><br>Si se puede prescindir del CNAME y usar la IP, lo m\u00e1s r\u00e1pido es eliminar el registro CNAME y hacer un registro A directo a la IP que necesitamos, quedar\u00eda as\u00ed:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>delante.ejemplo.com. A 180.79.79.0<br>delante.ejemplo.com. TXT \"v=spf1 ip4:203.0.113.50 -all\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Usar ALIAS\/ANAME<\/strong><br>Si los DNS est\u00e1n <strong>configurados en Route 53,<\/strong> el servicio de DNS de AWS, se puede usar ALIAS en vez de CNAME, y esto permite usar otros registros con el mismo nombre:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>delante.ejemplo.com. ALIAS misvps.aws.com.<br>delante.ejemplo.com. TXT \"v=spf1 ip4:203.0.113.50 -all\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Pero con limitaciones, ya Route 53 solo permite usar ALIAS para llamar a recursos en AWS, si es un recurso externo de AWS no funcionara.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Fuente: <a href=\"https:\/\/docs.aws.amazon.com\/Route53\/latest\/DeveloperGuide\/resource-record-sets-choosing-alias-non-alias.html#resource-record-sets-choosing-alias-non-alias-comparison\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/docs.aws.amazon.com\/Route53\/latest\/DeveloperGuide\/resource-record-sets-choosing-alias-non-alias.html#resource-record-sets-choosing-alias-non-alias-comparison<\/a><\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Diferente dominio de MAIL FROM<\/strong><br>Si solo se usa el MAIL FROM como remitente y no se quiere recibir correo se puede a\u00f1adir un subdominio m\u00e1s al MAIL FROM y as\u00ed el SPF ya ser\u00e1 diferente, por ejemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>MAIL FROM contacto@mail.delante.ejemplo.com<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Y el SPF seria:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mail.delante.ejemplo.com. TXT \"v=spf1 ip4:203.0.113.50 -all\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Con esto no har\u00eda falta eliminar el CNAME<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" style=\"font-size:11px\">(*) Nota: Las IPs y dominios usados en este post se usan a modo de ejemplo. Desconozco si existen y a que usos responden.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hoy me las he visto con un peque\u00f1o l\u00edo de configuraciones de DNS. Cu\u00e1ndo ocurre esto la soluci\u00f3n es recurrir a las fuentes originales y estas son los RFC. En concreto estos RFC: El problema es que no se pod\u00eda configurar un registro SPF en los DNS de un dominio porque ya exist\u00eda un registro [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[114],"tags":[100],"class_list":["post-937","post","type-post","status-publish","format-standard","hentry","category-infraestructura","tag-dns"],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":8}},"_links":{"self":[{"href":"https:\/\/danielribes.com\/blog\/wp-json\/wp\/v2\/posts\/937","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/danielribes.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/danielribes.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/danielribes.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/danielribes.com\/blog\/wp-json\/wp\/v2\/comments?post=937"}],"version-history":[{"count":11,"href":"https:\/\/danielribes.com\/blog\/wp-json\/wp\/v2\/posts\/937\/revisions"}],"predecessor-version":[{"id":1037,"href":"https:\/\/danielribes.com\/blog\/wp-json\/wp\/v2\/posts\/937\/revisions\/1037"}],"wp:attachment":[{"href":"https:\/\/danielribes.com\/blog\/wp-json\/wp\/v2\/media?parent=937"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/danielribes.com\/blog\/wp-json\/wp\/v2\/categories?post=937"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/danielribes.com\/blog\/wp-json\/wp\/v2\/tags?post=937"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}