
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 berichtstromen in verschillende e-mailclients. Voor organisaties die S/MIME-encryptie implementeren, wordt het belangrijk om te begrijpen hoe je openbare sleutels van ontvangers efficiënt kunt verzamelen voor schaalbare beveiligde e-mailoperaties. Deel 2 nam ons mee door een eenvoudig opdrachtregelhulpmiddel om e-mails te ondertekenen en te versleutelen en deze vervolgens via SparkPost te verzenden.
In dit deel bekijken we hoe het hulpmiddel kan worden aangepast om mailstromen in on-premises platforms zoals Port25 PowerMTA en Momentum te injecteren.
OK – laten we beginnen!
1. Aan de slag
Het installeren van de tool, het verkrijgen van uw sleutels, enz. is precies hetzelfde als voorheen. Wanneer je een on-premises e-mailsysteem gebruikt zoals PowerMTA of Momentum, ben je al verantwoordelijk voor het instellen van verzenddomeinen, DKIM-sleutels, enz. Organisaties die on-premises systemen gebruiken, moeten ook vaak uitdagingen met betrekking tot e-mailarchiveringssystemen aanpakken voor naleving van regelgeving en vereisten voor gegevensopslag. Wat we nu moeten doen, is een manier bieden om de volledig gevormde S/MIME-berichten in uw 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 in SparkPost met SMTP. We hebben de omgevingsvariabelen zo ingesteld:
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.
(Zie hier voor meer opties – bijvoorbeeld, je kunt injecteren op poort 2525 in plaats van 587.)
De onderstaande output toont aan dat STARTTLS wordt gebruikt, samen met de gebruikersnaam en wachtwoord.
./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp
Je zult zien:
SMTP verbinding geopend (STARTTLS) naar smtp.sparkpostmail.com, poort 587, gebruiker="SMTP_Injection", wachtwoord="****************************************" Verzenden van 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 weergegeven met vervangende *** karakters, zodat je de privacy van je sleutel niet in gevaar brengt als iemand meekijkt.
Je Inloggegevens Beveiligen
Merk op dat omgevingsvariabelen kunnen worden opgezet in een shell-scriptbestand of iets dergelijks, om herhaling te voorkomen. Als je dat doet, zorg dan dat je je wachtwoorden/API-sleutels beveiligt door de toegang tot dat bestand alleen tot jezelf te beperken. Bijvoorbeeld, als je inloggegevensbestand my_envs.sh heet, voer dan uit:
chmod 0700 my_envs.sh
SMTP-Gerelateerde Waarschuwingen Die Je Kunt Tegenkomen
SparkPost’s SMTP-injectie is vrij streng, zoals je zou verwachten van een openbare dienst. Als je het SMTP-poortnummer niet hebt ingesteld, zie je een waarschuwing:
{'bob.lumreeker@gmail.com': (550, b'5.7.1 doorgifte geweigerd')}
Als je de SMTP-gebruikersnaam niet hebt ingesteld of het wachtwoord niet hebt ingesteld, zie je:
(530, b'5.7.1 Autorisatie vereist. Zie https://developers.sparkpost.com/api/index#header-smtp-relay-endpoints', 'steve@thetucks.com')
Deze foutmeldingen worden simpelweg onveranderd weergegeven vanuit de Python SMTP-bibliotheek, vandaar de opmaak.
Welke is sneller – SMTP of API?
Eerlijk gezegd, is S/MIME waarschijnlijk geen gebruiksgeval met een hoog volume, maar het was slechts een kwestie van tijd voordat we met hetzelfde gereedschap en twee uitvoeropties een race zouden houden!
Het "Avocado" e-mail testbestand dat hier is gebruikt, is ongeveer 19KB. Het herhalen van de tests 10 keer via een bash-lus 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 injecteerden we vanaf een medium EC2-instance in dezelfde hostingregio als SparkPost.com, wat een goede manier is om de netwerk-rondreis tijden laag te houden.
Bij herhaling met een groter testbestand (577KB), duurde de API ongeveer 200 milliseconden, terwijl SMTP 280 milliseconden per bericht duurde – nog steeds indrukwekkend voor een bestandsgrootte die 30x groter is. Natuurlijk kunnen uw resultaten variëren afhankelijk van locatie, internetcongestie etc., maar prestaties zullen waarschijnlijk geen probleem zijn.
Als u echt maximale prestaties nodig heeft, is een goed startpunt het lanceren van een vastgesteld aantal gelijktijdige injectieprocessen/sessies volgens onze transmissie best practices aanbevelingen – bijvoorbeeld vanuit een supervisor-taak.