Product

Solutions

Resources

Company

Product

Solutions

Resources

Company

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.

Plongeons dans 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 une permission de clé API pour « Événements entrants : Écrire » comme décrit ici

Nous allons configurer PowerMTA pour envoyer des événements à votre compte SparkPost, puis vous pourrez utiliser les éléments suivants :

Tout d'abord, installez (ou mettez à niveau) vers PowerMTA 5.0 r4 ou une version ultérieure, en suivant les instructions habituelles d'installation v5.0 qui sont assez simples. Ensuite, nous passerons en revue les étapes suivantes :

  • Configurer le connecteur PowerMTA vers SparkPost Signals

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

  • Sélectionner les flux de trafic PowerMTA à signaler à Signals

  • Tester que vos événements atteignent Signals

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

Nous couvrirons également d'autres aspects spécifiques de la configuration de PowerPMTA utilisés dans notre démo Signals :

  • Événements FBL (plaintes pour spam) et rebonds à distance (hors bande)

  • Configuration de l'injection, y compris DKIM

  • Configuration FBL et OOB

  • Configuration et nommage 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 nom X-Job  de PowerMTA.

Configurer le connecteur PowerMTA

La configuration de 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 provenant de cet hôte PowerMTA, et activera le suivi de l'engagement SparkPost.

# # SparkPost Signals # <signals> api-key ##ma clé API d'insertion ici## upload-url https://api.sparkpost.com/api/v1/ingest/events log-verbose true min-free-space 1G engagement-tracking sparkpost # cela 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

C'est unique pour votre compte SparkPost, c'est la valeur que vous avez reçue de SparkPost plus tôt.

upload-url

Cela doit correspondre à l'adresse de votre service API SparkPost, qu'il soit US ou EU. Pour plus d'informations, voir ici. Les valeurs habituelles sont :

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

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

log-verbose

Cette directive est facultative et lorsqu'elle est activée, fournit 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 lorsqu'il n'y a pas 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 auquel il doit commencer à supprimer les plus anciens fichiers d'événements JSON SparkPost pour laisser de la place aux nouveaux fichiers lorsque l'espace disque commence à manquer.

enable-signals

Cela 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 pour le 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 se base par défaut sur le domaine de suivi pour le service hébergé par SparkPost aux États-Unis. Vous spécifiez votre ID client numérique SparkPost ; voici les instructions pour le trouver.

tracking-domain

Pour les comptes SparkPost EU, ajoutez la ligne suivante :

tracking-domain pmta.eu.spgo.io # c'est le point de terminaison pour SparkPost EU

Domaine de suivi personnalisé

Si vous préférez utiliser votre propre domaine de suivi (c'est mieux du point de vue de la délivrabilité), faites le suivant :

  • Créez un domaine de suivi avec votre fournisseur DNS en créant un enregistrement CNAME. Il s'agira généralement d'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 EU

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

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

  • Configurez PowerMTA pour utiliser ce domaine au lieu de celui 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 d'ouverture” ajoutés et que les liens sont encapsulés, en regardant les détails des e-mails (dans Gmail, utilisez le menu en haut à droite et choisissez “Afficher l'original”).

Show original option highlighted


Vous remarquerez les pixels d'ouverture 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 faire fonctionner SparkPost Signals avec le suivi d'engagement intégré de PowerMTA.

Empêcher le suivi de certains liens dans votre e-mail HTML

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

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

PowerMTA ne placera pas le lien dans un paquet. 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 arriveront par Internet public depuis un autre hôte. Nous devons empêcher les acteurs malveillants de découvrir et d'abuser de ce service, c'est pourquoi nous appliquons une authentification par nom d'utilisateur/mot de passe et un TLS optionnel, similaire aux points de terminaison d'injection SMTP de SparkPost.

Nous voulons être capables d'envoyer des messages provenant de sources correctement authentifiées vers n'importe quelle destination. Nous voulons également un écouteur séparé sur le port 25 pour les réponses FBL et les rebonds à 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 optionnel pour nous défendre contre l'injection de messages malveillants. Nous fixons également des limites de débit sur les connexions qui tentent des mots de passe incorrects.

Votre configuration peut différer; 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 toutes les injections, internes ou externes. Appliquer l'authentification, sauf pour les rebonds et les FBL # <source 0/0> log-connections false log-commands false # AVERTISSEMENT : verbeux! juste pour le développement log-data false # AVERTISSEMENT : 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 # seulement 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 que l'authentification est passée. Ici, elle permet le relais vers l'avant, configure le groupe MTA virtuel par défaut à utiliser, et ajoute l'en-tête X-Job (qui sera rapporté par SparkPost Signals en tant que 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 ##PUT YOUR PASSWORD HERE## authentication-method password </smtp-user>

Nous pouvons vérifier que le TLS (non sécurisé, obsolète) v1.0 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 :

*** L'initialisation de TLS a échoué (connect(): error:00000000:lib(0):func(0):reason(0)) *** STARTTLS tenté mais échoué

De même pour –tls-protocol tlsv1_1.

Appliquons également la 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 relayer ceux-ci n'importe où (pour éviter les attaques par rétrodiffusion), 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 enregistré auprès de services externes tels que Microsoft SNDS ; voir cet article pour plus d'informations. Pour cette démo, les FBL viendront du Bouncy Sink, donc pas besoin de s'enregistrer.

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.

A person is standing at a desk while typing on a laptop.

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

A person is standing at a desk while typing on a laptop.

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