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 odbyliśmy krótką wycieczkę po S/MIME, przyglądając się podpisywaniu i szyfrowaniu naszych strumieni wiadomości w różnych klientach pocztowych. Dla organizacji wdrażających szyfrowanie S/MIME zrozumienie, jak efektywnie zbierać klucze publiczne odbiorców, staje się kluczowe dla skalowalnych, bezpiecznych operacji email. Część 2 przeprowadziła nas przez proste narzędzie wiersza poleceń do podpisywania i szyfrowania emaili, a następnie wysyłania ich przez SparkPost.

W tej części przyjrzymy się, jak narzędzie można dostosować do wprowadzania strumieni wiadomości 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 wstrzykiwania wiadomości, w tym katalog „pickup”, 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 jest domyślnie otwarty na porcie TCP 25, akceptując jedynie lokalny ruch.

export SMTP_HOST=localhost

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

Mamy już klucz prywatny nadawcy (steve@thetucks.com.pem) i klucz publiczny odbiorcy (steve.tuck@sparkpost.com.crt). Pierwsze kilka linii pliku wiadomości wygląda następująco:

Do: SteveT <steve.tuck@sparkpost.com> Od: Steve <steve@thetucks.com> Temat: 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ść z:

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

Widzimy:

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

Wiadomość szybko dociera do Inbox i w Mac Mail oznaczona jest jako podpisana i zaszyfrowana.

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

Dodatkowa funkcja: DKIM z PowerMTA

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

  • Użyj strony DKIM Wizard PowerMTA do utworzenia klucza prywatnego wysyłającej domeny (w moim przypadku, mypmta.thetucks.com.pem) i zawartości publicznego rekordu DNS TXT.

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

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

  • Dodaj poniższe do mojego pliku /etc/pmta/config i zrestartuj usługę pmta. (Tutaj te dyrektywy są zapisane w globalnym zakresie; 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łowy wg MX Toolbox, a 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 wstrzykiwania wiadomości, w tym katalog „pickup”, 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 jest domyślnie otwarty na porcie TCP 25, akceptując jedynie lokalny ruch.

export SMTP_HOST=localhost

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

Mamy już klucz prywatny nadawcy (steve@thetucks.com.pem) i klucz publiczny odbiorcy (steve.tuck@sparkpost.com.crt). Pierwsze kilka linii pliku wiadomości wygląda następująco:

Do: SteveT <steve.tuck@sparkpost.com> Od: Steve <steve@thetucks.com> Temat: 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ść z:

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

Widzimy:

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

Wiadomość szybko dociera do Inbox i w Mac Mail oznaczona jest jako podpisana i zaszyfrowana.

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

Dodatkowa funkcja: DKIM z PowerMTA

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

  • Użyj strony DKIM Wizard PowerMTA do utworzenia klucza prywatnego wysyłającej domeny (w moim przypadku, mypmta.thetucks.com.pem) i zawartości publicznego rekordu DNS TXT.

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

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

  • Dodaj poniższe do mojego pliku /etc/pmta/config i zrestartuj usługę pmta. (Tutaj te dyrektywy są zapisane w globalnym zakresie; 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łowy wg MX Toolbox, a 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 wstrzykiwania wiadomości, w tym katalog „pickup”, 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 jest domyślnie otwarty na porcie TCP 25, akceptując jedynie lokalny ruch.

export SMTP_HOST=localhost

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

Mamy już klucz prywatny nadawcy (steve@thetucks.com.pem) i klucz publiczny odbiorcy (steve.tuck@sparkpost.com.crt). Pierwsze kilka linii pliku wiadomości wygląda następująco:

Do: SteveT <steve.tuck@sparkpost.com> Od: Steve <steve@thetucks.com> Temat: 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ść z:

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

Widzimy:

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

Wiadomość szybko dociera do Inbox i w Mac Mail oznaczona jest jako podpisana i zaszyfrowana.

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

Dodatkowa funkcja: DKIM z PowerMTA

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

  • Użyj strony DKIM Wizard PowerMTA do utworzenia klucza prywatnego wysyłającej domeny (w moim przypadku, mypmta.thetucks.com.pem) i zawartości publicznego rekordu DNS TXT.

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

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

  • Dodaj poniższe do mojego pliku /etc/pmta/config i zrestartuj usługę pmta. (Tutaj te dyrektywy są zapisane w globalnym zakresie; 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łowy wg MX Toolbox, a 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 sposoby wprowadzania wiadomości, w tym API i SMTP. SMTP jest metodą używaną tutaj, w kierunku hosta już uruchomionego z Momentum. Zostawimy jego konfigurację bez zmian, ponieważ już ma zdolność do przyjmowania wejściowych 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 powiązane za pomocą prywatnego VLAN i balansujących obciążenie, przenosząc 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, i wprowadzimy 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 klucz prywatny nadawcy (steve@thetucks.com.pem) i klucz publiczny odbiorcy (steve.tuck@sparkpost.com.crt) już obecne na węźle „generation”. Pierwsze kilka linii pliku wiadomości odpowiada tym adresom.

Wysyłamy wiadomość z węzła „generation” dokładnie tym samym poleceniem co 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 REST API transmisji SparkPost do wstrzykiwania wiadomości. Oczywiście, jest również możliwe wstrzykiwanie wiadomości do SparkPost za pomocą SMTP. Ustawiamy zmienne środowiskowe w następujący sposób:

export SMTP_PASSWORD=<<YOUR_API_KEY_HERE>

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

Wyjście poniżej pokazuje użycie STARTTLS, wraz z nazwą użytkownika i hasłem.

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

Zobaczysz:

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

Hasło jest wydrukowane z podstawnymi znakami ***, więc nie narażasz prywatności swojego klucza, jeśli ktoś patrzy ci przez ramię.

Zabezpieczanie Twoich Poświadczeń

Zauważ, że zmienne środowiskowe mogłyby być ustawiane w pliku skryptu powłoki lub podobnym, aby zaoszczędzić ponowne wpisywanie. Jeśli to zrobisz, dbaj o swoje hasła/klucze API, ograniczając dostęp do tego pliku tylko do siebie. Na przykład, jeśli plik z ustawieniami poświadczeń nazywa się my_envs.sh, uruchom:

chmod 0700 my_envs.sh

Ostrzeżenia związane z SMTP, które możesz zobaczyć

SMTP injection SparkPost jest dość restrykcyjne, jak można się spodziewać po usłudze publicznej. 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 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 zgłaszane jak jest z biblioteki 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 SparkPost API użyte w Część 2 jest aktualizowane, aby obsługiwać wstrzykiwanie SMTP, aby wspierać lokalne MTA, takie jak Port25 PowerMTA i Momentum w różnych konfiguracjach, a także z SparkPost.

To na razie wszystko! 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.