Reach

Grow

Manage

Automate

Reach

Grow

Manage

Automate

S/MIME Parte 3: Conectar y jugar para correo electrónico seguro en las instalaciones

Correo electrónico

1 min read

S/MIME Parte 3: Conectar y jugar para correo electrónico seguro en las instalaciones

Correo electrónico

1 min read

S/MIME Parte 3: Conectar y jugar para correo electrónico seguro en las instalaciones

En esta parte, veremos cómo se puede adaptar la herramienta para inyectar flujos de correo en plataformas locales como PowerMTA y Momentum.

En la parte 1, hicimos un recorrido rápido por S/MIME, observando la firma y el cifrado de nuestros flujos de mensajes a través de una variedad de clientes de correo. La parte 2 nos llevó a través de una herramienta de línea de comandos simple para firmar y cifrar correos electrónicos, luego enviarlos a través de SparkPost.

En esta parte, veremos cómo se puede adaptar la herramienta para inyectar flujos de correo en plataformas locales como Port25 PowerMTA y Momentum.

OK – ¡comencemos!

1. Empezar

Instalar la herramienta, obtener sus claves, etc., es exactamente lo mismo que antes. Cuando estás usando un sistema de correo electrónico local como PowerMTA o Momentum, ya eres responsable de configurar los dominios de envío, las claves DKIM, etc. Lo que necesitamos hacer ahora es proporcionar alguna manera de inyectar los mensajes S/MIME completamente formados en tus servidores.

2. SMTP injection hacia PowerMTA de Port25

PowerMTA admite varios medios de inyección de mensajes, incluyendo un directorio de "recogida" de archivos, SMTP y una API. SMTP es el método utilizado aquí.

Para ilustrar la configuración más simple posible, instalaremos las herramientas S/MIME en el mismo servidor que PowerMTA. Inyectamos mensajes al oyente, que está abierto por defecto en el puerto TCP 25, aceptando solo tráfico local.

export SMTP_HOST=localhost

(Si olvidas ese paso, verás: "Variable de entorno SMTP_HOST no establecida – deteniendo" cuando intentes ejecutar.)

Tenemos la clave privada del remitente (steve@thetucks.com.pem) y la clave pública del destinatario (steve.tuck@sparkpost.com.crt) ya presentes. Las primeras líneas del archivo de mensaje son:

To: SteveT <steve.tuck@sparkpost.com> From: Steve <steve@thetucks.com> Subject: Este es un mensaje creado usando HEML MIME-Version: 1.0 Content-Type: text/html; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit

Enviamos el mensaje con:

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp

Vemos:

Conexión SMTP abierta (simple) a localhost, puerto 25, usuario="", contraseña="" Enviando tests/fancy-HTML-to-smt.eml From: Steve <steve@thetucks.com> To: SteveT <steve.tuck@sparkpost.com> OK - en 0.028 segundos

El mensaje llega rápidamente en la bandeja de entrada e informa en Mac Mail como firmado y encriptado.

Email from Avocado showing a marketing message with security features enabled, displayed in Mac Mail as signed and encrypted.

Función adicional: DKIM con PowerMTA

DKIM es bastante fácil de configurar y convive felizmente con S/MIME. Los pasos son:

  • Usa el sitio DKIM Wizard de PowerMTA para crear la clave privada del dominio de envío (en mi caso, mypmta.thetucks.com.pem) y el contenido de registro DNS TXT público.

  • Configura el registro DNS TXT, con un selector elegido. Por ejemplo, yo usé el selector pmta201811. Los caracteres válidos de selector están definidos aquí.

  • Coloca el archivo mypmta.thetucks.com.pem en el servidor en el directorio /etc/pmta .

  • Agrega lo siguiente a mi /etc/pmta/config y reinicia el servicio pmta. (Aquí, estas directivas están escritas a nivel global; en un sistema de producción, podrías preferir agregarlas bajo un virtual-mta en su lugar.)

host-name thetucks.com domain-key pmta201811,*,/etc/pmta/mypmta.thetucks.com.pem <domain *>    dkim-sign yes </domain>

El registro DNS verifica correctamente a través de MX Toolbox, y DKIM ahora está activo.

MX Toolbox interface showing successful DKIM record verification with all tests passing for email authentication security.

PowerMTA admite varios medios de inyección de mensajes, incluyendo un directorio de "recogida" de archivos, SMTP y una API. SMTP es el método utilizado aquí.

Para ilustrar la configuración más simple posible, instalaremos las herramientas S/MIME en el mismo servidor que PowerMTA. Inyectamos mensajes al oyente, que está abierto por defecto en el puerto TCP 25, aceptando solo tráfico local.

export SMTP_HOST=localhost

(Si olvidas ese paso, verás: "Variable de entorno SMTP_HOST no establecida – deteniendo" cuando intentes ejecutar.)

Tenemos la clave privada del remitente (steve@thetucks.com.pem) y la clave pública del destinatario (steve.tuck@sparkpost.com.crt) ya presentes. Las primeras líneas del archivo de mensaje son:

To: SteveT <steve.tuck@sparkpost.com> From: Steve <steve@thetucks.com> Subject: Este es un mensaje creado usando HEML MIME-Version: 1.0 Content-Type: text/html; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit

Enviamos el mensaje con:

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp

Vemos:

Conexión SMTP abierta (simple) a localhost, puerto 25, usuario="", contraseña="" Enviando tests/fancy-HTML-to-smt.eml From: Steve <steve@thetucks.com> To: SteveT <steve.tuck@sparkpost.com> OK - en 0.028 segundos

El mensaje llega rápidamente en la bandeja de entrada e informa en Mac Mail como firmado y encriptado.

Email from Avocado showing a marketing message with security features enabled, displayed in Mac Mail as signed and encrypted.

Función adicional: DKIM con PowerMTA

DKIM es bastante fácil de configurar y convive felizmente con S/MIME. Los pasos son:

  • Usa el sitio DKIM Wizard de PowerMTA para crear la clave privada del dominio de envío (en mi caso, mypmta.thetucks.com.pem) y el contenido de registro DNS TXT público.

  • Configura el registro DNS TXT, con un selector elegido. Por ejemplo, yo usé el selector pmta201811. Los caracteres válidos de selector están definidos aquí.

  • Coloca el archivo mypmta.thetucks.com.pem en el servidor en el directorio /etc/pmta .

  • Agrega lo siguiente a mi /etc/pmta/config y reinicia el servicio pmta. (Aquí, estas directivas están escritas a nivel global; en un sistema de producción, podrías preferir agregarlas bajo un virtual-mta en su lugar.)

host-name thetucks.com domain-key pmta201811,*,/etc/pmta/mypmta.thetucks.com.pem <domain *>    dkim-sign yes </domain>

El registro DNS verifica correctamente a través de MX Toolbox, y DKIM ahora está activo.

MX Toolbox interface showing successful DKIM record verification with all tests passing for email authentication security.

PowerMTA admite varios medios de inyección de mensajes, incluyendo un directorio de "recogida" de archivos, SMTP y una API. SMTP es el método utilizado aquí.

Para ilustrar la configuración más simple posible, instalaremos las herramientas S/MIME en el mismo servidor que PowerMTA. Inyectamos mensajes al oyente, que está abierto por defecto en el puerto TCP 25, aceptando solo tráfico local.

export SMTP_HOST=localhost

(Si olvidas ese paso, verás: "Variable de entorno SMTP_HOST no establecida – deteniendo" cuando intentes ejecutar.)

Tenemos la clave privada del remitente (steve@thetucks.com.pem) y la clave pública del destinatario (steve.tuck@sparkpost.com.crt) ya presentes. Las primeras líneas del archivo de mensaje son:

To: SteveT <steve.tuck@sparkpost.com> From: Steve <steve@thetucks.com> Subject: Este es un mensaje creado usando HEML MIME-Version: 1.0 Content-Type: text/html; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit

Enviamos el mensaje con:

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp

Vemos:

Conexión SMTP abierta (simple) a localhost, puerto 25, usuario="", contraseña="" Enviando tests/fancy-HTML-to-smt.eml From: Steve <steve@thetucks.com> To: SteveT <steve.tuck@sparkpost.com> OK - en 0.028 segundos

El mensaje llega rápidamente en la bandeja de entrada e informa en Mac Mail como firmado y encriptado.

Email from Avocado showing a marketing message with security features enabled, displayed in Mac Mail as signed and encrypted.

Función adicional: DKIM con PowerMTA

DKIM es bastante fácil de configurar y convive felizmente con S/MIME. Los pasos son:

  • Usa el sitio DKIM Wizard de PowerMTA para crear la clave privada del dominio de envío (en mi caso, mypmta.thetucks.com.pem) y el contenido de registro DNS TXT público.

  • Configura el registro DNS TXT, con un selector elegido. Por ejemplo, yo usé el selector pmta201811. Los caracteres válidos de selector están definidos aquí.

  • Coloca el archivo mypmta.thetucks.com.pem en el servidor en el directorio /etc/pmta .

  • Agrega lo siguiente a mi /etc/pmta/config y reinicia el servicio pmta. (Aquí, estas directivas están escritas a nivel global; en un sistema de producción, podrías preferir agregarlas bajo un virtual-mta en su lugar.)

host-name thetucks.com domain-key pmta201811,*,/etc/pmta/mypmta.thetucks.com.pem <domain *>    dkim-sign yes </domain>

El registro DNS verifica correctamente a través de MX Toolbox, y DKIM ahora está activo.

MX Toolbox interface showing successful DKIM record verification with all tests passing for email authentication security.

3. SMTP Injection hacia Momentum

Momentum admite varios medios de inyección de mensajes, incluyendo API y SMTP. SMTP es el método utilizado aquí, hacia un host que ya está ejecutando Momentum. Dejaremos su configuración sin cambios, ya que ya tiene la capacidad de aceptar inyecciones entrantes de otros hosts aprobados.

Esta es una versión más pequeña de una configuración de producción, donde los nodos de "generation" y los nodos MTA están separados, pero estrechamente acoplados a través de una VLAN privada y equilibradores de carga, llevando tráfico de inyección SMTP interno.


Diagram showing email flow from a generation server to on-premises MTA (Mail Transfer Agent) via SMTP protocol.


Las herramientas S/MIME están instaladas como antes, y inyectaremos mensajes a la dirección del host SMTP (MTA):

export SMTP_HOST=xx.xx.xx.xx # configure su propia dirección MTA / VIP aquí

Como antes, tenemos la clave privada del remitente (steve@thetucks.com.pem) y la clave pública del destinatario (steve.tuck@sparkpost.com.crt) ya presentes en el nodo de "generation". Las primeras líneas del archivo de mensaje coinciden con estas direcciones.

Enviamos el mensaje desde el nodo de "generation" con exactamente el mismo comando que antes, y el mensaje aparece en el inbox.

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp

Como se esperaría, S/MIME también coexiste felizmente con el DKIM signing de Momentum.

4. Inyección SMTP hacia SparkPost

En parte 2 utilizamos la API REST de transmisiones de SparkPost para inyectar mensajes. Por supuesto, también es posible inyectar mensajes en SparkPost usando SMTP. Configuramos las variables de entorno de esta manera:

export SMTP_PASSWORD=<<SU CLAVE API AQUÍ>> export SMTP_HOST=smtp.sparkpostmail.com export SMTP_USER=SMTP_Injection export SMTP_PORT=587

Si está utilizando el servicio alojado en la UE de SparkPost, entonces configure SMTP_HOST como smtp.eu.sparkpostmail.com.
(Véalo aquí para más opciones, por ejemplo, puede inyectar en el puerto 2525 en lugar de 587.)

La salida a continuación muestra que se utiliza STARTTLS, junto con el nombre de usuario y la contraseña.

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp

Verás:

Conexión SMTP abierta (STARTTLS) a smtp.sparkpostmail.com, puerto 587, usuario="SMTP_Injection", contraseña="****************************************" Enviando tests/fancy-HTML-to-smt.eml De: Steve <steve@thetucks.com> Para: SteveT <steve.tuck@sparkpost.com> OK - en 0.057 segundos

La contraseña se muestra con caracteres sustituidos ***, por lo que no está comprometiendo la privacidad de su clave si alguien está mirando por encima de su hombro.

Protegiendo Sus Credenciales

Tenga en cuenta que las variables de entorno podrían configurarse en un archivo de script de shell o similar, para evitar volver a escribirlas. Si lo hace, cuide sus contraseñas/claves API limitando el acceso a ese archivo solo a usted. Por ejemplo, si su archivo de configuración de credenciales se llama my_envs.sh, ejecute:

chmod 0700 my_envs.sh

Advertencias Relacionadas con SMTP que Puede Ver

La inyección SMTP de SparkPost es bastante estricta, como cabría esperar de un servicio público. Si no ha configurado el número de puerto SMTP, verá una advertencia:

{'bob.lumreeker@gmail.com': (550, b'5.7.1 relaying denied')}

Si no ha configurado el nombre de usuario de SMTP o no ha configurado la contraseña, verá:

(530, b'5.7.1 Authorization required. Ref. https://developers.sparkpost.com/api/index#header-smtp-relay-endpoints', 'steve@thetucks.com')

Estos mensajes de error se informan tal cual desde la biblioteca SMTP de Python, de ahí el formato.

¿Cuál es más rápido – SMTP o API?

Francamente, S/MIME es poco probable que sea un caso de uso de alto volumen, pero tener la misma herramienta con dos opciones de salida ¡era como pedirnos correr una carrera!

El archivo de prueba de correo electrónico “Avocado” utilizado aquí tiene aproximadamente 19KB. Repetir las pruebas 10 veces a través de un bucle bash mostró que los tiempos promedio eran similares para SMTP y API, alrededor de 60 milisegundos por mensaje, lo cual es bastante rápido. En este caso, inyectamos desde una instancia mediana de EC2 en la misma región de alojamiento que SparkPost.com, lo cual es una buena manera de mantener bajos los tiempos de ida y vuelta en la red.

Repitiendo esto con un archivo de prueba más grande (577KB), la API tardó aproximadamente 200 milisegundos, mientras que SMTP tardó 280 milisegundos por mensaje, lo cual sigue siendo impresionante para un tamaño de archivo 30 veces mayor. Por supuesto, su experiencia puede variar dependiendo de la ubicación, la congestión de internet, etc., pero es poco probable que el rendimiento sea un problema.

Si realmente necesita el máximo rendimiento, un buen punto de partida sería lanzar un número determinado de procesos/sesiones de inyección concurrentes según nuestras recomendaciones de mejores prácticas de transmisión, por ejemplo, desde una tarea supervisora.

Resumiendo …

Hemos visto cómo la herramienta basada en API de SparkPost utilizada en Parte 2 se actualiza para soportar la inyección SMTP para soportar MTAs locales como Port25 PowerMTA y Momentum en una variedad de configuraciones, así como con SparkPost.

¡Eso es todo por ahora! Feliz envío.

Conectémosle con un experto de Bird.
Vea el poder completo del Bird en 30 minutos.

Al enviar, aceptas que Bird pueda contactarte sobre nuestros productos y servicios.

Puedes darte de baja en cualquier momento. Consulta el Aviso de Privacidad de Bird para obtener detalles sobre el procesamiento de datos.

Company

Newsletter

Mantente al día con Bird a través de actualizaciones semanales en tu buzón.

Al enviar, aceptas que Bird pueda contactarte sobre nuestros productos y servicios.

Puedes darte de baja en cualquier momento. Consulta el Aviso de Privacidad de Bird para obtener detalles sobre el procesamiento de datos.

Conectémosle con un experto de Bird.
Vea el poder completo del Bird en 30 minutos.

Al enviar, aceptas que Bird pueda contactarte sobre nuestros productos y servicios.

Puedes darte de baja en cualquier momento. Consulta el Aviso de Privacidad de Bird para obtener detalles sobre el procesamiento de datos.

Company

Newsletter

Mantente al día con Bird a través de actualizaciones semanales en tu buzón.

Al enviar, aceptas que Bird pueda contactarte sobre nuestros productos y servicios.

Puedes darte de baja en cualquier momento. Consulta el Aviso de Privacidad de Bird para obtener detalles sobre el procesamiento de datos.

Conectémosle con un experto de Bird.
Vea el poder completo del Bird en 30 minutos.

Al enviar, aceptas que Bird pueda contactarte sobre nuestros productos y servicios.

Puedes darte de baja en cualquier momento. Consulta el Aviso de Privacidad de Bird para obtener detalles sobre el procesamiento de datos.

R

Reach

G

Grow

M

Manage

A

Automate

Company

Newsletter

Mantente al día con Bird a través de actualizaciones semanales en tu buzón.

Al enviar, aceptas que Bird pueda contactarte sobre nuestros productos y servicios.

Puedes darte de baja en cualquier momento. Consulta el Aviso de Privacidad de Bird para obtener detalles sobre el procesamiento de datos.