Zasięg

Grow

Manage

Automate

Zasięg

Grow

Manage

Automate

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

Ptak

1 gru 2019

Email

1 min read

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

Ptak

1 gru 2019

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 mieliśmy krótką wycieczkę po S/MIME, przyglądając się podpisywaniu i szyfrowaniu naszych strumieni wiadomości w różnych klientach poczty. Dla organizacji wdrażających szyfrowanie S/MIME zrozumienie, jak efektywnie zbierać klucze publiczne odbiorców, staje się kluczowe dla skalowalnych operacji bezpiecznej poczty e-mail. Część 2 poprowadziła nas przez prostą narzędzia wiersza poleceń do podpisywania i szyfrowania e-maili, a następnie wysyłała je przez SparkPost.

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

OK – zaczynajmy!

1. Wprowadzenie

Instalacja narzędzia, uzyskiwanie kluczy itd. jest dokładnie taka sama jak wcześniej. Kiedy używasz systemu pocztowego na miejscu, takiego jak PowerMTA lub Momentum, jesteś już odpowiedzialny za konfigurację domen wysyłających, kluczy DKIM itd. Organizacje korzystające z systemów na miejscu często muszą również rozwiązywać wyzwania związane z systemem archiwizacji e-maili w celu zgodności z przepisami i wymaganiami dotyczącymi przechowywania danych. To, co musimy teraz zrobić, to zapewnić jakiś sposób wprowadzenia w pełni uformowanych 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 REST API transmisji SparkPost do wprowadzania wiadomości. Oczywiście możliwe jest również wprowadzanie wiadomości do SparkPost za pomocą SMTP. Ustawiliśmy zmienne środowiskowe w następujący 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 usługi hostowanej w UE SparkPost, ustaw SMTP_HOST na smtp.eu.sparkpostmail.com.
(Zobacz tutaj dla więcej opcji – na przykład możesz wstrzyknąć na porcie 2525 zamiast 587.)

Poniższe wyjście pokazuje, że używano STARTTLS, wraz z nazwą użytkownika i hasłem.

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

Zobaczysz:

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

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

Zabezpieczanie twoich danych uwierzytelniających

Zwróć uwagę, że zmienne środowiskowe można ustawić w pliku skryptu powłoki lub podobnym, aby zapisać ponowne wpisywanie. Jeśli to zrobisz, proszę pilnuj swoich haseł/kluczy API, ograniczając dostęp do tego pliku tylko do siebie. Na przykład, jeśli twój plik ustawień danych uwierzytelniających nosi nazwę my_envs.sh, uruchom:

chmod 0700 my_envs.sh

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

SMTP injection SparkPost jest dość restrykcyjny, co można by się spodziewać po publicznej usłudze. Jeśli nie ustawiłeś numeru portu SMTP, zobaczysz ostrzeżenie:

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

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

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

Te komunikaty o błędach są po prostu raportowane w taki sposób, w jaki pojawiają się w bibliotece Python SMTP, stąd takie formatowanie.

Który jest szybszy – SMTP czy API?

Szczerze mówiąc, S/MIME prawdopodobnie nie będzie przypadkiem użycia o dużej objętości, ale posiadanie tego samego narzędzia z dwiema opcjami wyjścia to był niemalże wyścig!

Plik testowy e-mail „Avocado” używany tutaj ma około 19KB. Powtarzanie testów 10 razy za pomocą pętli bash wykazał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 zainicjowaliś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 potrzebowało 280 milisekund na wiadomość – wciąż imponujące przy pliku 30 razy większym. Oczywiście, wydajność może 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 wstrzykiwania zgodnie z naszymi najlepszymi praktykami transmisji – np. z zadania nadzorującego.

Podsumowując ...

Widzieliśmy, jak narzędzie oparte na API SparkPost używane w Części 2 jest aktualizowane, aby obsługiwać wstrzykiwanie SMTP dla obsługi lokalnych MTA, takich jak Port25 PowerMTA i Momentum w różnych konfiguracjach, a także 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.

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.

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.