Bereik

Grow

Manage

Automate

Bereik

Grow

Manage

Automate

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

Bird

1 dec 2019

E-mail

1 min read

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

Bird

1 dec 2019

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 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

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 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.

Samenvattend ...

We hebben gezien hoe de SparkPost API-gebaseerde tool gebruikt in Deel 2 is bijgewerkt om SMTP-injectie te ondersteunen voor on-premises MTA's zoals Port25 PowerMTA en Momentum in verschillende configuraties, evenals met SparkPost.

Dat is het voor nu! Veel succes met versturen.

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.

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.

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.