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.

Autor

Ptak

Kategoria

Email

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.

Autor

Ptak

Kategoria

Email

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.

Autor

Ptak

Kategoria

Email

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

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

OK – zaczynajmy!

1. Rozpoczęcie

Instalacja narzędzia, zdobycie kluczy itd. jest dokładnie taka sama jak wcześniej. Kiedy używasz lokalnego systemu e-mail, takiego jak PowerMTA lub Momentum, jesteś już odpowiedzialny za konfigurację domen wysyłania, kluczy DKIM itd. To, co musimy teraz zrobić, to zapewnić sposób na wstrzykiwanie w pełni uformowanych wiadomości S/MIME do Twoich serwerów.

2. Wstrzykiwanie SMTP w kierunku Port25 PowerMTA

PowerMTA obsługuje różne metody wstrzykiwania wiadomości, w tym katalog „odbioru” plików, 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łuchującego, który jest domyślnie otwarty na porcie TCP 25, akceptującym tylko lokalny ruch.

export SMTP_HOST=localhost

(Jeśli zapomnisz o tym kroku, zobaczysz: „Zmienna środowiskowa SMTP_HOST nie jest ustawiona – zatrzymanie” gdy spróbujesz uruchomić.)

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

Do: SteveT <steve.tuck@sparkpost.com> Od: Steve <steve@thetucks.com> Temat: To jest wiadomość utworzona za pomocą HEML MIME-Wersja: 1.0 Typ-treści: text/html; charset=utf-8 Język-treści: en-GB Kodowanie-przenoszenia-treści: 7bit

Wysyłamy wiadomość z:

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

Widok:

Otwarto połączenie SMTP (plain) do 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 przychodzi do skrzynki odbiorczej i zgłasza się w Mac Mail jako podpisana i zaszyfrowana.

Funkcja dodatkowa: DKIM z PowerMTA

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

  • Użyj strony DKIM Wizard PowerMTA, aby utworzyć prywatny klucz domeny wysyłającej (w moim przypadku, mypmta.thetucks.com.pem) i publiczne rekordy DNS TXT.

  • Skonfiguruj rekord DNS TXT, z wybranym selektorem. Na przykład, użyłem selektora pmta201811. Dozwolone 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ą zapisane w zasięgu globalnym; w systemie produkcyjnym możesz wolą 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 poprawny w MX Toolbox, a DKIM jest teraz aktywny.


3. Wstrzykiwanie SMTP w kierunku Momentum

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

To jest mniejsza wersja konfiguracji produkcyjnej, gdzie węzły „generacyjne” i węzły MTA są oddzielne, ale blisko powiązane przez prywatną VLAN i load-balancery, przenosząc wewnętrzny ruch wstrzykiwania SMTP.


Narzędzia S/MIME zostały zainstalowane jak wcześniej, a my wstrzykujemy wiadomości do adresu hosta SMTP (MTA):

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

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

Wysyłamy wiadomość z węzła „generacyjnego” dokładnie tym samym poleceniem, co wcześniej, a wiadomość pojawia się w skrzynce odbiorczej.

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

Jak można się spodziewać, S/MIME równie dobrze współistnieje z podpisywaniem DKIM Momentum.

4. Wstrzykiwanie SMTP w kierunku SparkPost

W części 2 użyliśmy REST API przesyłania SparkPost, aby wstrzykiwać wiadomości. Oczywiście, możliwe jest również wstrzykiwanie wiadomości do SparkPost za pomocą SMTP. Ustawiamy zmienne środowiskowe w ten sposób:

export SMTP_PASSWORD=<<TWÓJ KLUCZ API TUTAJ>> export SMTP_HOST=smtp.sparkpostmail.com export SMTP_USER=SMTP_Injection export SMTP_PORT=587

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

Poniższe dane wyjściowe pokazują, że używany jest STARTTLS, wraz z nazwą użytkownika i hasłem.

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

Zobaczysz:

Otwarte 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ąpionymi znakami ***, więc nie kompromitujesz prywatności swojego klucza, jeśli ktoś patrzy przez twoje ramię.

Bezpieczne przechowywanie danych uwierzytelniających

Zauważ, że zmienne środowiskowe mogą być ustawione w pliku skryptu powłoki lub podobnym, aby zaoszczędzić przepisanie. Jeśli to robisz, dbaj o swoje hasła/klucze API, ograniczając dostęp do tego pliku tylko do siebie. Na przykład, jeśli plik konfiguracyjny twoich danych uwierzytelniających nazywa się my_envs.sh, uruchom:

chmod 0700 my_envs.sh

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

Wstrzykiwanie SMTP SparkPost jest dość surowe, jak można się spodziewać od publicznej usługi. Jeśli nie ustawiłeś numeru portu SMTP, zobaczysz ostrzeżenie:

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

Jeśli nie ustawiłeś nazwy użytkownika SMTP lub nie ustawiłeś 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 tak, jak są przekazywane z biblioteki Python SMTP, stąd formatowanie.

Która metoda jest szybsza – SMTP czy API?

Kwestionując, S/MIME jest mało prawdopodobną aplikacją o dużym wolumenie, ale posiadanie tego samego narzędzia z dwoma opcjami wyjściowymi właśnie prosiło o wyścig!

Testowy plik e-mail „Avocado”, który tutaj użyto, ma około 19KB. Powtarzając testy 10 razy za pomocą pętli bash pokazano średnie czasy podobne dla SMTP i API, około 60 milisekund na wiadomość, co jest dość szybkie. W tym przypadku wstrzykiwaliśmy z średnią instancji EC2 w tym samym regionie hostingowym, co SparkPost.com, co jest dobrym sposobem na utrzymanie niskich czasów okrążeń sieciowych.

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 pliku 30 razy większego. Oczywiście, Twoje wyniki mogą się różnić w zależności od lokalizacji, zatorów internetowych itd., ale wydajność ma mało prawdopodobne, aby była problemem.

Jeśli naprawdę potrzebujesz maksymalnej wydajności, dobrym punktem wyjściowym byłoby uruchomienie ustalonej liczby równoległych procesów/w sesji wstrzykiwania zgodnie z naszymi zaleceniami najlepszych praktyk dotyczących transmisji – np. z zadania nadzorczego.

Podsumowując …

Zobaczyliśmy, w jaki sposób narzędzie oparte na API SparkPost użyte w Części 2 zostało zaktualizowane, aby obsługiwać wstrzykiwanie SMTP, by wspierać lokalne MTA, takie jak Port25 PowerMTA i Momentum w różnych konfiguracjach, jak również ze SparkPost.

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

Sign up

Platforma oparta na sztucznej inteligencji do Marketingu, Wsparcia i Finansów

Klikając „Uzyskaj demonstrację”, zgadzasz się na Bird's

Sign up

Platforma oparta na sztucznej inteligencji do Marketingu, Wsparcia i Finansów

Klikając „Uzyskaj demonstrację”, zgadzasz się na Bird's

Sign up

Platforma oparta na sztucznej inteligencji do Marketingu, Wsparcia i Finansów

Klikając „Uzyskaj demonstrację”, zgadzasz się na Bird's

Channels

Grow

Engage

Automate

APIs

Resources

Company

Socials

Rośnij

Zarządzaj

Automatyzować

Rośnij

Zarządzaj

Automatyzować