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 sposoby wprowadzania wiadomości, w tym katalog „pickup” z plikami, SMTP i API. SMTP jest metodą używaną tutaj.

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

export SMTP_HOST=localhost

(Jeśli zapomnisz wykonać ten krok, zobaczysz: „Environment var SMTP_HOST not set – stopping”, gdy spróbujesz uruchomić.)

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

To: SteveT <steve.tuck@sparkpost.com> Od: Steve <steve@thetucks.com> Temat: To jest wiadomość utworzona za pomocą 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:

Otworzono połączenie SMTP (plain) z localhost, port 25, użytkownik="", hasło="" Wysyłanie tests/fancy-HTML-to-smt.eml Od: Steve <steve@thetucks.com> Do: SteveT <steve.tuck@sparkpost.com> OK - w 0.028 sekund

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

Dodatkowa funkcja: DKIM z PowerMTA

Konfiguracja DKIM jest dość prosta i współistnieje z S/MIME bez problemu. Kroki są następujące:

  • Użyj strony PowerMTA DKIM Wizard do utworzenia klucza prywatnego domeny nadawczej (w moim przypadku mypmta.thetucks.com.pem) i treści rekordu DNS TXT.

  • Skonfiguruj rekord DNS TXT, z wybranym selektorem. Na przykład, użyłem selektora pmta201811. Prawidłowe znaki selektora są zdefiniowane tutaj.

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

  • Dodaj następujące do mojego /etc/pmta/config i zrestartuj usługę pmta. (Tutaj te dyrektywy są napisane na poziomie globalnym; w systemie produkcyjnym możesz woleć dodać je pod wirtualnym mta.)

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

Rekord DNS jest prawidłowo sprawdzany przez MX Toolbox, a DKIM jest teraz aktywny.

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

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

export SMTP_HOST=localhost

(Jeśli zapomnisz wykonać ten krok, zobaczysz: „Environment var SMTP_HOST not set – stopping”, gdy spróbujesz uruchomić.)

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

To: SteveT <steve.tuck@sparkpost.com> Od: Steve <steve@thetucks.com> Temat: To jest wiadomość utworzona za pomocą 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:

Otworzono połączenie SMTP (plain) z localhost, port 25, użytkownik="", hasło="" Wysyłanie tests/fancy-HTML-to-smt.eml Od: Steve <steve@thetucks.com> Do: SteveT <steve.tuck@sparkpost.com> OK - w 0.028 sekund

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

Dodatkowa funkcja: DKIM z PowerMTA

Konfiguracja DKIM jest dość prosta i współistnieje z S/MIME bez problemu. Kroki są następujące:

  • Użyj strony PowerMTA DKIM Wizard do utworzenia klucza prywatnego domeny nadawczej (w moim przypadku mypmta.thetucks.com.pem) i treści rekordu DNS TXT.

  • Skonfiguruj rekord DNS TXT, z wybranym selektorem. Na przykład, użyłem selektora pmta201811. Prawidłowe znaki selektora są zdefiniowane tutaj.

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

  • Dodaj następujące do mojego /etc/pmta/config i zrestartuj usługę pmta. (Tutaj te dyrektywy są napisane na poziomie globalnym; w systemie produkcyjnym możesz woleć dodać je pod wirtualnym mta.)

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

Rekord DNS jest prawidłowo sprawdzany przez MX Toolbox, a DKIM jest teraz aktywny.

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

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

export SMTP_HOST=localhost

(Jeśli zapomnisz wykonać ten krok, zobaczysz: „Environment var SMTP_HOST not set – stopping”, gdy spróbujesz uruchomić.)

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

To: SteveT <steve.tuck@sparkpost.com> Od: Steve <steve@thetucks.com> Temat: To jest wiadomość utworzona za pomocą 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:

Otworzono połączenie SMTP (plain) z localhost, port 25, użytkownik="", hasło="" Wysyłanie tests/fancy-HTML-to-smt.eml Od: Steve <steve@thetucks.com> Do: SteveT <steve.tuck@sparkpost.com> OK - w 0.028 sekund

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

Dodatkowa funkcja: DKIM z PowerMTA

Konfiguracja DKIM jest dość prosta i współistnieje z S/MIME bez problemu. Kroki są następujące:

  • Użyj strony PowerMTA DKIM Wizard do utworzenia klucza prywatnego domeny nadawczej (w moim przypadku mypmta.thetucks.com.pem) i treści rekordu DNS TXT.

  • Skonfiguruj rekord DNS TXT, z wybranym selektorem. Na przykład, użyłem selektora pmta201811. Prawidłowe znaki selektora są zdefiniowane tutaj.

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

  • Dodaj następujące do mojego /etc/pmta/config i zrestartuj usługę pmta. (Tutaj te dyrektywy są napisane na poziomie globalnym; w systemie produkcyjnym możesz woleć dodać je pod wirtualnym mta.)

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

Rekord DNS jest prawidłowo sprawdzany przez MX Toolbox, a DKIM jest teraz aktywny.

3. SMTP Injection w kierunku Momentum

Momentum obsługuje różne sposoby wprowadzania wiadomości, w tym API i SMTP. SMTP to metoda używana tutaj, w kierunku hosta, na którym już działa Momentum. Pozostawimy jego konfigurację bez zmian, ponieważ już ma możliwość akceptowania 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ą oddzielone, ale ściśle powiązane za pomocą prywatnego VLAN i load-balancers, przenoszących wewnętrzny ruch SMTP wstrzyknięć.




Narzędzia S/MIME są zainstalowane jak wcześniej i wstrzykniemy wiadomości na adres hosta SMTP (MTA):

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

Jak wcześniej, mamy już klucz prywatny nadawcy (steve@thetucks.com.pem) i klucz publiczny odbiorcy (steve.tuck@sparkpost.com.crt) obecne na węźle „generation”. Pierwsze kilka linii pliku wiadomości odpowiada tym adresom.

Wysyłamy wiadomość z węzła „generation” używając dokładnie tej samej komendy jak wcześniej, a wiadomość pojawia się w Inbox.

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

Jak można się spodziewać, S/MIME również szczęśliwie współistnieje z DKIM signing 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.

Dołącz do naszego Newslettera.

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.

Dołącz do naszego Newslettera.

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.

Dołącz do naszego Newslettera.

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.

Logo Pinterest
Logo Uber
Square logo
Logo Adobe
Logo Meta
Logo PayPal

Company

Ustawienia prywatności

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.

Logo Uber
Square logo
Logo Adobe
Logo Meta

Company

Ustawienia prywatności

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.

Logo Uber
Logo Adobe
Logo Meta

Zasięg

Grow

Manage

Automate

Zasoby

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.