
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 tour van S/MIME, waarbij we keken naar het ondertekenen en versleutelen van onze berichtstromen over een reeks e-mailcliënten. Voor organisaties die S/MIME-versleuteling implementeren, wordt het begrijpen van hoe je ontvanger publieke sleutels efficiënt kunt verzamelen cruciaal voor schaalbare, veilige e-mailoperaties. Deel 2 leidde ons door een eenvoudig commandoregelhulpmiddel om e-mails te ondertekenen en versleutelen, en deze vervolgens via SparkPost te verzenden.
In dit deel kijken we hoe het hulpmiddel kan worden aangepast om e-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, inclusief API en SMTP. SMTP is de methode die hier wordt gebruikt, naar een host die al Momentum draait. We laten de configuratie ongewijzigd, omdat het al de mogelijkheid heeft om inkomende invoer van andere goedgekeurde hosts te accepteren.
Dit is een kleinere versie van een productie-opstelling, waar "generation"-nodes en MTA-nodes gescheiden zijn, maar nauw verbonden via een privaat VLAN en load-balancers, die interne SMTP-invoerverkeer dragen.

De S/MIME-tools zijn zoals eerder geïnstalleerd, en we zullen berichten invoeren naar het adres van de SMTP-host (MTA):
export SMTP_HOST=xx.xx.xx.xx # stel hier je eigen MTA / VIP-adres in
Zoals eerder, 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 berichtenbestand komen overeen met deze adressen.
We verzenden het bericht vanaf de "generation"-node met exact hetzelfde commando als eerder, en het bericht verschijnt in de inbox.
./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp
Zoals je zou verwachten, co-existeert S/MIME ook probleemloos met Momentum's DKIM signing.
4. SMTP-injectie richting SparkPost
In deel 2 gebruikten we de SparkPost transmissions REST API om berichten in te voeren. Natuurlijk is het ook mogelijk om berichten in te voeren in SparkPost met behulp van SMTP. We stelden de omgevingsvariabelen zo in:
Als u de SparkPost EU-gehoste service gebruikt, stel dan SMTP_HOST in als smtp.eu.sparkpostmail.com.
(Zie hier voor meer opties – bijvoorbeeld kunt u injecteren op poort 2525 in plaats van 587.)
De onderstaande uitvoer laat zien dat STARTTLS wordt gebruikt, samen met de gebruikersnaam en het wachtwoord.
./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp
U zult zien:
Het wachtwoord wordt afgedrukt met vervangende *** tekens, zodat uw sleutel niet wordt gecompromitteerd als iemand over uw schouder meekijkt.
Uw Referenties Beveiligen
Let op dat omgevingsvariabelen kunnen worden ingesteld in een shellscriptbestand of vergelijkbaar, om herhaaldelijk typen te besparen. Zorg ervoor dat u uw wachtwoorden/API-sleutels beveiligt door toegang tot dat bestand alleen voor uzelf te beperken. Als uw referentie-instellingsbestand bijvoorbeeld my_envs.sh heet, voer dan uit:
chmod 0700 my_envs.sh
SMTP-Gerelateerde Waarschuwingen Die U Kunt Zien
De SMTP-injectie van SparkPost is vrij streng, zoals u zou verwachten van een openbare dienst. Als u het SMTP-poortnummer niet hebt ingesteld, ziet u een waarschuwing:
{'bob.lumreeker@gmail.com': (550, b'5.7.1 doorschakeling geweigerd')}
Als u de SMTP-gebruikersnaam niet hebt ingesteld of het wachtwoord niet hebt ingesteld, ziet u:
Deze foutmeldingen worden simpelweg gerapporteerd zoals ze zijn uit 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.