Ir al contenido
Integration

Audite la seguridad del correo electrónico de su dominio en cada envío con GitHub Actions

| 7 min read

Una acción de GitHub que verifica los registros SPF, DMARC y DKIM usando la API de botoi y falla la compilación si falta algún registro o está mal configurado.

GitHub Actions workflow running in a terminal
Photo by Roman Synkevych on Unsplash

Alguien de su equipo actualiza un registro DNS. Una entrada TXT se elimina durante la migración de un proveedor. Su registro SPF excede silenciosamente el límite de 10 búsquedas. Los correos electrónicos comienzan a llegar al spam. nadie avisos durante dos semanas hasta que un cliente menciona que nunca recibió su factura.

Los registros de seguridad de correo electrónico basados en DNS (SPF, DMARC, DKIM) son el tipo de infraestructura que Funciona perfectamente hasta que deja de funcionar. Cuando se estropea, el modo de fallo es silencioso: no hay errores, no hay alertas, los correos electrónicos desaparecen en las carpetas de spam.

Esta guía configura una acción de GitHub que valida los tres registros en cada envío. si Si falta algún registro o está mal configurado, el flujo de trabajo falla y le indica qué se rompió.

Qué hace el flujo de trabajo

En cada empujón hacia main, la acción:

  1. llama al botoi /v1/dns-security/spf-check punto final para validar su registro SPF
  2. llamadas /v1/dns-security/dmarc-check para validar su póliza DMARC
  3. llamadas /v1/dns-security/dkim-check para verificar que su clave DKIM esté publicada
  4. Sale con un código distinto de cero si falla alguna verificación, bloqueando la fusión

El flujo de trabajo de acción de GitHub

Crear .github/workflows/dns-security.yml en tu repositorio:

Reemplazar yourdomain.com con tu dominio y google con el selector DKIM de su proveedor de correo electrónico. El flujo de trabajo se ejecuta en cada impulso para main, en una programación diaria y se puede activar manualmente desde la pestaña Acciones.

Qué valida cada cheque

SPF (marco de políticas del remitente)

SPF declara qué servidores de correo están autorizados a enviar correo electrónico para su dominio. La API devuelve el registro sin formato, una lista analizada de mecanismos y si el registro es válido.

Campos clave a tener en cuenta:

  • has_spf: ¿Hay un registro TXT que comience con v=spf1? Si es falso, cualquier servidor puede pretender enviar correo electrónico desde su dominio.
  • valid: ¿El registro se analiza correctamente? Los registros SPF se rompen cuando exceder el límite de búsqueda de 10 DNS o contener errores de sintaxis.
  • all_policy: El mecanismo de seguimiento. -all (fallo difícil) es la configuración más fuerte. ~all (fallo suave) marca el correo no autorizado como sospechoso. +all anula por completo el propósito del SPF.

Ejemplo de respuesta API para un registro SPF en buen estado:

DMARC (autenticación, informes y conformidad de mensajes basados ​​en dominio)

DMARC indica a los servidores receptores qué hacer cuando fallan las comprobaciones de SPF o DKIM. Sin él, Incluso los registros SPF y DKIM válidos no evitan la suplantación de identidad.

Campos clave a tener en cuenta:

  • policy: ¿Qué sucede con los mensajes fallidos? reject gotas ellos, quarantine los envía a spam, none no toma ninguna medida (sólo seguimiento).
  • pct: el porcentaje de mensajes a los que se aplica la política. Empezar desde abajo número durante el lanzamiento, luego pase a 100.
  • reporting.rua: Donde se envían los informes agregados. Sin esto, tu no tienen visibilidad de los errores de autenticación.

Ejemplo de respuesta API para un registro DMARC:

DKIM (correo identificado con claves de dominio)

DKIM agrega una firma criptográfica a los mensajes salientes. Los servidores receptores verifican la firma contra una clave pública publicada en su DNS. Si la llave falta o está rota sin actualizar DNS, la verificación de firma falla.

Campos clave a tener en cuenta:

  • has_dkim: ¿Se publica una clave DKIM para el selector determinado? Cada correo electrónico El proveedor utiliza un nombre de selector diferente.
  • public_key_length: NIST recomienda un mínimo de 2048 bits. Teclas más cortas de 1024 bits se consideran débiles.
  • key_type: La mayoría de las claves utilizan RSA. Las claves Ed25519 son más pequeñas y más rápidas pero tienen soporte limitado entre proveedores de correo.

Ejemplo de respuesta API para una verificación DKIM:

Selectores DKIM comunes por proveedor

Proveedor de correo electrónico Selectores DKIM
Espacio de trabajo de Google google
microsoft 365 selector1, selector2
Amazon SES Basado en UUID (consulte su panel de SES)
Mailchimp / Mandril k1
EnviarGrid s1, s2
Matasellos Generado por dominio (verifique la configuración de DNS)

Ampliando el flujo de trabajo

Múltiples dominios

Si administra varios dominios, utilice una estrategia matricial para verificar cada uno. Añadir un botoi Clave API como secreto de GitHub para evitar alcanzar el límite de tasa del nivel gratuito.

Notificaciones flojas en caso de falla

Agregue un paso de notificación que se activa cuando falla alguna verificación. Esto utiliza el Acción oficial de Slack GitHub:

Configuración de Monorepo

En un monorepo, probablemente no desee que se ejecuten comprobaciones de DNS en cada envío a cada paquete. Alcance el desencadenante de cambios en archivos relacionados con la infraestructura:

El activador programado aún se ejecuta diariamente independientemente de los filtros de ruta, por lo que detecta DNS cambios realizados fuera del repositorio.

Uso de una clave API para límites de tasas más altos

Si verifica varios dominios o ejecuta el flujo de trabajo con frecuencia, agregue su clave API de botoi como secreto de GitHub Actions:

  1. Vaya a Configuración > de su repositorio. Secretos y variables > Comportamiento
  2. Agregar un secreto llamado BOTOI_API_KEY
  3. Agregue el encabezado de autenticación a cada comando curl:

Qué hacer cuando fallan los controles

  • Falta registro SPF: Agregue un registro TXT al DNS de su dominio. Empezar con v=spf1 include:_spf.google.com ~all (reemplace la inclusión con su dominio SPF del proveedor de correo electrónico).
  • Registro SPF no válido: Probablemente hayas alcanzado el límite de búsqueda de 10 DNS. Utilice un Herramienta aplanadora SPF para reemplazar include: mecanismos con direcciones IP, o consolidar proveedores.
  • Registro DMARC faltante: Agregue un registro TXT en _dmarc.yourdomain.com. Empezar con v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.com monitorear antes de hacer cumplir.
  • La política DMARC es "ninguna": Esto está bien durante la implementación. Una vez que confirmes El correo electrónico legítimo pasa SPF y DKIM, muévase a p=quarantine y luego p=reject.
  • Falta registro DKIM: Verifique que tiene el selector correcto para su proveedor de correo electrónico (consulte la tabla anterior). La clave debe publicarse como un registro TXT en [selector]._domainkey.yourdomain.com.
  • Clave DKIM demasiado corta: Gire su clave DKIM a 2048 bits a través de su panel de administración del proveedor de correo electrónico y luego actualice el registro DNS TXT.

FAQ

¿Necesito una clave API de botoi para este flujo de trabajo?
No. El nivel gratuito permite 5 solicitudes por minuto sin clave API. El flujo de trabajo realiza 3 solicitudes por ejecución (SPF, DMARC, DKIM), lo que se ajusta al límite. Si ejecuta comprobaciones en varios dominios o selectores, agregue su clave API como secreto de GitHub y pásela en el encabezado de Autorización.
¿Puedo verificar varios dominios en una ejecución de flujo de trabajo?
Sí. Recorra una serie de dominios en el script de verificación. Cada dominio requiere 3 llamadas API, por lo que una ejecución de nivel gratuito maneja un dominio por invocación. Para múltiples dominios, agregue una clave API de botoi para evitar la limitación de velocidad.
¿Qué selector DKIM debo utilizar?
El selector depende de su proveedor de correo electrónico. Google Workspace usa "google", Microsoft 365 usa "selector1" y "selector2", Amazon SES usa un selector basado en UUID. Verifique sus registros DNS TXT en busca de entradas que coincidan con el patrón [selector]._domainkey.yourdomain.com.
¿Este flujo de trabajo bloqueará mis implementaciones?
Solo si falla una verificación, lo que significa que faltan los registros de seguridad de su correo electrónico o están mal configurados. Ese es el punto: desea detectar estos problemas antes de que causen problemas de entrega. Puede cambiar el flujo de trabajo para publicar una advertencia en lugar de fallar reemplazando la "salida 1" con un paso que crea un problema de GitHub o envía un mensaje de Slack.
¿Con qué frecuencia debo realizar esta verificación?
En cada empujón hacia tu rama principal está la línea de base. Agregue un activador cron programado (por ejemplo, todos los días a las 9 a. m.) para detectar los cambios de DNS realizados fuera de su repositorio, como cuando un compañero de equipo edita registros en el panel del registrador.

Empieza a construir con botoi

150+ endpoints de API para consultas, procesamiento de texto, generacion de imagenes y utilidades para desarrolladores. Plan gratuito, sin tarjeta de credito.