Déploiement des Signaux pour On-Premises : Intégration PowerMTA

Oiseau

30 août 2019

Email

1 min read

Déploiement des Signaux pour On-Premises : Intégration PowerMTA

Oiseau

30 août 2019

Email

1 min read

Déploiement des Signaux pour On-Premises : Intégration PowerMTA

Plongeons dans les détails de la configuration de PowerMTA pour SparkPost Signals.

Explorons les détails de la configuration de PowerMTA pour SparkPost Signals. Vous allez avoir besoin de :

  • Un hôte pour exécuter la dernière version de PowerMTA – soit une nouvelle machine, soit une machine existante

  • Un compte SparkPost avec la permission de clé API pour « Événements entrants : Écriture » comme décrit ici

Nous allons configurer PowerMTA pour transmettre des événements à votre compte SparkPost, puis vous serez en mesure d'utiliser les éléments suivants :

D'abord, installez (ou mettez à niveau) vers PowerMTA 5.0 r4 ou supérieur, en suivant les instructions habituelles d'installation v5.0 qui sont assez simples. Ensuite, nous travaillerons à travers les étapes suivantes :

  • Configurer le connecteur PowerMTA pour SparkPost Signals

  • Configurer le suivi de l'engagement avec un domaine de suivi personnalisé

  • Sélectionner quels flux de trafic PowerMTA rapporter aux Signals

  • Tester que vos événements atteignent bien les Signals

  • Revoir comment utiliser des noms significatifs qui apparaissent bien dans les rapports.

Nous aborderons également les autres aspects spécifiques de la configuration de PowerPMTA utilisés dans notre démonstration Signals :

  • Événements FBL (plaintes de spam) et rejets distants (hors bande)

  • Configuration d'injection, y compris DKIM

  • Configuration FBL et OOB

  • Configuration et nommage des VirtualMTA (et comment cela apparaît dans vos rapports SparkPost Signals)

Enfin, il y a une « fonctionnalité bonus » avec un code pour s'assurer que les noms de vos campagnes sont compatibles avec les conventions de noms PowerMTA X-Job.

Configurer le connecteur PowerMTA

La configuration des Signals est décrite dans la section 10.1 du Guide de l'utilisateur 5.0. Ici, nous commencerons avec « Use Case #2 », qui active Signals pour tout le trafic de cet hôte PowerMTA et active le suivi de l'engagement de SparkPost.

# # SparkPost Signals # <signals> api-key ##ma clé API à ingérer ici## upload-url https://api.sparkpost.com/api/v1/ingest/events log-verbose true min-free-space 1G engagement-tracking sparkpost # ceci active le suivi des ouvertures et des clics dans PowerMTA customer-id 123 # Votre numéro de compte SparkPost ici </signals> enable-signals true

Voici ce que fait chaque attribut :

api-key

Ceci est unique à votre compte SparkPost, c’est la valeur que vous avez obtenue de SparkPost plus tôt.

upload-url

Cela doit correspondre à l'adresse de votre service API SparkPost, qu'il soit aux États-Unis ou en UE. Pour plus d'informations, voir ici. Les valeurs habituelles sont :

SparkPost (US) : https://api.sparkpost.com/api/v1/ingest/events

SparkPost UE :    https://api.eu.sparkpost.com/api/v1/ingest/events

log-verbose

Cette directive est optionnelle et, lorsqu'elle est activée, elle donne un peu plus d'informations dans le fichier pmta.log, ce qui peut être utile lors de la configuration pour confirmer que tout fonctionne correctement. Chaque minute, même en l'absence de trafic, vous verrez :

2019-07-26 11:47:57 Signals : Découvert 0 fichiers

Avec du trafic, vous verrez quelque chose comme :

2019-07-26 11:50:57 Signals : Découvert sp1-0000000000003FBD.json 2019-07-26 11:50:57 Signals : Transféré sp1-0000000000003FBD.json avec succès. 2019-07-26 11:50:57 Signals : Découvert 1 fichier, transféré 1 fichier avec succès

min-free-space

Cela indique à PowerMTA le seuil d'espace disque à partir duquel il doit commencer à supprimer les fichiers d'événements JSON de SparkPost les plus anciens pour faire de la place pour de nouveaux fichiers lorsque l'espace disque est faible.

enable-signals

Ceci indique à PowerMTA de télécharger vers Signals, dans ce cas globalement pour tout le trafic (plus d'informations ici, pour v5.0). Vous pouvez être plus sélectif sur les flux de trafic à télécharger si vous le souhaitez.

Vous pouvez également marquer un trafic PowerMTA particulier à déclarer comme appartenant à un sous-compte SparkPost – c'est un autre moyen de distinguer un flux de trafic particulier d'un autre.

engagement-tracking, customer-id
La solution de suivi de l'engagement de PowerMTA par défaut utilise le domaine de suivi pour le service hébergé aux États-Unis de SparkPost. Vous spécifiez votre identifiant numérique de client SparkPost ; voici les instructions pour le trouver.

tracking-domain

Pour les comptes SparkPost UE, ajoutez la ligne suivante :

tracking-domain pmta.eu.spgo.io # ceci est l'endpoint pour SparkPost UE

Domaine de suivi personnalisé

Si vous préférez utiliser votre propre domaine de suivi (c'est mieux du point de vue de la livrabilité), procédez comme suit :

  • Créez un domaine de suivi avec votre fournisseur DNS en créant un enregistrement CNAME. Ce sera généralement un sous-domaine de votre domaine de niveau supérieur, par exemple track.mycompany.com .

track.mycompany.com CNAME pmta.spgo.io # si vous avez un compte SparkPost US track.mycompany.com CNAME pmta.eu.spgo.io # si vous avez un compte SparkPost UE

Vous pouvez également utiliser des domaines de suivi HTTPS, bien que cela soit plus complexe (voir les étapes de configuration de SparkPost ici).

  • Enregistrez le domaine de suivi dans votre compte SparkPost et vérifiez-le. Attendez quelques minutes avant d'essayer ceci, afin de permettre à vos modifications DNS de se propager sur Internet, selon votre fournisseur DNS.

  • Configurez PowerMTA pour utiliser ce domaine au lieu du domaine par défaut, avec

tracking-domain yourdomain.com # Mettez votre propre domaine ici

Vous pouvez vérifier que vos e-mails livrés ont des “pixels ouverts” ajoutés et les liens enveloppés, en regardant les détails internes du courrier (dans Gmail, utilisez le menu en haut à droite et choisissez “Afficher l'original”).

Show original option highlighted


Vous remarquerez les pixels ouverts au début et à la fin du HTML dans l'e-mail. Chaque lien HTML est également modifié pour avoir REF pointant vers le domaine de suivi.

HTML code highlighted


C'est tout ce dont vous avez besoin pour que SparkPost Signals fonctionne avec le suivi de l'engagement intégré de PowerMTA.

Empêcher les liens spécifiques dans votre e-mail html d'être suivis

Vous pouvez empêcher PowerMTA de suivre certains liens en définissant l'attribut personnalisé data-msys-clicktrack à “0”  :

<a href="#" data-msys-clicktrack="0">Example</a>

PowerMTA n'enveloppera pas le lien. Il supprimera également cet attribut avant de transmettre le message à votre destinataire.

Sélectionnez les flux de trafic PowerMTA à signaler à Signals

Vous pouvez sélectionner des signaux pour être actifs :

  • Globalement (c'est ce que nous avons utilisé dans l'exemple ci-dessus)

  • Pour certains MTAs virtuels et pas d'autres

  • Pour certains pools de MTAs virtuels et pas d'autres

  • Pour des adresses "Sender" ou "From" spécifiques relayées par PowerMTA, en combinaison avec les sélections de Virtual MTA / pool de Virtual MTA

Cette configuration est très puissante et est illustrée à travers une série de cas d'utilisation d'exemple (v5.0) dans le Guide de l'utilisateur.

Vous pouvez sélectionner des signaux pour être actifs :

  • Globalement (c'est ce que nous avons utilisé dans l'exemple ci-dessus)

  • Pour certains MTAs virtuels et pas d'autres

  • Pour certains pools de MTAs virtuels et pas d'autres

  • Pour des adresses "Sender" ou "From" spécifiques relayées par PowerMTA, en combinaison avec les sélections de Virtual MTA / pool de Virtual MTA

Cette configuration est très puissante et est illustrée à travers une série de cas d'utilisation d'exemple (v5.0) dans le Guide de l'utilisateur.

Vous pouvez sélectionner des signaux pour être actifs :

  • Globalement (c'est ce que nous avons utilisé dans l'exemple ci-dessus)

  • Pour certains MTAs virtuels et pas d'autres

  • Pour certains pools de MTAs virtuels et pas d'autres

  • Pour des adresses "Sender" ou "From" spécifiques relayées par PowerMTA, en combinaison avec les sélections de Virtual MTA / pool de Virtual MTA

Cette configuration est très puissante et est illustrée à travers une série de cas d'utilisation d'exemple (v5.0) dans le Guide de l'utilisateur.

Tester que vos événements atteignent Signals

Voici une vue de SparkPost Signals, connecté à PowerMTA. Vous pouvez voir que le score de santé varie.

Health score dashboard


Les noms de Campagne sont disponibles comme facettes de reporting, ainsi que Subaccount, IP Pool, Mailbox Provider, et Sending Domain.

En plus de regarder les journaux PowerMTA, vous pouvez vérifier que les données d'événements atteignent SparkPost en regardant l'écran d'Intégration Signals.

Signals integration screen

Dans votre écran de Recherche d'Événements SparkPost, vous devriez voir apparaître des événements dans quelques minutes. Cela inclura des événements d'Injection et de Livraison, ainsi que Bounce, et potentiellement Out-of-Band Bounce et des événements de Plainte Spam, si vous avez déjà configuré PowerMTA pour les gérer à votre place.
Si vous avez activé le Suivi d'Engagement, vous verrez également des événements open, initial_open, et click.

Utiliser des noms significatifs qui apparaissent bien dans les rapports

Configurer les noms de Pool VirtualMTA PowerMTA et les noms de Job pour qu'ils soient significatifs et lisibles par l'humain vaut vraiment la peine de le faire. Ceux-ci apparaissent directement dans vos facettes de SparkPost Signals et dans le rapport de synthèse.

Comme mentionné précédemment, vous n'avez pas besoin de créer ces pools dans votre compte SparkPost. SparkPost les récupère à partir de votre configuration PowerMTA.

Voici comment les termes de configuration PowerMTA se traduisent en termes SparkPost.

Terme PowerMTA / SparkPost Reports / SignalsRecipient Domain
(partie domaine du champ “rcpt” dans le fichier de comptabilité).Recipient DomainLa partie domaine de l'en-tête “Sender” ou “From” dans le message relayé par PowerMTA.
(partie domaine de “orig” dans le fichier de comptabilité).Sending DomainVirtualMTA (nom)—VirtualMTA Pool (nom)
(“vmtaPool” dans le fichier de comptabilité)IP Pool (nom)smtp-source-host a.b.c.d
(“dlvSourceIp” dans le fichier de comptabilité)Sending IP a.b.c.dJob (nom)
(“jobId” dans le fichier de comptabilité)Campaign ID (nom)—Template (nom)“Subaccount” n'est pas un concept natif de PowerMTA.

Cependant, PowerMTA peut étiqueter les VirtualMTAs, Virtual MTA Pools, ou les domaines Sender-or-From avec un ID de sous-compte à des fins de reporting SparkPost.

Subaccount ID (numéro)FBL (événement)Spam Complaint (événement)Remote Bounce (événement)Out-of-Band bounce (événement)

Configurer au moins une adresse smtp-source-host permet également à SparkPost d'identifier correctement l'adresse IP d'envoi, de sorte qu'elle apparaisse sur les événements d'injection et de livraison, ainsi que dans la vue du rapport de synthèse.

Les noms de Job sont configurés dans PowerMTA via un en-tête dans le message injecté. En plus de permettre un contrôle individuel des travaux (pause/reprise, etc.), ce qui est utile en soi, PowerMTA transmet les noms aux rapports de Signal SparkPost sous forme de “campaign ID”. Voir le Guide de l'utilisateur section v5.0 12.8 “Tracking a campaign in PowerMTA with a JobID”.

Il y a quelques précautions à prendre en compte concernant la dénomination des jobs. Bien que SparkPost (avec le format JSON et l'échappement JSON) permette des caractères comme <SPACE>  dans les noms de campagne, les en-têtes de courrier sont plus restrictifs. Les caractères valides autorisés dans l'en-tête X-Job  sont :

A-Za-z0-9!#$%&'()*+,-./:;<=>?@[\]^_{|}~ 

En d'autres termes, les caractères interdits incluent <SPACE>, les guillemets doubles “  et l'accent grave `. Si vous êtes habitué à travailler avec des noms de X-Job, cela ne sera pas surprenant, et vos noms de ID de campagne “fonctionneront” simplement sur les rapports SparkPost. Si, comme moi, vous avez appris SparkPost en premier, vous pourriez vouloir un outil pour garantir que vos valeurs X-Job sont sûres ; voir la fonction bonus à la fin de cet article.

Événements FBL (plaintes spam) et rebonds distants (hors bande)

PowerMTA peut recevoir et traiter les événements FBL (connu dans SparkPost sous le nom d'événements de plainte pour spam) et les rebonds distants (connu dans SparkPost sous le nom de rebonds hors bande, car la réponse revient quelque temps plus tard, plutôt que pendant la conversation SMTP).

Il y a des articles dans le forum de support Port25 sur comment configurer le Bounce Processor et le FBL Processor. Si vous êtes déjà un utilisateur de PowerMTA, vous avez probablement déjà cela.

Voici la configuration que j’ai faite pour une démo, basée sur ces articles et orientée vers l'hébergement de PowerMTA dans Amazon EC2.

Si vous êtes familier avec la configuration de PowerMTA dans ce domaine, vous pouvez passer cette partie, jusqu'à la prochaine ligne horizontale.

Configuration d'injection

Nous utiliserons le port 587 pour les messages injectés, qui passeront par Internet public depuis un autre hôte. Nous devons empêcher les mauvais acteurs de découvrir et d'abuser de ce service, nous appliquons donc une authentification par nom d'utilisateur/mot de passe et un TLS facultatif, similaire aux points d'injection SMTP de SparkPost.

Nous voulons pouvoir envoyer des messages depuis des sources correctement authentifiées vers n'importe quelle destination. Nous voulons également un écouteur distinct sur le port 25 pour les réponses FBL et de rebond à distance qui ne nécessitent pas d'authentification.

# # Adresse(s) IP et port(s) sur lesquels écouter les connexions SMTP entrantes # smtp-listener 0.0.0.0:587 smtp-listener 0.0.0.0:25

Dans les déclarations <source> suivantes, nous utilisons une authentification par nom d'utilisateur/mot de passe et un TLS facultatif pour se défendre contre l'injection de messages malveillants. Nous définissons également des limites de débit sur les connexions effectuant des tentatives de mot de passe échouées.

Votre configuration peut être différente; par exemple, si vous avez un réseau privé entre l'injecteur et PowerMTA, vous n'aurez pas besoin d'authentification par mot de passe.

# Une règle source pour toute injection, interne ou externe. Appliquer l'authentification, sauf pour les rebonds et FBLs # <source 0/0> log-connections false log-commands false # ATTENTION : verbeux ! juste pour dev log-data false # ATTENTION : encore plus verbeux ! smtp-service true # autoriser le service SMTP smtp-max-auth-failure-rate 1/min allow-unencrypted-plain-auth false allow-starttls true rewrite-list mfrom </source> <source {auth}> always-allow-relaying yes # uniquement si l'authentification réussit default-virtual-mta default process-x-job true </source>

La déclaration <source {auth}> (voir ici. v5.0) s'applique une fois l'authentification réussie. Ici, elle permet le relais continu, configure le groupe MTA virtuel par défaut à utiliser, et ajoute l'en-tête X-Job (qui sera rapporté par SparkPost Signals comme campaign_id).

La liste de réécriture mappe les messages injectés pour utiliser un domaine MAIL FROM spécifique (alias domaine de rebond ou Return-Path:).

# # Réécrire l'adresse MAIL FROM pour correspondre au domaine de rebond # <rewrite-list mfrom> mail-from *@pmta.signalsdemo.trymsys.net *@bounces.pmta.signalsdemo.trymsys.net </rewrite-list>

Ensuite, nous configurons notre configuration TLS et le nom d'utilisateur/mot de passe SMTP, selon les recommandations actuelles.

# # Sécuriser le service entrant avec nom d'utilisateur, mot de passe et TLS. SMT 2020-06-15 # smtp-server-tls-certificate /etc/pmta/pmtasignalsdemo.pem smtp-server-tls-allow-tlsv1 false smtp-server-tls-allow-tlsv1.1 false smtp-server-tls-allow-tlsv1.2 true smtp-server-tls-allow-tlsv1.3 true # # Utilisateurs SMTP (authentifiés via SMTP AUTH) # <smtp-user SMTP_Injection> password ##METTEZ ICI VOTRE MOT DE PASSE## authentication-method password </smtp-user>

Nous pouvons vérifier que le TLS v1.0 (non sécurisé, obsolète) n'est pas accepté en utilisant mon outil de test SMTP préféré, swaks.

swaks --server pmta.signalsdemo.trymsys.net --port 587 --to test@trymsys.net --from any@sparkpost.com --tls --tls-protocol tlsv1

Nous voyons :

*** Échec du démarrage TLS (connect(): error:00000000:lib(0):func(0):reason(0)) *** STARTTLS tenté mais échoué

De même pour –tls-protocol tlsv1_1.

Appliquons également une signature DKIM sur nos messages sortants, car c'est une bonne pratique (j'ai suivi ces instructions pour configurer la clé).

# # DKIM # domain-key mypmta, pmta.signalsdemo.trymsys.net, /etc/pmta/mypmta.pmta.signalsdemo.trymsys.net.pem

FBL and OOB configuration

Maintenant .. enfin .. nous déclarons quels domaines spécifiques sont ouverts pour les réponses de rebond à distance et FBL. Nous ne voulons pas les relayer n'importe où (pour prévenir les attaques de rebond), juste traiter ces réponses en interne.

# # Activer le traitement des rebonds et FBL sur des domaines spécifiques # relay-domain pmta.signalsdemo.trymsys.net relay-domain bounces.pmta.signalsdemo.trymsys.net relay-domain fbl.pmta.signalsdemo.trymsys.net <bounce-processor> deliver-unmatched-email no deliver-matched-email no <address-list> domain pmta.signalsdemo.trymsys.net domain bounces.pmta.signalsdemo.trymsys.net </address-list> </bounce-processor> <feedback-loop-processor> deliver-unmatched-email no deliver-matched-email no <address-list> domain fbl.pmta.signalsdemo.trymsys.net </address-list> </feedback-loop-processor>

Vous pouvez voir que j'ai configuré deux domaines de rebond, car je jouais avec l'utilisation/non-utilisation de la règle de réécriture mfrom.

Le domaine FBL est généralement ensuite enregistré avec des services externes tels que Microsoft SNDS ; voir cet article pour plus d'informations. Pour cette démo, les FBL proviendront de Bouncy Sink, donc pas besoin de s'inscrire.

Test du listener SMTP

Il est important de tester que votre écouteur SMTP exige une autorisation pour toutes les destinations générales, rejetant tous les messages qui ne sont pas spécifiquement adressés aux domaines FBL et de rebonds distants.

swaks --server pmta.signalsdemo.trymsys.net --port 25 --to test@strange.pmta.signalsdemo.trymsys.net --from any@sparkpost.com

La réponse, comme prévu, montre que le relais est refusé :

550 5.7.1 relais refusé pour le destinataire dans "RCPT TO:<test@strange.pmta.signalsdemo.trymsys.net>

(Fin de la description de la configuration de démonstration).

Configuration et nomination de VirtualMTA

Les PowerMTA VirtualMTAs (et les pools de VirtualMTA) sont des fonctionnalités puissantes pour gérer les flux de messages, et les fonctionnalités de rapport PowerMTA / SparkPost Signals fonctionnent mieux avec celles-ci actives.

# # Routez tout le trafic sortant à travers ce Virtual MTA / pool. # Déclarez ici l'adresse IP de livraison, afin que les événements d'injection de signaux SparkPost (alias "réception") # transportent l'attribut sending_IP correct # <virtual-mta mta1>     smtp-source-host 172.31.25.101 pmta.signalsdemo.trymsys.net </virtual-mta> <virtual-mta-pool default>     virtual-mta mta1     <domain *>         max-smtp-out    20       # max. connexions *par domaine*         bounce-after    4j12h    # 4 jours, 12 heures         retry-after     10m      # 10 minutes         dkim-sign       oui     </domain> </virtual-mta-pool>

Le paramètre virtual-mta-pool est signalé dans SparkPost comme "IP Pool", et est disponible comme une facette de rapport de SparkPost Signals (le menu déroulant sous les graphiques).

Health score dashboard


Le rapport récapitulatif montre également IP Pool comme une facette de rapport "Group By".

Summary report dashboard


Comme noté plus tôt dans cet article, configurer au moins une adresse smtp-source-host permet également à SparkPost d'identifier correctement l'adresse IP d'envoi, afin qu'elle apparaisse dans les événements d'injection et de livraison, ainsi que dans le rapport récapitulatif :

Summary report with the group by filter set to "Sending IP"

C’est tout ce dont vous avez besoin pour obtenir une intégration de base fonctionnant entre PowerMTA et SparkPost Signals. Vous trouverez l’exemple complet de fichier de config ici.

Avant de partir, voici la fonctionnalité bonus que j'ai mentionnée.

Bonus feature : X-Job name checking/filtering

Pour garantir que n'importe quelle chaîne de caractères est sécurisée pour être utilisée comme nom de PowerMTA X-Job, voici une simple fonction Python pour mapper tout caractère non sécurisé à un trait de soulignement “_”

import re def pmtaSafeJobID(s):    """    :param s: str    :return: str    Mappez une chaîne d'ID de campagne arbitraire en caractères autorisés pour l'entête PMTA X-Job.    Voir https://download.port25.com/files/UsersGuide-5.0.html#tracking-a-campaign-in-powermta-with-a-jobid    Refuser spécifiquement <sp> " ` mais autoriser la plupart des autres caractères.    """    # Note, Il faut échapper ' - [ ] et double-échapper \ - voir https://docs.python.org/3/library/re.html    disallowedChars = '[^A-Za-z0-9!#$%&\'()*+,\-./:;<=>?@\[\\\\\]^_{|}~]'    return re.sub(disallowedChars, '_', s)

Cela utilise les expressions régulières Python d'une manière spécifique. Il déclare l'ensemble des caractères refusés en utilisant l'opérateur de « complément d'ensemble » ^ plutôt que de lister tous les caractères autorisés. Cela signifie que nous capturons (et sécurisons) des caractères au-delà de l'ensemble habituel de 7 bits. Nous pouvons le montrer à l'aide de ce fragment de test :

s='' for i in range(32, 256): s += chr(i) print(pmtaSafeJobID(s))

En donnant

_!_#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^__abcde fghijklmnopqrstuvwxyz{|}~___________________________________________________________ ______________________________________________________________________

Vous pouvez voir que <SPACE>, les guillemets doubles “, et le backtick `, ainsi que tous les caractères au-delà de ~ sont mappés à un trait de soulignement.

Connectons-vous avec un expert Bird.
Découvrez toute la puissance du Bird en 30 minutes.

En soumettant, vous acceptez que Bird puisse vous contacter au sujet de nos produits et services.

Vous pouvez vous désabonner à tout moment. Consultez la Déclaration de confidentialité de Bird pour plus de détails sur le traitement des données.

Company

Newsletter

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

Connectons-vous avec un expert Bird.
Découvrez toute la puissance du Bird en 30 minutes.

En soumettant, vous acceptez que Bird puisse vous contacter au sujet de nos produits et services.

Vous pouvez vous désabonner à tout moment. Consultez la Déclaration de confidentialité de Bird pour plus de détails sur le traitement des données.

Company

Newsletter

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

Connectons-vous avec un expert Bird.
Découvrez toute la puissance du Bird en 30 minutes.

En soumettant, vous acceptez que Bird puisse vous contacter au sujet de nos produits et services.

Vous pouvez vous désabonner à tout moment. Consultez la Déclaration de confidentialité de Bird pour plus de détails sur le traitement des données.

R

Atteindre

G

Grow

M

Manage

A

Automate

Company

Newsletter

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