
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 und betrachteten das Signieren und Verschlüsseln unserer Nachrichtenströme in einer Vielzahl von E-Mail-Clients. Für Organisationen, die S/MIME-Verschlüsselung implementieren, wird 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 Kommandozeilen-Tool, um E-Mails zu signieren und zu verschlüsseln, die dann über SparkPost gesendet werden.
In diesem Teil werden wir sehen, wie das Tool angepasst werden kann, um Nachrichtenströme in lokalen Plattformen wie Port25 PowerMTA und Momentum einzufügen.
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
3. SMTP-Injektion in Richtung Momentum
Momentum unterstützt verschiedene Möglichkeiten der Nachrichteninjektion, einschließlich API und SMTP. SMTP ist die hier verwendete Methode zu einem Host, auf dem Momentum bereits läuft. Wir lassen seine Konfiguration unverändert, da es bereits die Fähigkeit hat, eingehende Injektionen von anderen zugelassenen Hosts zu akzeptieren.
Dies ist eine kleinere Version eines Produktionssetups, bei dem „Generation“-Knoten und MTA-Knoten getrennt, aber über ein privates VLAN und Load-Balancer eng gekoppelt sind, die internen SMTP-Injektionsverkehr tragen.

Die S/MIME-Werkzeuge sind wie zuvor installiert, und wir werden Nachrichten an die Adresse des SMTP-Hosts (MTA) injizieren:
export SMTP_HOST=xx.xx.xx.xx # hier Ihre eigene MTA/VIP-Adresse festlegen
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 „Generation“-Knoten vorhanden. Die ersten Zeilen der Nachrichtendatei entsprechen diesen Adressen.
Wir senden die Nachricht vom „Generation“-Knoten mit exakt 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, koexistiert S/MIME auch problemlos mit Momentum’s DKIM signing.
4. SMTP-Injektion in Richtung SparkPost
In part 2 haben wir die SparkPost Transmissions REST API verwendet, um Nachrichten zu versenden. Natürlich ist es auch möglich, Nachrichten in SparkPost mithilfe von SMTP zu senden. Wir setzen die Umgebungsvariablen wie folgt:
export SMTP_PASSWORD=<<YOUR API KEY HERE>> export SMTP_HOST=smtp.sparkpostmail.com export SMTP_USER=SMTP_Injection export SMTP_PORT=587
Wenn Sie den SparkPost EU-gehosteten Dienst verwenden, setzen Sie SMTP_HOST als smtp.eu.sparkpostmail.com.
(Hier ansehen für weitere Optionen – zum Beispiel können Sie auf Port 2525 statt 587 versenden.)
Die folgende Ausgabe zeigt, dass STARTTLS verwendet wird, zusammen mit dem Benutzernamen und Passwort.
./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp
Sie werden sehen:
Geöffnete SMTP-Verbindung (STARTTLS) zu smtp.sparkpostmail.com, Port 587, Benutzer="SMTP_Injection", Passwort="****************************************" Senden tests/fancy-HTML-to-smt.eml Von: Steve <steve@thetucks.com> An: SteveT <steve.tuck@sparkpost.com> OK - in 0.057 Sekunden
Das Passwort wird mit ersetzten ***-Zeichen gedruckt, sodass Sie die Privatsphäre Ihres Schlüssels nicht gefährden, wenn jemand über Ihre Schulter schaut.
Sichern Ihrer Anmeldeinformationen
Beachten Sie, dass Umgebungsvariablen in einer Shell-Skriptdatei oder ähnlichem eingerichtet werden könnten, um erneutes Tippen zu vermeiden. Wenn Sie dies tun, stellen Sie sicher, dass Sie Ihre Passwörter/API-Schlüssel schützen, indem Sie den Zugriff auf diese Datei nur auf sich selbst beschränken. Wenn Ihre Anmeldeinformationsdatei beispielsweise my_envs.sh heißt, führen Sie aus:
chmod 0700 my_envs.sh
SMTP-bezogene Warnhinweise, die Sie sehen können
SparkPosts SMTP-Injektion ist ziemlich streng, wie Sie es von einem öffentlichen Dienst erwarten würden. Wenn Sie die SMTP-Portnummer nicht eingestellt haben, sehen Sie eine Warnung:
{'bob.lumreeker@gmail.com': (550, b'5.7.1 relaying denied')}
Wenn Sie den SMTP-Benutzernamen oder das Passwort nicht eingestellt 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 SparkPost-API-basierte Tool, das in Teil 2 verwendet wird, aktualisiert wurde, um SMTP-Injection zu unterstützen, um On-Premises-Mail-Transfer-Agenten (MTAs) wie Port25 PowerMTA und Momentum in verschiedenen Konfigurationen sowie mit SparkPost zu unterstützen.
Das war's für jetzt! Viel Spaß beim Senden.