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

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

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

Dec 1, 2019

Publié par

Publié par

Bird

Bird

-

Catégorie :

Catégorie :

Email

Email

Ready to see Bird
in action?

Ready to see Bird
in action?

S/MIME Part 3: Plug and Play for On-Premises Secure Email

In partie 1, we had a quick tour of S/MIME, looking at signing and encryption of our message streams across a range of mail clients. Partie 2 took us through a simple command-line tool to sign and encrypt emails, then send them through SparkPost.

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

OK - commençons !

1. Mise en route

L'installation de l'outil, l'obtention des clés, etc. sont exactement les mêmes 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. 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 le port 25 PowerMTA

PowerMTA prend en charge différents moyens d'injection de messages, notamment un répertoire de fichiers "pickup", SMTP et une API. La méthode utilisée ici est le SMTP.

Pour illustrer la configuration la plus simple possible, nous installerons 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, n'acceptant que le trafic local.

export SMTP_HOST=localhost

(If you forget that step, you’ll see: “Environment var SMTP_HOST not set – stopping” when you try to run.)

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 de messages sont :

To: SteveT <steve.tuck@sparkpost.com> From: Steve <steve@thetucks.com> Subject: This is a message created using 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) to 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 sur le site inbox et s'affiche dans Mac Mail comme étant signé et crypté.

Fonctionnalité bonus : DKIM avec PowerMTA

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

  • Use the PowerMTA Assistant DKIM site to create sending domain private key (in my case, mypmta.thetucks.com.pem) and public DNS TXT record contents.

  • Set up the DNS TXT record, with a chosen selector. For example, I used selector pmta201811. Valid selector characters are defined here.

  • Put mypmta.thetucks.com.pem file on the server in directory /etc/pmta .

  • Add the following to my /etc/pmta/config and restart the pmta service. (Here, these directives are written at global scope; on a production system, you might prefer to add them under a virtual-mta instead.)

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

L'enregistrement DNS est vérifié par MX Toolbox, et DKIM est maintenant actif.


3. Injection SMTP vers Momentum

Momentum prend en charge différents moyens d'injection de messages, dont l'API et le SMTP. Le SMTP est la méthode utilisée ici, en direction d'un hôte utilisant déjà Momentum. Nous laisserons sa configuration inchangée, car il est déjà en mesure d'accepter des injections entrantes provenant d'autres hôtes approuvés.

Il s'agit d'une version réduite d'une installation 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 équilibreurs de charge, transportant le trafic d'injection SMTP interne.


Les outils S/MIME sont installés comme précédemment, et nous allons injecter 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 "génération". Les premières lignes du fichier de messages correspondent à ces adresses.

Nous envoyons le message depuis le nœud "génération" avec exactement la même commande que précédemment, et le message apparaît sur le site inbox.

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

As you’d expect, S/MIME also happily coexists with Momentum’s Signature DKIM.

4. Injection SMTP vers SparkPost

In partie 2 we used the SparkPost transmissions REST API to inject messages. Of course, it’s also possible to inject messages into SparkPost using SMTP. We set the environment variables like this:

export SMTP_PASSWORD=<<YOUR API KEY HERE>> export SMTP_HOST=smtp.sparkpostmail.com export SMTP_USER=SMTP_Injection export SMTP_PORT=587

If you’re using SparkPost Service hébergé par l'UE then set SMTP_HOST as smtp.eu.sparkpostmail.com.
(Voir ici for more options – for example you can inject on port 2525 rather than 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) to 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 ***, de sorte que vous ne compromettez pas la confidentialité de votre clé si quelqu'un regarde par-dessus votre épaule.

Sécuriser vos informations d'identification

Notez que les variables d'environnement peuvent être configurées dans un fichier de script shell ou similaire, afin d'éviter de devoir les retaper. Si vous le faites, veuillez prendre 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 informations d'identification s'appelle my_envs.sh, alors exécutez :

chmod 0700 mon_envs.sh

Avertissements liés au SMTP que vous pouvez voir

L'injection SMTP de SparkPost est assez stricte, comme on peut s'y attendre de la part d'un service public. Si tu n'as pas défini le numéro du port SMTP, tu verras 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 si vous n'avez pas défini le mot de passe, vous verrez :

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

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

Lequel est le plus rapide - SMTP ou API ?

Franchement, il est peu probable que S/MIME soit un cas d'utilisation à fort volume, mais le fait d'avoir le même outil avec deux options de sortie ne demandait qu'à nous faire courir !

Le fichier de test d'email "Avocado" utilisé ici fait environ 19KB. La répétition des tests 10 fois via une boucle bash a montré que les temps moyens étaient similaires pour le SMTP et l'API, autour de 60 millisecondes par message, ce qui est assez rapide. Dans ce cas, nous avons injecté à partir d'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 d'aller-retour du réseau à un niveau bas.

En répétant l'opération avec un fichier test plus volumineux (577 Ko), l'API a pris environ 200 millisecondes, tandis que le SMTP a pris 280 millisecondes par message, ce qui reste impressionnant pour un fichier 30 fois plus volumineux. Bien sûr, votre kilométrage peut varier en fonction de votre emplacement, de l'encombrement de l'Internet, etc., mais il est peu probable que les performances soient un problème.

If you really need maximum performance, a good starting point would be to launch a set number of concurrent injection processes/sessions as per our meilleures pratiques de transmission recommendations – e.g. from a supervisor task.

En résumé...

We’ve seen how the SparkPost API-based tool used in Partie 2 is updated to support SMTP injection to support on-premises MTAs such as Port25 PowerMTA and Momentum in a variety of configurations, as well as with SparkPost.

C'est tout pour le moment ! Bon envoi.

Your new standard in Marketing, Pay & Sales. It's Bird

Le right message -> à la right person -> au right time.

Your new standard in Marketing, Pay & Sales. It's Bird

Le right message -> à la right person -> au right time.