
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
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.

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:
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:
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:
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.