Zasięg

Grow

Manage

Automate

Zasięg

Grow

Manage

Automate

S/MIME Część 3: Plug and Play dla lokalnej bezpiecznej poczty e-mail

Email

1 min read

S/MIME Część 3: Plug and Play dla lokalnej bezpiecznej poczty e-mail

Email

1 min read

S/MIME Część 3: Plug and Play dla lokalnej bezpiecznej poczty e-mail

W tej części przyjrzymy się, jak narzędzie można dostosować do wstrzykiwania strumieni mailowych do lokalnych platform, takich jak PowerMTA i Momentum.

W części 1 zrobiliśmy szybki przegląd S/MIME, przyglądając się podpisywaniu i szyfrowaniu naszych strumieni wiadomości w różnych klientach pocztowych. Część 2 przeprowadziła nas przez proste narzędzie wiersza poleceń do podpisywania i szyfrowania e-maili, a następnie wysyłania ich przez SparkPost.

W tej części przyjrzymy się, jak można dostosować narzędzie do wstrzykiwania strumieni pocztowych do platform lokalnych, takich jak Port25 PowerMTA i Momentum.

OK – zaczynajmy!

1. Wprowadzenie

Instalacja narzędzia, uzyskanie kluczy itp. jest dokładnie taka sama jak wcześniej. Kiedy używasz systemu e-mailowego na miejscu, takiego jak PowerMTA lub Momentum, jesteś już odpowiedzialny za konfigurację domen wysyłających, kluczy DKIM itp. To, co musimy teraz zrobić, to zapewnić jakiś sposób wprowadzenia w pełni sformatowanych wiadomości S/MIME do twoich serwerów.

2. SMTP injekcja w kierunku Port25 PowerMTA

PowerMTA obsługuje różne metody wprowadzania wiadomości, w tym katalog „pickup” plików, SMTP i API. SMTP jest metodą używaną tutaj.

Aby zilustrować najprostszą możliwą konfigurację, zainstalujemy narzędzia S/MIME na tym samym serwerze co PowerMTA. Wstrzykujemy wiadomości do nasłuchiwacza, który jest domyślnie otwarty na porcie TCP 25, akceptując tylko lokalny ruch.

export SMTP_HOST=localhost

(Jeśli zapomnisz o tym kroku, zobaczysz: „Environment var SMTP_HOST not set – stopping” podczas próby uruchomienia.)

Posiadamy klucz prywatny nadawcy (steve@thetucks.com.pem) i klucz publiczny odbiorcy (steve.tuck@sparkpost.com.crt) już dostępne. Pierwsze kilka linii pliku wiadomości to:

To: SteveT <steve.tuck@sparkpost.com> From: Steve <steve@thetucks.com> Subject: This is a message created using HEML MIME-Version: 1.0 Content-Type: text/html; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit

Wysyłamy wiadomość za pomocą:

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

Widzimy:

Otwarta połączenie SMTP (plain) do localhost, port 25, user="", password="" Wysyłanie tests/fancy-HTML-to-smt.eml From: Steve <steve@thetucks.com> To: SteveT <steve.tuck@sparkpost.com> OK - w 0.028 sekund

Wiadomość szybko trafia do inbox i w Mac Mail raportowana jest jako podpisana i zaszyfrowana.

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

Funkcjonalność dodatkowa: DKIM z PowerMTA

DKIM jest dość łatwy do skonfigurowania i współistnieje szczęśliwie z S/MIME. Kroki to:

  • Skorzystaj ze strony DKIM Wizard PowerMTA, aby utworzyć klucz prywatny domeny nadawczej (w moim przypadku, mypmta.thetucks.com.pem) i zawartość publicznego rekordu DNS TXT.

  • Skonfiguruj rekord DNS TXT, z wybranym selektorem. Na przykład, użyłem selektora pmta201811. Znaki dozwolone w selektorze są zdefiniowane tutaj.

  • Umieść plik mypmta.thetucks.com.pem na serwerze w katalogu /etc/pmta .

  • Dodaj poniższe do mojego /etc/pmta/config i zrestartuj usługę pmta. (Tutaj, te dyrektywy są zapisane w zakresie globalnym; w systemie produkcyjnym, zamiast tego można je dodać pod virtual-mta.)

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

Rekord DNS sprawdza się poprawnie przez MX Toolbox i DKIM jest teraz aktywny.

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

PowerMTA obsługuje różne metody wprowadzania wiadomości, w tym katalog „pickup” plików, SMTP i API. SMTP jest metodą używaną tutaj.

Aby zilustrować najprostszą możliwą konfigurację, zainstalujemy narzędzia S/MIME na tym samym serwerze co PowerMTA. Wstrzykujemy wiadomości do nasłuchiwacza, który jest domyślnie otwarty na porcie TCP 25, akceptując tylko lokalny ruch.

export SMTP_HOST=localhost

(Jeśli zapomnisz o tym kroku, zobaczysz: „Environment var SMTP_HOST not set – stopping” podczas próby uruchomienia.)

Posiadamy klucz prywatny nadawcy (steve@thetucks.com.pem) i klucz publiczny odbiorcy (steve.tuck@sparkpost.com.crt) już dostępne. Pierwsze kilka linii pliku wiadomości to:

To: SteveT <steve.tuck@sparkpost.com> From: Steve <steve@thetucks.com> Subject: This is a message created using HEML MIME-Version: 1.0 Content-Type: text/html; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit

Wysyłamy wiadomość za pomocą:

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

Widzimy:

Otwarta połączenie SMTP (plain) do localhost, port 25, user="", password="" Wysyłanie tests/fancy-HTML-to-smt.eml From: Steve <steve@thetucks.com> To: SteveT <steve.tuck@sparkpost.com> OK - w 0.028 sekund

Wiadomość szybko trafia do inbox i w Mac Mail raportowana jest jako podpisana i zaszyfrowana.

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

Funkcjonalność dodatkowa: DKIM z PowerMTA

DKIM jest dość łatwy do skonfigurowania i współistnieje szczęśliwie z S/MIME. Kroki to:

  • Skorzystaj ze strony DKIM Wizard PowerMTA, aby utworzyć klucz prywatny domeny nadawczej (w moim przypadku, mypmta.thetucks.com.pem) i zawartość publicznego rekordu DNS TXT.

  • Skonfiguruj rekord DNS TXT, z wybranym selektorem. Na przykład, użyłem selektora pmta201811. Znaki dozwolone w selektorze są zdefiniowane tutaj.

  • Umieść plik mypmta.thetucks.com.pem na serwerze w katalogu /etc/pmta .

  • Dodaj poniższe do mojego /etc/pmta/config i zrestartuj usługę pmta. (Tutaj, te dyrektywy są zapisane w zakresie globalnym; w systemie produkcyjnym, zamiast tego można je dodać pod virtual-mta.)

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

Rekord DNS sprawdza się poprawnie przez MX Toolbox i DKIM jest teraz aktywny.

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

PowerMTA obsługuje różne metody wprowadzania wiadomości, w tym katalog „pickup” plików, SMTP i API. SMTP jest metodą używaną tutaj.

Aby zilustrować najprostszą możliwą konfigurację, zainstalujemy narzędzia S/MIME na tym samym serwerze co PowerMTA. Wstrzykujemy wiadomości do nasłuchiwacza, który jest domyślnie otwarty na porcie TCP 25, akceptując tylko lokalny ruch.

export SMTP_HOST=localhost

(Jeśli zapomnisz o tym kroku, zobaczysz: „Environment var SMTP_HOST not set – stopping” podczas próby uruchomienia.)

Posiadamy klucz prywatny nadawcy (steve@thetucks.com.pem) i klucz publiczny odbiorcy (steve.tuck@sparkpost.com.crt) już dostępne. Pierwsze kilka linii pliku wiadomości to:

To: SteveT <steve.tuck@sparkpost.com> From: Steve <steve@thetucks.com> Subject: This is a message created using HEML MIME-Version: 1.0 Content-Type: text/html; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit

Wysyłamy wiadomość za pomocą:

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

Widzimy:

Otwarta połączenie SMTP (plain) do localhost, port 25, user="", password="" Wysyłanie tests/fancy-HTML-to-smt.eml From: Steve <steve@thetucks.com> To: SteveT <steve.tuck@sparkpost.com> OK - w 0.028 sekund

Wiadomość szybko trafia do inbox i w Mac Mail raportowana jest jako podpisana i zaszyfrowana.

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

Funkcjonalność dodatkowa: DKIM z PowerMTA

DKIM jest dość łatwy do skonfigurowania i współistnieje szczęśliwie z S/MIME. Kroki to:

  • Skorzystaj ze strony DKIM Wizard PowerMTA, aby utworzyć klucz prywatny domeny nadawczej (w moim przypadku, mypmta.thetucks.com.pem) i zawartość publicznego rekordu DNS TXT.

  • Skonfiguruj rekord DNS TXT, z wybranym selektorem. Na przykład, użyłem selektora pmta201811. Znaki dozwolone w selektorze są zdefiniowane tutaj.

  • Umieść plik mypmta.thetucks.com.pem na serwerze w katalogu /etc/pmta .

  • Dodaj poniższe do mojego /etc/pmta/config i zrestartuj usługę pmta. (Tutaj, te dyrektywy są zapisane w zakresie globalnym; w systemie produkcyjnym, zamiast tego można je dodać pod virtual-mta.)

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

Rekord DNS sprawdza się poprawnie przez MX Toolbox i DKIM jest teraz aktywny.

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

3. SMTP Injection w kierunku Momentum

Momentum obsługuje różne środki wstrzykiwania wiadomości, w tym API i SMTP. SMTP jest metodą używaną tutaj, w kierunku hosta, który już działa na Momentum. Pozostawimy jego konfigurację bez zmian, ponieważ ma już możliwość przyjmowania przychodzących wstrzyknięć z innych zatwierdzonych hostów.

To jest mniejsza wersja konfiguracji produkcyjnej, gdzie węzły „generation” i węzły MTA są oddzielne, ale ściśle połączone za pomocą prywatnej sieci VLAN i load-balancerów, które przenoszą wewnętrzny ruch wstrzykiwania SMTP.


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


Narzędzia S/MIME są zainstalowane jak wcześniej, a my wstrzykujemy wiadomości na adres hosta SMTP (MTA):

export SMTP_HOST=xx.xx.xx.xx # ustaw tutaj swój własny adres MTA / VIP

Jak wcześniej, mamy już węzeł z kluczem prywatnym nadawcy (steve@thetucks.com.pem) oraz węzłem z kluczem publicznym odbiorcy (steve.tuck@sparkpost.com.crt) na węźle „generation”. Pierwsze linie pliku wiadomości odpowiadają tym adresom.

Wysyłamy wiadomość z węzła „generation” dokładnie tą samą komendą, co wcześniej, a wiadomość pojawia się w inboxie.

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

Tak jak się spodziewasz, S/MIME również z radością współistnieje z DKIM signing w Momentum.

4. SMTP injection towards SparkPost

W części 2 użyliśmy SparkPost transmissions REST API do wstrzykiwania wiadomości. Oczywiście, możliwe jest również wstrzykiwanie wiadomości do SparkPost za pomocą SMTP. Ustawiliśmy zmienne środowiskowe w ten sposób:

export SMTP_PASSWORD=<<YOUR API KEY HERE>> export SMTP_HOST=smtp.sparkpostmail.com export SMTP_USER=SMTP_Injection export SMTP_PORT=587

Jeśli używasz SparkPost UE-hostowanej usługi, ustaw SMTP_HOST jako smtp.eu.sparkpostmail.com.
(Zobacz tutaj więcej opcji – na przykład możesz wstrzykiwać na porcie 2525 zamiast 587.)

Poniższy wynik pokazuje, że używane jest STARTTLS, wraz z nazwą użytkownika i hasłem.

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

Zobaczysz:

Rozpoczęto połączenie SMTP (STARTTLS) do smtp.sparkpostmail.com, port 587, użytkownik="SMTP_Injection", hasło="****************************************" Wysyłanie tests/fancy-HTML-to-smt.eml Od: Steve <steve@thetucks.com> Do: SteveT <steve.tuck@sparkpost.com> OK - w 0.057 sekundach

Hasło jest drukowane z zastępczymi znakami ***, więc nie kompromitujesz prywatności swojego klucza, jeśli ktoś patrzy ci przez ramię.

Zabezpieczanie Twoich Poświadczeń

Zwróć uwagę, że zmienne środowiskowe można ustawić w pliku skryptu powłoki lub podobnym, aby uniknąć ponownego wpisywania. Jeśli to zrobisz, proszę dbaj o swoje hasła/klucze API, ograniczając dostęp do tego pliku tylko do siebie. Na przykład, jeśli plik konfiguracji poświadczeń nazywa się my_envs.sh, uruchom:

chmod 0700 my_envs.sh

Ostrzeżenia SMTP, które możesz zobaczyć

SMTP injection SparkPost jest dość restrykcyjne, jak można się spodziewać po publicznej usłudze. Jeśli nie ustawisz numeru portu SMTP, zobaczysz ostrzeżenie:

{'bob.lumreeker@gmail.com': (550, b'5.7.1 odrzucenie przekaźnika')}

Jeśli nie ustawisz nazwy użytkownika SMTP lub nie ustawisz hasła, zobaczysz:

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

Te komunikaty o błędach są po prostu raportowane jako-is z biblioteki Python SMTP, dlatego taki format.

Który jest szybszy – SMTP czy API?

Szczerze mówiąc, S/MIME raczej nie będzie przypadkiem użycia o dużej skali, ale posiadanie tego samego narzędzia z dwiema opcjami wyjścia to było jak proszenie się o wyścig!

Plik testowy e-mail "Avocado" użyty tutaj ma około 19KB. Powtarzanie testów 10 razy za pomocą pętli bash pokazało, że średnie czasy były podobne dla SMTP i API, około 60 milisekund na wiadomość, co jest całkiem szybkie. W tym przypadku korzystaliśmy z medium instancji EC2 w tym samym regionie hostingowym co SparkPost.com, co jest dobrym sposobem na utrzymanie niskich czasów podróży sieciowej.

Powtarzając to z większym plikiem testowym (577KB), API zajęło około 200 milisekund, podczas gdy SMTP zajęło 280 milisekund na wiadomość – wciąż imponujące dla rozmiaru pliku 30 razy większego. Oczywiście, wyniki mogą się różnić w zależności od lokalizacji, przeciążenia internetu itp., ale wydajność raczej nie będzie problemem.

Jeśli naprawdę potrzebujesz maksymalnej wydajności, dobrym punktem wyjścia byłoby uruchomienie określonej liczby równoczesnych procesów/sesji iniekcji zgodnie z naszymi transmission best practices – np. z zadania superwizora.

Podsumowując ...

Widzieliśmy, jak narzędzie oparte na SparkPost API używane w Części 2 zostało zaktualizowane, aby wspierać SMTP injection, obsługując lokalne MTA takie jak Port25 PowerMTA i Momentum w różnych konfiguracjach, jak również z SparkPost.

To wszystko na teraz! Szczęśliwego wysyłania.

Połączmy Cię z ekspertem Bird.
Zobacz pełną moc Bird w 30 minut.

Przesyłając, zgadzasz się, że Bird może kontaktować się z Tobą w sprawie naszych produktów i usług.

Możesz zrezygnować z subskrypcji w dowolnym momencie. Zobacz Privacy Statement firmy Bird, aby uzyskać szczegóły dotyczące przetwarzania danych.

Company

Biuletyn

Bądź na bieżąco z Bird dzięki cotygodniowym aktualizacjom do Twojej skrzynki odbiorczej.

Przesyłając, zgadzasz się, że Bird może kontaktować się z Tobą w sprawie naszych produktów i usług.

Możesz zrezygnować z subskrypcji w dowolnym momencie. Zobacz Privacy Statement firmy Bird, aby uzyskać szczegóły dotyczące przetwarzania danych.

Połączmy Cię z ekspertem Bird.
Zobacz pełną moc Bird w 30 minut.

Przesyłając, zgadzasz się, że Bird może kontaktować się z Tobą w sprawie naszych produktów i usług.

Możesz zrezygnować z subskrypcji w dowolnym momencie. Zobacz Privacy Statement firmy Bird, aby uzyskać szczegóły dotyczące przetwarzania danych.

Company

Biuletyn

Bądź na bieżąco z Bird dzięki cotygodniowym aktualizacjom do Twojej skrzynki odbiorczej.

Przesyłając, zgadzasz się, że Bird może kontaktować się z Tobą w sprawie naszych produktów i usług.

Możesz zrezygnować z subskrypcji w dowolnym momencie. Zobacz Privacy Statement firmy Bird, aby uzyskać szczegóły dotyczące przetwarzania danych.

Połączmy Cię z ekspertem Bird.
Zobacz pełną moc Bird w 30 minut.

Przesyłając, zgadzasz się, że Bird może kontaktować się z Tobą w sprawie naszych produktów i usług.

Możesz zrezygnować z subskrypcji w dowolnym momencie. Zobacz Privacy Statement firmy Bird, aby uzyskać szczegóły dotyczące przetwarzania danych.

R

Reach

G

Grow

M

Manage

A

Automate

Company

Biuletyn

Bądź na bieżąco z Bird dzięki cotygodniowym aktualizacjom do Twojej skrzynki odbiorczej.

Przesyłając, zgadzasz się, że Bird może kontaktować się z Tobą w sprawie naszych produktów i usług.

Możesz zrezygnować z subskrypcji w dowolnym momencie. Zobacz Privacy Statement firmy Bird, aby uzyskać szczegóły dotyczące przetwarzania danych.