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

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

Om de eenvoudigst mogelijke installatie te illustreren, installeren we de S/MIME-tools op dezelfde server als PowerMTA. We injecteren berichten naar de listener, die standaard open staat 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 draaien.)

We hebben de privésleutel van de afzender (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:

Aan: SteveT <steve.tuck@sparkpost.com> Van: Steve <steve@thetucks.com> Onderwerp: 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 versturen het bericht met:

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

We zien:

Opened SMTP connection (plain)  
Host: localhost  
Port: 25  
User: ""  
Password: ""  
Sending: tests/fancy-HTML-to-smt.eml  
From: Steve <steve@thetucks.com>  
To: SteveT <steve.tuck@sparkpost.com>  
OK - in 0.028 seconds

Het bericht komt snel binnen in de inbox en wordt in Mac Mail weergegeven als ondertekend en versleuteld.

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

Bonusfunctie: DKIM met PowerMTA

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

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

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

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

  • Voeg het volgende toe aan mijn /etc/pmta/config en herstart de pmta-service. (Hier zijn deze richtlijnen op globale scope geschreven; op een productiesysteem kunt u ze wellicht liever toevoegen onder een virtual-mta.)

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

Het DNS-record wordt goedgekeurd via MX Toolbox 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 "pickup"-directory, SMTP en een API. SMTP is de methode die hier wordt gebruikt.

Om de eenvoudigst mogelijke installatie te illustreren, installeren we de S/MIME-tools op dezelfde server als PowerMTA. We injecteren berichten naar de listener, die standaard open staat 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 draaien.)

We hebben de privésleutel van de afzender (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:

Aan: SteveT <steve.tuck@sparkpost.com> Van: Steve <steve@thetucks.com> Onderwerp: 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 versturen het bericht met:

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

We zien:

Opened SMTP connection (plain)  
Host: localhost  
Port: 25  
User: ""  
Password: ""  
Sending: tests/fancy-HTML-to-smt.eml  
From: Steve <steve@thetucks.com>  
To: SteveT <steve.tuck@sparkpost.com>  
OK - in 0.028 seconds

Het bericht komt snel binnen in de inbox en wordt in Mac Mail weergegeven als ondertekend en versleuteld.

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

Bonusfunctie: DKIM met PowerMTA

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

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

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

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

  • Voeg het volgende toe aan mijn /etc/pmta/config en herstart de pmta-service. (Hier zijn deze richtlijnen op globale scope geschreven; op een productiesysteem kunt u ze wellicht liever toevoegen onder een virtual-mta.)

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

Het DNS-record wordt goedgekeurd via MX Toolbox 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 "pickup"-directory, SMTP en een API. SMTP is de methode die hier wordt gebruikt.

Om de eenvoudigst mogelijke installatie te illustreren, installeren we de S/MIME-tools op dezelfde server als PowerMTA. We injecteren berichten naar de listener, die standaard open staat 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 draaien.)

We hebben de privésleutel van de afzender (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:

Aan: SteveT <steve.tuck@sparkpost.com> Van: Steve <steve@thetucks.com> Onderwerp: 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 versturen het bericht met:

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

We zien:

Opened SMTP connection (plain)  
Host: localhost  
Port: 25  
User: ""  
Password: ""  
Sending: tests/fancy-HTML-to-smt.eml  
From: Steve <steve@thetucks.com>  
To: SteveT <steve.tuck@sparkpost.com>  
OK - in 0.028 seconds

Het bericht komt snel binnen in de inbox en wordt in Mac Mail weergegeven als ondertekend en versleuteld.

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

Bonusfunctie: DKIM met PowerMTA

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

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

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

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

  • Voeg het volgende toe aan mijn /etc/pmta/config en herstart de pmta-service. (Hier zijn deze richtlijnen op globale scope geschreven; op een productiesysteem kunt u ze wellicht liever toevoegen onder een virtual-mta.)

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

Het DNS-record wordt goedgekeurd via MX Toolbox 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, 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.


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


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:

export SMTP_PASSWORD=<<YOUR_API_KEY_HERE>

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:

Opened SMTP connection (STARTTLS)  
Host: smtp.sparkpostmail.com  
Port: 587  
User: "SMTP_Injection"  
Password: "****************************************"  
Sending: tests/fancy-HTML-to-smt.eml  
From: Steve <steve@thetucks.com>  
To: SteveT <steve.tuck@sparkpost.com>  
OK - in 0.057 seconds

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:

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

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.

Samenvattend ...

We hebben gezien hoe de SparkPost API-gebaseerde tool die in Deel 2 wordt gebruikt, is bijgewerkt om SMTP-injectie te ondersteunen voor on-premises MTAs zoals Port25 PowerMTA en Momentum in een verscheidenheid aan 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.

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.