Product

Solutions

Resources

Company

Product

Solutions

Resources

Company

S/MIME Partie 3 : Plug and Play pour le courrier électronique sécurisé sur site

Oiseau

1 déc. 2019

Email

1 min read

S/MIME Partie 3 : Plug and Play pour le courrier électronique sécurisé sur site

Oiseau

1 déc. 2019

Email

1 min read

S/MIME Partie 3 : Plug and Play pour le courrier électronique sécurisé sur site

Dans cette partie, nous allons examiner comment l'outil peut être adapté pour injecter des flux de courrier dans des plateformes sur site telles que PowerMTA et Momentum.

Dans partie 1, nous avons fait un rapide tour de S/MIME, en examinant la signature et le chiffrement de nos flux de messages à travers une gamme de clients de messagerie. Pour les organisations mettant en œuvre le chiffrement S/MIME, comprendre comment collecter efficacement les clés publiques des destinataires devient crucial pour des opérations de courrier sécurisé évolutives. Partie 2 nous a emmenés à travers un simple outil en ligne de commande pour signer et chiffrer des emails, puis les envoyer via SparkPost.

Dans cette partie, nous verrons comment l'outil peut être adapté pour injecter des flux de courrier dans des plateformes sur site telles que Port25 PowerMTA et Momentum.

OK – commençons!

1. Mise en route

L'installation de l'outil, l'obtention de vos clés, etc. est exactement la même qu'auparavant. Lorsque vous utilisez un système de messagerie sur site tel que PowerMTA ou Momentum, vous êtes déjà responsable de la configuration des domaines d'envoi, des clés DKIM, etc. Les organisations utilisant des systèmes sur site doivent souvent traiter les défis des systèmes d'archivage d'e-mails pour la conformité réglementaire et les exigences de conservation des données. Ce que nous devons faire maintenant, c'est fournir un moyen d'injecter les messages S/MIME entièrement formés dans vos serveurs.

2. Injection SMTP vers Port25 PowerMTA

PowerMTA supporte différents moyens d'injection de messages, y compris un répertoire de « récupération » de fichiers, SMTP et une API. SMTP est la méthode utilisée ici.

Pour illustrer la configuration la plus simple possible, nous allons installer les outils S/MIME sur le même serveur que PowerMTA. Nous injectons des messages à l'auditeur, qui est ouvert par défaut sur le port TCP 25, acceptant uniquement le trafic local.

export SMTP_HOST=localhost

(Si vous oubliez cette étape, vous verrez : « Environment var SMTP_HOST not set – stopping » quand vous essayez d'exécuter.)

Nous avons déjà la clé privée de l'expéditeur (steve@thetucks.com.pem) et la clé publique du destinataire (steve.tuck@sparkpost.com.crt). Les premières lignes du fichier message sont :

À : SteveT <steve.tuck@sparkpost.com> De : Steve <steve@thetucks.com> Sujet : Ceci est un message créé à l'aide de HEML MIME-Version: 1.0 Content-Type: text/html; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit

Nous envoyons le message avec :

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

Nous voyons :

Opened SMTP connection (plain)  
Host: localhost  
Port: 25  
User: ""  
Password: ""  
Sending: tests/fancy-HTML-to-smt.eml  
From: Steve <steve@thetucks.com>  
To: SteveT <steve.tuck@sparkpost.com>  
OK - in 0.028 seconds

Le message arrive rapidement dans la boîte de réception et est signalé dans Mac Mail comme signé et chiffré.

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

Fonctionnalité bonus : DKIM avec PowerMTA

DKIM est assez facile à configurer et coexiste joyeusement avec S/MIME. Les étapes sont :

  • Utilisez le site DKIM Wizard de PowerMTA pour créer la clé privée du domaine d'envoi (dans mon cas, mypmta.thetucks.com.pem) et le contenu de l'enregistrement DNS TXT public.

  • Configurez l'enregistrement DNS TXT, avec un sélecteur choisi. Par exemple, j'ai utilisé le sélecteur pmta201811. Les caractères de sélecteur valides sont définis ici.

  • Mettez le fichier mypmta.thetucks.com.pem sur le serveur dans le répertoire /etc/pmta .

  • Ajoutez ce qui suit à mon /etc/pmta/config et redémarrez le service pmta. (Ici, ces directives sont écrites à l'échelle mondiale ; sur un système de production, vous préférerez peut-être les ajouter sous un virtual-mta à la place.)

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

L'enregistrement DNS est correct via MX Toolbox, et DKIM est maintenant actif.

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

PowerMTA supporte différents moyens d'injection de messages, y compris un répertoire de « récupération » de fichiers, SMTP et une API. SMTP est la méthode utilisée ici.

Pour illustrer la configuration la plus simple possible, nous allons installer les outils S/MIME sur le même serveur que PowerMTA. Nous injectons des messages à l'auditeur, qui est ouvert par défaut sur le port TCP 25, acceptant uniquement le trafic local.

export SMTP_HOST=localhost

(Si vous oubliez cette étape, vous verrez : « Environment var SMTP_HOST not set – stopping » quand vous essayez d'exécuter.)

Nous avons déjà la clé privée de l'expéditeur (steve@thetucks.com.pem) et la clé publique du destinataire (steve.tuck@sparkpost.com.crt). Les premières lignes du fichier message sont :

À : SteveT <steve.tuck@sparkpost.com> De : Steve <steve@thetucks.com> Sujet : Ceci est un message créé à l'aide de HEML MIME-Version: 1.0 Content-Type: text/html; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit

Nous envoyons le message avec :

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

Nous voyons :

Opened SMTP connection (plain)  
Host: localhost  
Port: 25  
User: ""  
Password: ""  
Sending: tests/fancy-HTML-to-smt.eml  
From: Steve <steve@thetucks.com>  
To: SteveT <steve.tuck@sparkpost.com>  
OK - in 0.028 seconds

Le message arrive rapidement dans la boîte de réception et est signalé dans Mac Mail comme signé et chiffré.

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

Fonctionnalité bonus : DKIM avec PowerMTA

DKIM est assez facile à configurer et coexiste joyeusement avec S/MIME. Les étapes sont :

  • Utilisez le site DKIM Wizard de PowerMTA pour créer la clé privée du domaine d'envoi (dans mon cas, mypmta.thetucks.com.pem) et le contenu de l'enregistrement DNS TXT public.

  • Configurez l'enregistrement DNS TXT, avec un sélecteur choisi. Par exemple, j'ai utilisé le sélecteur pmta201811. Les caractères de sélecteur valides sont définis ici.

  • Mettez le fichier mypmta.thetucks.com.pem sur le serveur dans le répertoire /etc/pmta .

  • Ajoutez ce qui suit à mon /etc/pmta/config et redémarrez le service pmta. (Ici, ces directives sont écrites à l'échelle mondiale ; sur un système de production, vous préférerez peut-être les ajouter sous un virtual-mta à la place.)

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

L'enregistrement DNS est correct via MX Toolbox, et DKIM est maintenant actif.

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

PowerMTA supporte différents moyens d'injection de messages, y compris un répertoire de « récupération » de fichiers, SMTP et une API. SMTP est la méthode utilisée ici.

Pour illustrer la configuration la plus simple possible, nous allons installer les outils S/MIME sur le même serveur que PowerMTA. Nous injectons des messages à l'auditeur, qui est ouvert par défaut sur le port TCP 25, acceptant uniquement le trafic local.

export SMTP_HOST=localhost

(Si vous oubliez cette étape, vous verrez : « Environment var SMTP_HOST not set – stopping » quand vous essayez d'exécuter.)

Nous avons déjà la clé privée de l'expéditeur (steve@thetucks.com.pem) et la clé publique du destinataire (steve.tuck@sparkpost.com.crt). Les premières lignes du fichier message sont :

À : SteveT <steve.tuck@sparkpost.com> De : Steve <steve@thetucks.com> Sujet : Ceci est un message créé à l'aide de HEML MIME-Version: 1.0 Content-Type: text/html; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit

Nous envoyons le message avec :

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

Nous voyons :

Opened SMTP connection (plain)  
Host: localhost  
Port: 25  
User: ""  
Password: ""  
Sending: tests/fancy-HTML-to-smt.eml  
From: Steve <steve@thetucks.com>  
To: SteveT <steve.tuck@sparkpost.com>  
OK - in 0.028 seconds

Le message arrive rapidement dans la boîte de réception et est signalé dans Mac Mail comme signé et chiffré.

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

Fonctionnalité bonus : DKIM avec PowerMTA

DKIM est assez facile à configurer et coexiste joyeusement avec S/MIME. Les étapes sont :

  • Utilisez le site DKIM Wizard de PowerMTA pour créer la clé privée du domaine d'envoi (dans mon cas, mypmta.thetucks.com.pem) et le contenu de l'enregistrement DNS TXT public.

  • Configurez l'enregistrement DNS TXT, avec un sélecteur choisi. Par exemple, j'ai utilisé le sélecteur pmta201811. Les caractères de sélecteur valides sont définis ici.

  • Mettez le fichier mypmta.thetucks.com.pem sur le serveur dans le répertoire /etc/pmta .

  • Ajoutez ce qui suit à mon /etc/pmta/config et redémarrez le service pmta. (Ici, ces directives sont écrites à l'échelle mondiale ; sur un système de production, vous préférerez peut-être les ajouter sous un virtual-mta à la place.)

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

L'enregistrement DNS est correct via MX Toolbox, et DKIM est maintenant actif.

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

3. Injection SMTP vers Momentum

Momentum supporte divers moyens d'injection de message, y compris API et SMTP. SMTP est la méthode utilisée ici, vers un hôte déjà exécutant Momentum. Nous laisserons sa configuration inchangée, car il a déjà une capacité à accepter les injections entrantes d'autres hôtes approuvés.

C'est une version plus petite d'une configuration de production, où les nœuds de "génération" et les nœuds MTA sont séparés, mais étroitement couplés via un VLAN privé et des équilibres de charge, transportant le trafic d'injection SMTP interne.


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


Les outils S/MIME sont installés comme avant, et nous injecterons des messages à l'adresse de l'hôte SMTP (MTA) :

export SMTP_HOST=xx.xx.xx.xx # définissez votre propre adresse MTA / VIP ici

Comme précédemment, nous avons la clé privée de l'expéditeur (steve@thetucks.com.pem) et la clé publique du destinataire (steve.tuck@sparkpost.com.crt) déjà présentes sur le nœud de "génération". Les premières lignes du fichier de message correspondent à ces adresses.

Nous envoyons le message depuis le nœud de "génération" avec exactement la même commande qu'avant, et le message apparaît dans l'Inbox.

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

Comme vous vous y attendriez, S/MIME coexiste également joyeusement avec la signature DKIM de Momentum.

4. Injection SMTP vers SparkPost

Dans la partie 2, nous avons utilisé l'API REST des transmissions SparkPost pour injecter des messages. Bien sûr, il est également possible d'injecter des messages dans SparkPost en utilisant SMTP. Nous avons défini les variables d'environnement comme suit :

export SMTP_PASSWORD=<<YOUR_API_KEY_HERE>

Si vous utilisez le service hébergé dans l'UE de SparkPost, définissez SMTP_HOST comme smtp.eu.sparkpostmail.com.
(Voir ici pour plus d'options – par exemple, vous pouvez injecter sur le port 2525 plutôt que 587.)

La sortie ci-dessous montre que STARTTLS est utilisé, ainsi que le nom d'utilisateur et le mot de passe.

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

Vous verrez :

Opened SMTP connection (STARTTLS)  
Host: smtp.sparkpostmail.com  
Port: 587  
User: "SMTP_Injection"  
Password: "****************************************"  
Sending: tests/fancy-HTML-to-smt.eml  
From: Steve <steve@thetucks.com>  
To: SteveT <steve.tuck@sparkpost.com>  
OK - in 0.057 seconds

Le mot de passe est imprimé avec des caractères de substitution ***, vous ne compromettez donc pas la confidentialité de votre clé si quelqu'un regarde par-dessus votre épaule.

Sécuriser Vos Identifiants

Notez que les variables d'environnement pourraient être configurées dans un fichier de script shell ou similaire, pour éviter de les retaper. Si vous le faites, s'il vous plaît, prenez soin de vos mots de passe/clés API en limitant l'accès à ce fichier à vous seul. Par exemple, si votre fichier de configuration des identifiants s'appelle my_envs.sh, alors exécutez :

chmod 0700 my_envs.sh

Avertissements Liés à SMTP Que Vous Pouvez Voir

L'injection SMTP de SparkPost est assez stricte, comme vous vous attendez d'un service public. Si vous n'avez pas défini le numéro de port SMTP, vous verrez un avertissement :

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

Si vous n'avez pas défini le nom d'utilisateur SMTP ou que vous n'avez pas défini le mot de passe, vous verrez :

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

Ces messages d'erreur sont simplement rapportés tels quels depuis la bibliothèque SMTP de Python, d'où le formatage.

Lequel est plus rapide – SMTP ou API ?

Franchement, S/MIME est peu susceptible d'être un cas d'utilisation à fort volume, mais avoir le même outil avec deux options de sortie était juste une invitation à faire une course!

Le fichier de test de courriel "Avocado" utilisé ici fait environ 19 Ko. Répéter les tests 10 fois via une boucle bash a montré que les temps moyens semblaient similaires pour SMTP et API, environ 60 millisecondes par message, ce qui est assez rapide. Dans ce cas, nous avons injecté depuis une instance EC2 moyenne dans la même région d'hébergement que SparkPost.com, ce qui est un bon moyen de maintenir les temps de trajet de retour réseau faibles.

En répétant cela avec un fichier de test plus grand (577 Ko), l'API a pris environ 200 millisecondes, tandis que SMTP a pris 280 millisecondes par message - toujours impressionnant pour une taille de fichier 30 fois plus grande. Bien sûr, votre expérience peut varier en fonction de l'emplacement, de la congestion Internet, etc., mais les performances sont peu susceptibles d'être un problème.

Si vous avez vraiment besoin de performances maximales, un bon point de départ serait de lancer un nombre défini de processus/sessions d'injection simultanés conformément à nos recommandations de bonnes pratiques de transmission - par exemple depuis une tâche de supervision.

En résumé…

Nous avons vu comment l'outil basé sur l'API SparkPost utilisé dans la Partie 2 est mis à jour pour prendre en charge l'injection SMTP afin de prendre en charge les MTA locaux tels que Port25 PowerMTA et Momentum dans une variété de configurations, ainsi qu'avec SparkPost.

C'est tout pour l'instant ! Bon envoi.

Une personne est debout à un bureau en train de taper sur un ordinateur portable.

La plateforme AI-native complète qui évolue avec votre business.

Product

Solutions

Resources

Company

Paramètres de confidentialité

À venir bientôt

Social

Newsletter

Restez à jour avec Bird grâce aux mises à jour hebdomadaires dans votre boîte de réception.

S'inscrire

Une personne est debout à un bureau en train de taper sur un ordinateur portable.

La plateforme AI-native complète qui évolue avec votre business.

Product

Solutions

Resources

Company

Paramètres de confidentialité

Social

Newsletter

Restez à jour avec Bird grâce aux mises à jour hebdomadaires dans votre boîte de réception.

S'inscrire