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 berichtinjectie, inclusief een bestand “pickup” directory, SMTP en een API. SMTP is de methode die hier wordt gebruikt.

Om de eenvoudigst mogelijke installatie te illustreren, zullen we de S/MIME-tools op dezelfde server als PowerMTA installeren. We injecteren berichten naar de listener, die standaard open is op TCP-poort 25, waarbij alleen lokaal verkeer wordt geaccepteerd.

export SMTP_HOST=localhost

(Als je die stap vergeet, zie je: “Omgevingsvariabele SMTP_HOST niet ingesteld – stopt” wanneer je het probeert uit te voeren.)

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 verzenden het bericht met:

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

We zien:

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

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

Extra functie: DKIM met PowerMTA

DKIM is vrij eenvoudig te configureren en werkt goed samen met S/MIME. De stappen zijn:

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

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

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

  • Voeg het volgende toe aan mijn /etc/pmta/config en start de pmta-service opnieuw. (Hier worden deze richtlijnen op wereldwijde schaal geschreven; op een productieomgeving kunt u ervoor kiezen ze in plaats daarvan onder een virtuele mta toe te voegen.)

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

Het DNS-record wordt goedgekeurd via MX Toolbox, en DKIM is nu actief.

PowerMTA ondersteunt verschillende manieren van berichtinjectie, inclusief een bestand “pickup” directory, SMTP en een API. SMTP is de methode die hier wordt gebruikt.

Om de eenvoudigst mogelijke installatie te illustreren, zullen we de S/MIME-tools op dezelfde server als PowerMTA installeren. We injecteren berichten naar de listener, die standaard open is op TCP-poort 25, waarbij alleen lokaal verkeer wordt geaccepteerd.

export SMTP_HOST=localhost

(Als je die stap vergeet, zie je: “Omgevingsvariabele SMTP_HOST niet ingesteld – stopt” wanneer je het probeert uit te voeren.)

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 verzenden het bericht met:

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

We zien:

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

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

Extra functie: DKIM met PowerMTA

DKIM is vrij eenvoudig te configureren en werkt goed samen met S/MIME. De stappen zijn:

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

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

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

  • Voeg het volgende toe aan mijn /etc/pmta/config en start de pmta-service opnieuw. (Hier worden deze richtlijnen op wereldwijde schaal geschreven; op een productieomgeving kunt u ervoor kiezen ze in plaats daarvan onder een virtuele mta toe te voegen.)

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

Het DNS-record wordt goedgekeurd via MX Toolbox, en DKIM is nu actief.

PowerMTA ondersteunt verschillende manieren van berichtinjectie, inclusief een bestand “pickup” directory, SMTP en een API. SMTP is de methode die hier wordt gebruikt.

Om de eenvoudigst mogelijke installatie te illustreren, zullen we de S/MIME-tools op dezelfde server als PowerMTA installeren. We injecteren berichten naar de listener, die standaard open is op TCP-poort 25, waarbij alleen lokaal verkeer wordt geaccepteerd.

export SMTP_HOST=localhost

(Als je die stap vergeet, zie je: “Omgevingsvariabele SMTP_HOST niet ingesteld – stopt” wanneer je het probeert uit te voeren.)

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 verzenden het bericht met:

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

We zien:

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

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

Extra functie: DKIM met PowerMTA

DKIM is vrij eenvoudig te configureren en werkt goed samen met S/MIME. De stappen zijn:

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

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

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

  • Voeg het volgende toe aan mijn /etc/pmta/config en start de pmta-service opnieuw. (Hier worden deze richtlijnen op wereldwijde schaal geschreven; op een productieomgeving kunt u ervoor kiezen ze in plaats daarvan onder een virtuele mta toe te voegen.)

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

Het DNS-record wordt goedgekeurd via MX Toolbox, en DKIM is nu actief.

3. SMTP Injectie Naar Momentum

Momentum ondersteunt verschillende manieren van berichteninvoer, waaronder API en SMTP. SMTP is de methode die hier wordt gebruikt, gericht op een host die al Momentum draait. We laten de configuratie ervan ongewijzigd, omdat 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 nauw verbonden via een privé-VLAN en load-balancers, die interne SMTP-injectietrafiek vervoeren.




De S/MIME-tools zijn zoals eerder geïnstalleerd, 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 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 regels van het berichtbestand komen overeen met deze adressen.

We verzenden het bericht vanaf de "generation" node met exact 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, bestaat S/MIME ook vreedzaam naast 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.

Meld je aan voor onze 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.

Meld je aan voor onze 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.

Meld je aan voor onze 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.

Pinterest-logo
Uber-logo
Square logo
Adobe-logo
Meta-logo
PayPal-logo

Bedrijf

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.

Uber-logo
Square logo
Adobe-logo
Meta-logo

Bedrijf

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.

Uber-logo
Adobe-logo
Meta-logo

Bereik

Grow

Manage

Automate

Bronnen

Bedrijf

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.