Erreichen

Grow

Manage

Automate

Erreichen

Grow

Manage

Automate

S/MIME Teil 3: Plug and Play für lokale sichere E-Mail

Vogel

01.12.2019

E-Mail

1 min read

S/MIME Teil 3: Plug and Play für lokale sichere E-Mail

Vogel

01.12.2019

E-Mail

1 min read

S/MIME Teil 3: Plug and Play für lokale sichere E-Mail

In diesem Teil werden wir uns ansehen, wie das Tool angepasst werden kann, um Mailströme in lokale Plattformen wie PowerMTA und Momentum zu injizieren.

In Teil 1 hatten wir eine kurze Tour durch S/MIME, bei der wir uns die Signierung und Verschlüsselung unserer Nachrichtenströme über eine Reihe von E-Mail-Clients angesehen haben. Für Organisationen, die S/MIME-Verschlüsselung implementieren, ist das effiziente Sammeln von Empfänger-Öffentlichen Schlüsseln entscheidend für skalierbare sichere E-Mail-Operationen. Teil 2 führte uns durch ein einfaches Befehlszeilentool, um E-Mails zu signieren und zu verschlüsseln und sie dann über SparkPost zu senden.

In diesem Teil werden wir uns ansehen, wie das Tool angepasst werden kann, um Mailströme in lokale Plattformen wie Port25 PowerMTA und Momentum einzuspeisen.

OK – los geht's!

1. Erste Schritte

Die Installation des Tools, das Abrufen Ihrer Schlüssel usw. ist genau wie zuvor. Wenn Sie ein lokales E-Mail-System wie PowerMTA oder Momentum verwenden, sind Sie bereits dafür verantwortlich, Sendedomänen, DKIM-Schlüssel usw. einzurichten. Organisationen, die lokale Systeme betreiben, müssen sich auch oft mit Herausforderungen bei der E-Mail-Archivierung befassen, um regulatorische Anforderungen und Anforderungen an die Datenaufbewahrung zu erfüllen. Was wir jetzt tun müssen, ist, eine Möglichkeit bereitzustellen, um die vollständig geformten S/MIME-Nachrichten in Ihre Server zu injizieren.

2. SMTP-Injektion Richtung Port25 PowerMTA

PowerMTA unterstützt verschiedene Methoden zur Nachrichteninjektion, einschließlich eines Datei-„Pickup“-Verzeichnisses, SMTP und einer API. SMTP ist die hier verwendete Methode.

Um die einfachste mögliche Einrichtung zu veranschaulichen, installieren wir die S/MIME-Tools auf demselben Server wie PowerMTA. Wir injizieren Nachrichten an den Listener, der standardmäßig auf TCP-Port 25 geöffnet ist und nur lokalen Datenverkehr akzeptiert.

export SMTP_HOST=localhost

(Wenn Sie diesen Schritt vergessen, sehen Sie: „Environment var SMTP_HOST not set – stopping“, wenn Sie versuchen, es auszuführen.)

Wir haben den privaten Schlüssel des Absenders (steve@thetucks.com.pem) und den öffentlichen Schlüssel des Empfängers (steve.tuck@sparkpost.com.crt) bereits vorhanden. Die ersten Zeilen der Nachrichten-Datei lauten:

An: SteveT <steve.tuck@sparkpost.com> Von: Steve <steve@thetucks.com> Betreff: Dies ist eine Nachricht, die mit HEML erstellt wurde MIME-Version: 1.0 Content-Type: text/html; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit

Wir senden die Nachricht mit:

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

Wir sehen:

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

Die Nachricht kommt schnell im Inbox an und zeigt in Mac Mail als signiert und verschlüsselt an.

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

Bonusfunktion: DKIM mit PowerMTA

DKIM ist recht einfach zu konfigurieren und koexistiert problemlos mit S/MIME. Die Schritte sind:

  • Verwenden Sie die PowerMTA DKIM Wizard-Seite, um den privaten Schlüssel der sendenden Domain (in meinem Fall, mypmta.thetucks.com.pem) und den öffentlichen Inhalt des DNS-TXT-Eintrags zu erstellen.

  • Richten Sie den DNS-TXT-Eintrag mit einem ausgewählten Selektor ein. Zum Beispiel habe ich den Selektor pmta201811 verwendet. Gültige Selektorzeichen sind hier definiert.

  • Legen Sie die mypmta.thetucks.com.pem -Datei auf dem Server im Verzeichnis /etc/pmta ab.

  • Fügen Sie das Folgende zu meiner /etc/pmta/config hinzu und starten Sie den pmta-Service neu. (Hier werden diese Direktiven im globalen Bereich geschrieben; auf einem Produktionssystem möchten Sie sie möglicherweise stattdessen unter einer virtuellen MTA hinzufügen.)

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

Der DNS-Eintrag überprüft sich über MX Toolbox einwandfrei, und DKIM ist jetzt aktiv.

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

PowerMTA unterstützt verschiedene Methoden zur Nachrichteninjektion, einschließlich eines Datei-„Pickup“-Verzeichnisses, SMTP und einer API. SMTP ist die hier verwendete Methode.

Um die einfachste mögliche Einrichtung zu veranschaulichen, installieren wir die S/MIME-Tools auf demselben Server wie PowerMTA. Wir injizieren Nachrichten an den Listener, der standardmäßig auf TCP-Port 25 geöffnet ist und nur lokalen Datenverkehr akzeptiert.

export SMTP_HOST=localhost

(Wenn Sie diesen Schritt vergessen, sehen Sie: „Environment var SMTP_HOST not set – stopping“, wenn Sie versuchen, es auszuführen.)

Wir haben den privaten Schlüssel des Absenders (steve@thetucks.com.pem) und den öffentlichen Schlüssel des Empfängers (steve.tuck@sparkpost.com.crt) bereits vorhanden. Die ersten Zeilen der Nachrichten-Datei lauten:

An: SteveT <steve.tuck@sparkpost.com> Von: Steve <steve@thetucks.com> Betreff: Dies ist eine Nachricht, die mit HEML erstellt wurde MIME-Version: 1.0 Content-Type: text/html; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit

Wir senden die Nachricht mit:

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

Wir sehen:

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

Die Nachricht kommt schnell im Inbox an und zeigt in Mac Mail als signiert und verschlüsselt an.

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

Bonusfunktion: DKIM mit PowerMTA

DKIM ist recht einfach zu konfigurieren und koexistiert problemlos mit S/MIME. Die Schritte sind:

  • Verwenden Sie die PowerMTA DKIM Wizard-Seite, um den privaten Schlüssel der sendenden Domain (in meinem Fall, mypmta.thetucks.com.pem) und den öffentlichen Inhalt des DNS-TXT-Eintrags zu erstellen.

  • Richten Sie den DNS-TXT-Eintrag mit einem ausgewählten Selektor ein. Zum Beispiel habe ich den Selektor pmta201811 verwendet. Gültige Selektorzeichen sind hier definiert.

  • Legen Sie die mypmta.thetucks.com.pem -Datei auf dem Server im Verzeichnis /etc/pmta ab.

  • Fügen Sie das Folgende zu meiner /etc/pmta/config hinzu und starten Sie den pmta-Service neu. (Hier werden diese Direktiven im globalen Bereich geschrieben; auf einem Produktionssystem möchten Sie sie möglicherweise stattdessen unter einer virtuellen MTA hinzufügen.)

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

Der DNS-Eintrag überprüft sich über MX Toolbox einwandfrei, und DKIM ist jetzt aktiv.

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

PowerMTA unterstützt verschiedene Methoden zur Nachrichteninjektion, einschließlich eines Datei-„Pickup“-Verzeichnisses, SMTP und einer API. SMTP ist die hier verwendete Methode.

Um die einfachste mögliche Einrichtung zu veranschaulichen, installieren wir die S/MIME-Tools auf demselben Server wie PowerMTA. Wir injizieren Nachrichten an den Listener, der standardmäßig auf TCP-Port 25 geöffnet ist und nur lokalen Datenverkehr akzeptiert.

export SMTP_HOST=localhost

(Wenn Sie diesen Schritt vergessen, sehen Sie: „Environment var SMTP_HOST not set – stopping“, wenn Sie versuchen, es auszuführen.)

Wir haben den privaten Schlüssel des Absenders (steve@thetucks.com.pem) und den öffentlichen Schlüssel des Empfängers (steve.tuck@sparkpost.com.crt) bereits vorhanden. Die ersten Zeilen der Nachrichten-Datei lauten:

An: SteveT <steve.tuck@sparkpost.com> Von: Steve <steve@thetucks.com> Betreff: Dies ist eine Nachricht, die mit HEML erstellt wurde MIME-Version: 1.0 Content-Type: text/html; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit

Wir senden die Nachricht mit:

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

Wir sehen:

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

Die Nachricht kommt schnell im Inbox an und zeigt in Mac Mail als signiert und verschlüsselt an.

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

Bonusfunktion: DKIM mit PowerMTA

DKIM ist recht einfach zu konfigurieren und koexistiert problemlos mit S/MIME. Die Schritte sind:

  • Verwenden Sie die PowerMTA DKIM Wizard-Seite, um den privaten Schlüssel der sendenden Domain (in meinem Fall, mypmta.thetucks.com.pem) und den öffentlichen Inhalt des DNS-TXT-Eintrags zu erstellen.

  • Richten Sie den DNS-TXT-Eintrag mit einem ausgewählten Selektor ein. Zum Beispiel habe ich den Selektor pmta201811 verwendet. Gültige Selektorzeichen sind hier definiert.

  • Legen Sie die mypmta.thetucks.com.pem -Datei auf dem Server im Verzeichnis /etc/pmta ab.

  • Fügen Sie das Folgende zu meiner /etc/pmta/config hinzu und starten Sie den pmta-Service neu. (Hier werden diese Direktiven im globalen Bereich geschrieben; auf einem Produktionssystem möchten Sie sie möglicherweise stattdessen unter einer virtuellen MTA hinzufügen.)

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

Der DNS-Eintrag überprüft sich über MX Toolbox einwandfrei, und DKIM ist jetzt aktiv.

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

3. SMTP-Injektion in Richtung Momentum

Momentum unterstützt verschiedene Mittel der Nachrichteneinspeisung, einschließlich API und SMTP. SMTP ist die hier genutzte Methode, für einen Host, auf dem Momentum bereits läuft. Wir lassen seine Konfiguration unverändert, da er bereits die Fähigkeit hat, eingehende Einspeisungen von anderen genehmigten Hosts zu akzeptieren.

Dies ist eine kleinere Version einer Produktionsumgebung, in der „Generierung“-Knoten und MTA-Knoten getrennt sind, jedoch über ein privates VLAN und Lastenausgleicher eng gekoppelt sind, die internen SMTP-Einspeiseverkehr transportieren.


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


Die S/MIME-Tools sind wie zuvor installiert und wir werden Nachrichten an die Adresse des SMTP-Hosts (MTA) einspeisen:

export SMTP_HOST=xx.xx.xx.xx # Geben Sie hier Ihre eigene MTA / VIP-Adresse ein

Wie zuvor haben wir den privaten Schlüssel des Absenders (steve@thetucks.com.pem) und den öffentlichen Schlüssel des Empfängers (steve.tuck@sparkpost.com.crt) bereits auf dem „Generierung“-Knoten vorhanden. Die ersten Zeilen der Nachrichtendatei entsprechen diesen Adressen.

Wir senden die Nachricht vom „Generierung“-Knoten mit genau demselben Befehl wie zuvor, und die Nachricht erscheint im Inbox.

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

Wie Sie erwarten würden, existiert S/MIME auch glücklich neben der DKIM-Signierung von Momentum.

4. SMTP-Injektion in Richtung SparkPost

In Teil 2 haben wir die SparkPost-Transmissions-REST-API verwendet, um Nachrichten zu übermitteln. Natürlich ist es auch möglich, Nachrichten über SMTP in SparkPost einzuspeisen. Wir setzen die Umgebungsvariablen wie folgt:

export SMTP_PASSWORD=<<YOUR_API_KEY_HERE>

Wenn Sie den EU-gehosteten Dienst von SparkPost verwenden, dann setzen Sie SMTP_HOST als smtp.eu.sparkpostmail.com.
(Siehe hier für weitere Optionen – zum Beispiel können Sie auf Port 2525 anstelle von 587 einspeisen.)

Die folgende Ausgabe zeigt, dass STARTTLS verwendet wird, zusammen mit dem Benutzernamen und dem Passwort.

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

Sie werden sehen:

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

Das Passwort wird mit Ersatz-***-Zeichen gedruckt, damit Ihre Schlüsseldaten nicht kompromittiert werden, falls jemand über Ihre Schulter schaut.

Sicherung Ihrer Anmeldedaten

Beachten Sie, dass Umgebungsvariablen in einer Shell-Skript-Datei oder Ähnlichem eingerichtet werden können, um erneutes Tippen zu vermeiden. Bitte sorgen Sie dafür, dass nur Sie auf diese Datei Zugriff haben, um Ihre Passwörter/API-Schlüssel zu schützen. Wenn Ihre Anmeldedaten-Datei zum Beispiel my_envs.sh heißt, dann führen Sie aus:

chmod 0700 my_envs.sh

SMTP-bezogene Warnungen, die Sie sehen könnten

Die SMTP-Injektion von SparkPost ist ziemlich streng, wie Sie es von einem öffentlichen Dienst erwarten würden. Wenn Sie die SMTP-Portnummer nicht gesetzt haben, werden Sie eine Warnung sehen:

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

Wenn Sie den SMTP-Benutzernamen oder das Passwort nicht gesetzt haben, sehen Sie:

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

Diese Fehlermeldungen werden einfach so gemeldet, wie sie von der Python SMTP-Bibliothek formatiert werden.

Welcher ist schneller – SMTP oder API?

Ehrlich gesagt, ist S/MIME wahrscheinlich kein Anwendungsfall mit hohem Volumen, aber das gleiche Tool mit zwei Ausgabeoptionen zu haben, war eine Gelegenheit für uns, ein Rennen zu veranstalten!

Die hier verwendete „Avocado“-E-Mail-Testdatei ist ca. 19KB groß. Das wiederholte Testen 10 Mal über eine Bash-Schleife zeigte, dass die durchschnittlichen Zeiten für SMTP und API ähnlich waren, etwa 60 Millisekunden pro Nachricht, was ziemlich schnell ist. In diesem Fall haben wir von einer mittleren EC2-Instanz in derselben Hosting-Region wie SparkPost.com gesendet, was eine gute Möglichkeit ist, die Netzwerk-Laufzeiten niedrig zu halten.

Wiederholen wir dies mit einer größeren Testdatei (577KB), dauerte die API etwa 200 Millisekunden, während SMTP 280 Millisekunden pro Nachricht benötigte – immer noch beeindruckend für eine Dateigröße, die 30-mal größer ist. Natürlich können je nach Standort, Internetüberlastung etc. die Werte variieren, aber die Leistung dürfte kein Problem darstellen.

Wenn Sie wirklich maximale Leistung benötigen, wäre ein guter Ausgangspunkt, eine festgelegte Anzahl von gleichzeitigen Injektionsprozessen/-sitzungen gemäß unseren Empfehlungen zu den besten Übertragungspraktiken zu starten – z.B. von einer Supervisor-Aufgabe.

Zusammenfassend ...

Wir haben gesehen, wie das auf der SparkPost-API basierende Tool in Teil 2 aktualisiert wurde, um SMTP-Injektion zu unterstützen, um lokale MTAs wie Port25 PowerMTA und Momentum in verschiedenen Konfigurationen sowie mit SparkPost zu unterstützen.

Das war's fürs Erste! Viel Spaß beim Versenden.

Lassen Sie uns Sie mit einem Bird-Experten verbinden.
Erleben Sie die volle Macht des Bird in 30 Minuten.

Durch die Übermittlung stimmen Sie zu, dass Bird Sie bezüglich unserer Produkte und Dienstleistungen kontaktieren darf.

Sie können sich jederzeit abmelden. Weitere Informationen zur Datenverarbeitung finden Sie in Birds Datenschutzerklärung.

Unternehmen

Newsletter

Bleiben Sie mit Bird auf dem Laufenden durch wöchentliche Updates in Ihrem Posteingang.

Lassen Sie uns Sie mit einem Bird-Experten verbinden.
Erleben Sie die volle Macht des Bird in 30 Minuten.

Durch die Übermittlung stimmen Sie zu, dass Bird Sie bezüglich unserer Produkte und Dienstleistungen kontaktieren darf.

Sie können sich jederzeit abmelden. Weitere Informationen zur Datenverarbeitung finden Sie in Birds Datenschutzerklärung.

Unternehmen

Newsletter

Bleiben Sie mit Bird auf dem Laufenden durch wöchentliche Updates in Ihrem Posteingang.

Lassen Sie uns Sie mit einem Bird-Experten verbinden.
Erleben Sie die volle Macht des Bird in 30 Minuten.

Durch die Übermittlung stimmen Sie zu, dass Bird Sie bezüglich unserer Produkte und Dienstleistungen kontaktieren darf.

Sie können sich jederzeit abmelden. Weitere Informationen zur Datenverarbeitung finden Sie in Birds Datenschutzerklärung.

R

Erreichen

G

Grow

M

Manage

A

Automate

Unternehmen

Newsletter

Bleiben Sie mit Bird auf dem Laufenden durch wöchentliche Updates in Ihrem Posteingang.