Cerrar la puerta que nadie usaba
Un spike de seguridad de hace algunas semanas encontró algo pequeño pero real: imperfectsystems.com no tenía registro SPF ni DMARC. El dominio no envía correo, la bandeja de entrada real vive en mail.imperfectsystems.com, gestionada por SimpleLogin, que ya estaba configurada correctamente, pero el dominio raíz desnudo estaba completamente abierto. Cualquiera podía falsificar un correo que dijera venir de anything@imperfectsystems.com, y nada impedía que llegara a una bandeja de entrada con apariencia legítima.
La solución para un dominio que nunca envía correo es un registro SPF nulo, v=spf1 -all, que dice, sin ambigüedad, “ningún servidor está autorizado a enviar correo desde este dominio, punto.” Al combinarlo con una política DMARC de p=reject, queda dicho para todo servidor de correo receptor: si algo dice venir de aquí y falla ese chequeo, se descarta.
La parte que tomó más tiempo que los propios registros DNS fue averiguar cómo agregarlos realmente. Ninguno de los tokens de API de Cloudflare que ya estaban en el vault del homelab podía editar DNS, uno estaba limitado a un dominio completamente distinto, otro podía leer zonas pero no escribir registros. Crear un token nuevo requiere el panel de Cloudflare directamente, no existe una vía de API para crear un token de API desde cero. Así que en lugar de dar toda la vuelta de aprovisionar nuevo acceso de infraestructura por lo que equivale a dos entradas DNS, ganó la opción más simple: agregarlas a mano en el panel, lo cual toma unos noventa segundos una vez que se sabe exactamente qué escribir.
Verificado con dig inmediatamente después, ambos registros resolvieron como se esperaba, y luego se comprobó lo único que realmente importaba: que la bandeja de entrada real en el subdominio no se hubiera tocado. No se tocó. Los registros SPF, DMARC y MX están delimitados por nombre de host, no se heredan del dominio superior, así que mail.imperfectsystems.com conservó su propia configuración independiente de SimpleLogin todo el tiempo. Dos registros, un comando para verificar, ningún riesgo para nada que ya estuviera funcionando.
Lecturas relacionadas
Convertir un hash de CSP en una salida del build en vez de mantenerlo a mano
Un botón de lanzamiento del juego se rompió en silencio dos días antes de que alguien lo notara. El arreglo no fue recalcular un hash, fue asegurarse de que nadie tuviera que volver a hacerlo.
Un cambio de token de una línea que encontró un botón roto y un vacío de GDPR
Arreglar un token de analítica de marcador de posición se convirtió en una lección sobre cómo los hashes de CSP se vencen en silencio, y por qué un servidor de desarrollo puede mentir sobre el comportamiento en producción.
El bug detrás del bug
Un widget de GitHub roto, rastreado hasta una demo del proyecto original en pausa, y, encontrado en el camino, una CSP fijada por hash invalidada en silencio por un arreglo de accesibilidad de una sola línea.