
W tej części przyjrzymy się, jak narzędzie można dostosować do wstrzykiwania strumieni mailowych do lokalnych platform, takich jak PowerMTA i Momentum.
Business in a box.
Odkryj nasze rozwiązania.
Porozmawiaj z naszym zespołem sprzedaży
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
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.