Bereik

Grow

Manage

Automate

Bereik

Grow

Manage

Automate

S/MIME Deel 3: Plug and Play voor On-Premises Veilige E-mail

E-mail

1 min read

S/MIME Deel 3: Plug and Play voor On-Premises Veilige E-mail

E-mail

1 min read

S/MIME Deel 3: Plug and Play voor On-Premises Veilige E-mail

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

PowerMTA ondersteunt verschillende manieren van berichtinvoer, waaronder een bestand "pickup" directory, SMTP en een API. SMTP is de methode die hier wordt gebruikt.

Om de eenvoudigst mogelijke setup te illustreren, installeren we de S/MIME-tools op dezelfde server als PowerMTA. We voeren berichten in bij de luisteraar, die standaard geopend is op TCP-poort 25 en alleen lokaal verkeer accepteert.

export SMTP_HOST=localhost

(Als u die stap vergeet, ziet u: "Environment var SMTP_HOST not set – stopping" wanneer u probeert te runnen.)

We hebben de privésleutel van de verzender (steve@thetucks.com.pem) en de openbare sleutel van de ontvanger (steve.tuck@sparkpost.com.crt) al aanwezig. De eerste paar regels van het berichtbestand zijn:

To: SteveT <steve.tuck@sparkpost.com> From: Steve <steve@thetucks.com> Subject: Dit is een bericht gemaakt met HEML MIME-Version: 1.0 Content-Type: text/html; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit

We sturen het bericht met:

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp

We zien:

SMTP-verbinding geopend (normaal) naar localhost, poort 25, gebruiker="", wachtwoord="" Verzenden tests/fancy-HTML-to-smt.eml Van: Steve <steve@thetucks.com> Aan: SteveT <steve.tuck@sparkpost.com> OK - in 0.028 seconden

Het bericht arriveert snel in de inbox en meldt in Mac Mail als ondertekend en versleuteld.

Email from Avocado showing a marketing message with security features enabled, displayed in Mac Mail as signed and encrypted.

Bonus functie: DKIM met PowerMTA

DKIM is vrij eenvoudig in te stellen en coëxisteert gelukkig met S/MIME. De stappen zijn:

  • Gebruik de PowerMTA DKIM Wizard-site om een privésleutel voor het verzendende domein te maken (in mijn geval, mypmta.thetucks.com.pem) en de publieke DNS TXT-record inhoud.

  • Stel het DNS TXT-record in, met een gekozen selector. Bijvoorbeeld, ik gebruikte selector pmta201811. Geldige selector tekens zijn hier gedefinieerd.

  • Plaats het mypmta.thetucks.com.pem-bestand op de server in directory /etc/pmta .

  • Voeg het volgende toe aan mijn /etc/pmta/config en start de pmta-service opnieuw. (Hier zijn deze richtlijnen op globale scope geschreven; op een productiesysteem kunt u er de voorkeur aan geven ze onder een virtuele-mta toe te voegen.)

host-name thetucks.com domain-key pmta201811,*,/etc/pmta/mypmta.thetucks.com.pem <domain *>    dkim-sign yes </domain>

Het DNS-record is succesvol via MX Toolbox gecontroleerd en DKIM is nu actief.

MX Toolbox interface showing successful DKIM record verification with all tests passing for email authentication security.

PowerMTA ondersteunt verschillende manieren van berichtinvoer, waaronder een bestand "pickup" directory, SMTP en een API. SMTP is de methode die hier wordt gebruikt.

Om de eenvoudigst mogelijke setup te illustreren, installeren we de S/MIME-tools op dezelfde server als PowerMTA. We voeren berichten in bij de luisteraar, die standaard geopend is op TCP-poort 25 en alleen lokaal verkeer accepteert.

export SMTP_HOST=localhost

(Als u die stap vergeet, ziet u: "Environment var SMTP_HOST not set – stopping" wanneer u probeert te runnen.)

We hebben de privésleutel van de verzender (steve@thetucks.com.pem) en de openbare sleutel van de ontvanger (steve.tuck@sparkpost.com.crt) al aanwezig. De eerste paar regels van het berichtbestand zijn:

To: SteveT <steve.tuck@sparkpost.com> From: Steve <steve@thetucks.com> Subject: Dit is een bericht gemaakt met HEML MIME-Version: 1.0 Content-Type: text/html; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit

We sturen het bericht met:

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp

We zien:

SMTP-verbinding geopend (normaal) naar localhost, poort 25, gebruiker="", wachtwoord="" Verzenden tests/fancy-HTML-to-smt.eml Van: Steve <steve@thetucks.com> Aan: SteveT <steve.tuck@sparkpost.com> OK - in 0.028 seconden

Het bericht arriveert snel in de inbox en meldt in Mac Mail als ondertekend en versleuteld.

Email from Avocado showing a marketing message with security features enabled, displayed in Mac Mail as signed and encrypted.

Bonus functie: DKIM met PowerMTA

DKIM is vrij eenvoudig in te stellen en coëxisteert gelukkig met S/MIME. De stappen zijn:

  • Gebruik de PowerMTA DKIM Wizard-site om een privésleutel voor het verzendende domein te maken (in mijn geval, mypmta.thetucks.com.pem) en de publieke DNS TXT-record inhoud.

  • Stel het DNS TXT-record in, met een gekozen selector. Bijvoorbeeld, ik gebruikte selector pmta201811. Geldige selector tekens zijn hier gedefinieerd.

  • Plaats het mypmta.thetucks.com.pem-bestand op de server in directory /etc/pmta .

  • Voeg het volgende toe aan mijn /etc/pmta/config en start de pmta-service opnieuw. (Hier zijn deze richtlijnen op globale scope geschreven; op een productiesysteem kunt u er de voorkeur aan geven ze onder een virtuele-mta toe te voegen.)

host-name thetucks.com domain-key pmta201811,*,/etc/pmta/mypmta.thetucks.com.pem <domain *>    dkim-sign yes </domain>

Het DNS-record is succesvol via MX Toolbox gecontroleerd en DKIM is nu actief.

MX Toolbox interface showing successful DKIM record verification with all tests passing for email authentication security.

PowerMTA ondersteunt verschillende manieren van berichtinvoer, waaronder een bestand "pickup" directory, SMTP en een API. SMTP is de methode die hier wordt gebruikt.

Om de eenvoudigst mogelijke setup te illustreren, installeren we de S/MIME-tools op dezelfde server als PowerMTA. We voeren berichten in bij de luisteraar, die standaard geopend is op TCP-poort 25 en alleen lokaal verkeer accepteert.

export SMTP_HOST=localhost

(Als u die stap vergeet, ziet u: "Environment var SMTP_HOST not set – stopping" wanneer u probeert te runnen.)

We hebben de privésleutel van de verzender (steve@thetucks.com.pem) en de openbare sleutel van de ontvanger (steve.tuck@sparkpost.com.crt) al aanwezig. De eerste paar regels van het berichtbestand zijn:

To: SteveT <steve.tuck@sparkpost.com> From: Steve <steve@thetucks.com> Subject: Dit is een bericht gemaakt met HEML MIME-Version: 1.0 Content-Type: text/html; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit

We sturen het bericht met:

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp

We zien:

SMTP-verbinding geopend (normaal) naar localhost, poort 25, gebruiker="", wachtwoord="" Verzenden tests/fancy-HTML-to-smt.eml Van: Steve <steve@thetucks.com> Aan: SteveT <steve.tuck@sparkpost.com> OK - in 0.028 seconden

Het bericht arriveert snel in de inbox en meldt in Mac Mail als ondertekend en versleuteld.

Email from Avocado showing a marketing message with security features enabled, displayed in Mac Mail as signed and encrypted.

Bonus functie: DKIM met PowerMTA

DKIM is vrij eenvoudig in te stellen en coëxisteert gelukkig met S/MIME. De stappen zijn:

  • Gebruik de PowerMTA DKIM Wizard-site om een privésleutel voor het verzendende domein te maken (in mijn geval, mypmta.thetucks.com.pem) en de publieke DNS TXT-record inhoud.

  • Stel het DNS TXT-record in, met een gekozen selector. Bijvoorbeeld, ik gebruikte selector pmta201811. Geldige selector tekens zijn hier gedefinieerd.

  • Plaats het mypmta.thetucks.com.pem-bestand op de server in directory /etc/pmta .

  • Voeg het volgende toe aan mijn /etc/pmta/config en start de pmta-service opnieuw. (Hier zijn deze richtlijnen op globale scope geschreven; op een productiesysteem kunt u er de voorkeur aan geven ze onder een virtuele-mta toe te voegen.)

host-name thetucks.com domain-key pmta201811,*,/etc/pmta/mypmta.thetucks.com.pem <domain *>    dkim-sign yes </domain>

Het DNS-record is succesvol via MX Toolbox gecontroleerd en DKIM is nu actief.

MX Toolbox interface showing successful DKIM record verification with all tests passing for email authentication security.

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.


Diagram showing email flow from a generation server to on-premises MTA (Mail Transfer Agent) via SMTP protocol.


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-verzendingen REST API om berichten te verzenden. Natuurlijk is het ook mogelijk om berichten in SparkPost te injecteren met behulp van SMTP. We stellen de omgevingsvariabelen als volgt in:

export SMTP_PASSWORD=<<UW API-SLEUTEL HIER>> export SMTP_HOST=smtp.sparkpostmail.com export SMTP_USER=SMTP_Injection export SMTP_PORT=587

Als u de SparkPost EU-gehoste service gebruikt, stel SMTP_HOST dan in als smtp.eu.sparkpostmail.com.
(Zie hier voor meer opties – bijvoorbeeld, u kunt injecteren op poort 2525 in plaats van 587.)

De onderstaande uitvoer 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 zult zien:

Opende 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> Naar: SteveT <steve.tuck@sparkpost.com> OK - in 0,057 seconden

Het wachtwoord wordt afgedrukt met vervangende *** tekens, zodat u de privacy van uw sleutel niet in gevaar brengt als iemand over uw schouder meekijkt.

Het beveiligen van uw inloggegevens

Merk op dat omgevingsvariabelen kunnen worden opgezet in een shell-scriptbestand of vergelijkbaar, om opnieuw typen te besparen. Als u dat doet, let dan goed op uw wachtwoorden/API-sleutels door de toegang tot dat bestand alleen voor uzelf te beperken. Als uw opstartbestand voor inloggegevens bijvoorbeeld my_envs.sh heet, voer dan uit:

chmod 0700 my_envs.sh

SMTP-gerelateerde waarschuwingen die u mogelijk ziet

De SMTP-injectie van SparkPost is vrij streng, zoals u zou verwachten van een openbare dienst. Als u het SMTP-poortnummer niet heeft ingesteld, ziet u een waarschuwing:

{'bob.lumreeker@gmail.com': (550, b'5.7.1 relaying denied')}

Als u de SMTP-gebruikersnaam niet heeft ingesteld of het wachtwoord niet heeft ingesteld, ziet u:

(530, b'5.7.1 Authorization required. Ref. https://developers.sparkpost.com/api/index#header-smtp-relay-endpoints', 'steve@thetucks.com')

Deze foutmeldingen worden eenvoudigweg als-is gerapporteerd vanuit 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.

Laten we je in contact brengen met een Bird-expert.
Bekijk de volledige kracht van de Bird in 30 minuten.

Door te verzenden, ga je ermee akkoord dat Bird contact met je mag opnemen over onze producten en diensten.

U kunt zich op elk moment afmelden. Zie Bird's Privacyverklaring voor details over gegevensverwerking.

Nieuwsbrief

Blijf op de hoogte met Bird via wekelijkse updates in je inbox.

Door te verzenden, ga je ermee akkoord dat Bird contact met je mag opnemen over onze producten en diensten.

U kunt zich op elk moment afmelden. Zie Bird's Privacyverklaring voor details over gegevensverwerking.

Laten we je in contact brengen met een Bird-expert.
Bekijk de volledige kracht van de Bird in 30 minuten.

Door te verzenden, ga je ermee akkoord dat Bird contact met je mag opnemen over onze producten en diensten.

U kunt zich op elk moment afmelden. Zie Bird's Privacyverklaring voor details over gegevensverwerking.

Nieuwsbrief

Blijf op de hoogte met Bird via wekelijkse updates in je inbox.

Door te verzenden, ga je ermee akkoord dat Bird contact met je mag opnemen over onze producten en diensten.

U kunt zich op elk moment afmelden. Zie Bird's Privacyverklaring voor details over gegevensverwerking.

Laten we je in contact brengen met een Bird-expert.
Bekijk de volledige kracht van de Bird in 30 minuten.

Door te verzenden, ga je ermee akkoord dat Bird contact met je mag opnemen over onze producten en diensten.

U kunt zich op elk moment afmelden. Zie Bird's Privacyverklaring voor details over gegevensverwerking.

R

Bereik

G

Grow

M

Manage

A

Automate

Nieuwsbrief

Blijf op de hoogte met Bird via wekelijkse updates in je inbox.

Door te verzenden, ga je ermee akkoord dat Bird contact met je mag opnemen over onze producten en diensten.

U kunt zich op elk moment afmelden. Zie Bird's Privacyverklaring voor details over gegevensverwerking.