
In dit deel zullen we bekijken hoe de tool kan worden aangepast om mailstromen in te voegen in on-premises platforms zoals PowerMTA en Momentum.
In deel 1 hadden we een snelle rondleiding van S/MIME, waarbij we keken naar het ondertekenen en versleutelen van onze berichtenstromen in verschillende mailclients. Deel 2 nam ons mee door een eenvoudige command-line tool om e-mails te ondertekenen en versleutelen, en deze vervolgens via SparkPost te verzenden.
In dit deel kijken we hoe de tool kan worden aangepast om mailstromen te injecteren in on-premises platformen zoals Port25 PowerMTA en Momentum.
OK – laten we beginnen!
1. Aan de slag
Het installeren van het hulpmiddel, het verkrijgen van uw sleutels, enz. is precies hetzelfde als voorheen. Wanneer je een on-premises e-mailsysteem zoals PowerMTA of Momentum gebruikt, ben je al verantwoordelijk voor het instellen van verzenddomeinen, DKIM-sleutels, enz. Wat we nu moeten doen, is een manier bieden om de volledig gevormde S/MIME-berichten in je servers te injecteren.
2. SMTP-injectie naar Port25 PowerMTA
3. SMTP Injectie Naar Momentum
Momentum ondersteunt verschillende manieren van berichtinvoer, waaronder API en SMTP. SMTP is hier de methode die wordt gebruikt, gericht op een host die al Momentum draait. We laten de configuratie onveranderd, aangezien deze al de mogelijkheid heeft om inkomende injecties van andere goedgekeurde hosts te accepteren.
Dit is een kleinere versie van een productie-opstelling, waar "generation" nodes en MTA nodes gescheiden zijn, maar toch nauw gekoppeld via een private VLAN en load-balancers, die interne SMTP-injectieverkeer dragen.

De S/MIME-tools zijn geïnstalleerd zoals voorheen, en we zullen berichten injecteren naar het adres van de SMTP-host (MTA):
export SMTP_HOST=xx.xx.xx.xx # stel hier je eigen MTA / VIP-adres in
Zoals voorheen hebben we de privésleutel van de afzender (steve@thetucks.com.pem) en de openbare sleutel van de ontvanger (steve.tuck@sparkpost.com.crt) al aanwezig op de "generation" node. De eerste paar regels van het berichtbestand komen overeen met deze adressen.
We sturen het bericht vanaf de "generation" node met precies hetzelfde commando als voorheen, en het bericht verschijnt in de inbox.
./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp
Zoals je zou verwachten, leeft S/MIME ook gelukkig samen met Momentum's DKIM signing.
4. SMTP-injectie richting SparkPost
In deel 2 gebruikten we de SparkPost transmissies REST API om berichten te injecteren. Natuurlijk is het ook mogelijk om berichten in te voeren bij SparkPost via SMTP. We stelden de omgevingsvariabelen als volgt in:
export SMTP_PASSWORD=<<YOUR API KEY HERE>> export SMTP_HOST=smtp.sparkpostmail.com export SMTP_USER=SMTP_Injection export SMTP_PORT=587
Als je de SparkPost EU-gehoste service gebruikt, stel dan SMTP_HOST in als smtp.eu.sparkpostmail.com.
(Bekijk hier voor meer opties – bijvoorbeeld kun je injecteren op poort 2525 in plaats van 587.)
De onderstaande output toont dat STARTTLS wordt gebruikt, samen met de gebruikersnaam en het wachtwoord.
./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp
Je ziet:
Geopende SMTP-verbinding (STARTTLS) naar smtp.sparkpostmail.com, poort 587, gebruiker="SMTP_Injection", wachtwoord="****************************************" Verzenden tests/fancy-HTML-to-smt.eml Van: Steve <steve@thetucks.com> Aan: SteveT <steve.tuck@sparkpost.com> OK - in 0.057 seconden
Het wachtwoord wordt afgedrukt met vervangende *** tekens, zodat je de privacy van je sleutel niet in gevaar brengt als iemand over je schouder kijkt.
Je Inloggegevens Beveiligen
Merk op dat omgevingsvariabelen kunnen worden ingesteld in een shellscriptbestand of iets dergelijks, om opnieuw typen te besparen. Als je dat doet, zorg dan goed voor je wachtwoorden/API-sleutels door de toegang tot dat bestand alleen tot jezelf te beperken. Als je bijvoorbeeld inloggegevens setup bestand my_envs.sh heet, voer dan uit:
chmod 0700 my_envs.sh
SMTP-Gerelateerde Waarschuwingen Die Je Kunt Zien
SparkPost’s SMTP-injectie is behoorlijk streng, zoals je van een openbare dienst zou verwachten. Als je het SMTP-poortnummer niet hebt ingesteld, zie je een waarschuwing:
{'bob.lumreeker@gmail.com': (550, b'5.7.1 doorzending geweigerd')}
Als je de SMTP-gebruikersnaam niet hebt ingesteld of het wachtwoord niet hebt ingesteld, zie je:
(530, b'5.7.1 Autorisatie vereist. Ref. https://developers.sparkpost.com/api/index#header-smtp-relay-endpoints', 'steve@thetucks.com')
Deze foutmeldingen worden simpelweg gerapporteerd zoals ze zijn door de Python SMTP-bibliotheek, vandaar de opmaak.
Welke is sneller – SMTP of API?
Eerlijk gezegd is het onwaarschijnlijk dat S/MIME een veelgebruikte use-case wordt, maar het hebben van hetzelfde hulpmiddel met twee uitvoeropties vroeg er gewoon om dat we een race zouden houden!
Het “Avocado” e-mail testbestand dat hier wordt gebruikt is ongeveer 19KB. Het herhalen van de tests 10 keer via een bash-loop toonde aan dat de gemiddelde tijden vergelijkbaar waren voor SMTP en API, rond de 60 milliseconden per bericht, wat behoorlijk snel is. In dit geval hebben we geïnjecteerd vanaf een medium EC2-instantie in dezelfde hostingregio als SparkPost.com, wat een goede manier is om de netwerk round-trip-tijden laag te houden.
Bij het herhalen hiervan met een groter testbestand (577KB) duurde de API ongeveer 200 milliseconden, terwijl SMTP 280 milliseconden per bericht kostte – nog steeds indrukwekkend voor een bestandsgrootte die 30x groter is. Natuurlijk kan uw ervaring variëren, afhankelijk van locatie, internetcongestie enzovoort, maar prestaties zullen waarschijnlijk geen probleem zijn.
Als u echt maximale prestaties nodig heeft, zou een goed startpunt zijn om een bepaald aantal gelijktijdige injectieprocessen/sessies te lanceren volgens onze transmissie best practices aanbevelingen – bijvoorbeeld vanuit een supervisortaak.
Samenvattend ...
We hebben gezien hoe de op de SparkPost API gebaseerde tool die in Deel 2 wordt gebruikt, is bijgewerkt om ondersteuning te bieden voor SMTP-injectie om on-premises MTA's zoals Port25 PowerMTA en Momentum te ondersteunen in verschillende configuraties, evenals met SparkPost.
Dat is het voor nu! Veel plezier met verzenden.