
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
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.

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 :
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 :
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 :
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.