Reach

Grow

Manage

Automate

Reach

Grow

Manage

Automate

S/MIME Parte 3: Plug and Play per Email Sicuro On-Premises

Email

1 min read

S/MIME Parte 3: Plug and Play per Email Sicuro On-Premises

Email

1 min read

S/MIME Parte 3: Plug and Play per Email Sicuro On-Premises

In questa parte, vedremo come lo strumento può essere adattato per iniettare flussi di posta in piattaforme on-premises come PowerMTA e Momentum.

In part 1, abbiamo fatto un rapido tour di S/MIME, osservando la firma e la crittografia dei nostri flussi di messaggi su una gamma di client di posta. Part 2 ci ha guidato attraverso un semplice strumento da riga di comando per firmare e crittografare le email, quindi inviarle tramite SparkPost.

In questa parte, vedremo come lo strumento può essere adattato per iniettare flussi di posta in piattaforme locali come Port25 PowerMTA e Momentum.

OK – iniziamo!

1. Getting Started

Installare lo strumento, ottenere le chiavi ecc. è esattamente lo stesso di prima. Quando si utilizza un sistema di email on-premises come PowerMTA o Momentum, si è già responsabili per la configurazione dei domini di invio, delle chiavi DKIM ecc. Quello che dobbiamo fare ora è fornire un modo per iniettare i messaggi S/MIME completamente formati nei vostri server.

2. SMTP injection verso Port25 PowerMTA

PowerMTA supporta vari mezzi di iniezione dei messaggi, inclusa una directory di "pickup" di file, SMTP e un API. SMTP è il metodo utilizzato qui.

Per illustrare la configurazione più semplice possibile, installeremo gli strumenti S/MIME sullo stesso server di PowerMTA. Iniettiamo i messaggi al listener, che è aperto per impostazione predefinita sulla porta TCP 25, accettando solo traffico locale.

export SMTP_HOST=localhost

(Se dimentichi questo passaggio, vedrai: "Environment var SMTP_HOST not set – stopping" quando provi a eseguire.)

Abbiamo già la chiave privata del mittente (steve@thetucks.com.pem) e la chiave pubblica del destinatario (steve.tuck@sparkpost.com.crt). Le prime righe del file del messaggio sono:

To: SteveT <steve.tuck@sparkpost.com> From: Steve <steve@thetucks.com> Subject: Questo è un messaggio creato usando HEML MIME-Version: 1.0 Content-Type: text/html; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit

Inviamo il messaggio con:

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

Vediamo:

Connessione SMTP aperta (plain) a localhost, porta 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

Il messaggio arriva rapidamente nell'Inbox e viene segnalato in Mac Mail come firmato e crittografato.

Caratteristica bonus: DKIM con PowerMTA

Il DKIM è abbastanza facile da configurare e convive felicemente con S/MIME. I passaggi sono:

  • Usa il sito PowerMTA DKIM Wizard per creare la chiave privata del dominio di invio (nel mio caso, mypmta.thetucks.com.pem) e il contenuto del record TXT DNS pubblico.

  • Configura il record TXT DNS, con un selettore scelto. Ad esempio, ho usato il selettore pmta201811. I caratteri validi per il selettore sono definiti qui.

  • Posiziona il file mypmta.thetucks.com.pem sul server nella directory /etc/pmta.

  • Aggiungi il seguente al mio /etc/pmta/config e riavvia il servizio pmta. (Qui, queste direttive sono scritte a livello globale; su un sistema di produzione, potresti preferire aggiungerle sotto un virtual-mta invece.)

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

Il controllo del record DNS risulta OK tramite MX Toolbox, e DKIM è ora attivo.

PowerMTA supporta vari mezzi di iniezione dei messaggi, inclusa una directory di "pickup" di file, SMTP e un API. SMTP è il metodo utilizzato qui.

Per illustrare la configurazione più semplice possibile, installeremo gli strumenti S/MIME sullo stesso server di PowerMTA. Iniettiamo i messaggi al listener, che è aperto per impostazione predefinita sulla porta TCP 25, accettando solo traffico locale.

export SMTP_HOST=localhost

(Se dimentichi questo passaggio, vedrai: "Environment var SMTP_HOST not set – stopping" quando provi a eseguire.)

Abbiamo già la chiave privata del mittente (steve@thetucks.com.pem) e la chiave pubblica del destinatario (steve.tuck@sparkpost.com.crt). Le prime righe del file del messaggio sono:

To: SteveT <steve.tuck@sparkpost.com> From: Steve <steve@thetucks.com> Subject: Questo è un messaggio creato usando HEML MIME-Version: 1.0 Content-Type: text/html; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit

Inviamo il messaggio con:

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

Vediamo:

Connessione SMTP aperta (plain) a localhost, porta 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

Il messaggio arriva rapidamente nell'Inbox e viene segnalato in Mac Mail come firmato e crittografato.

Caratteristica bonus: DKIM con PowerMTA

Il DKIM è abbastanza facile da configurare e convive felicemente con S/MIME. I passaggi sono:

  • Usa il sito PowerMTA DKIM Wizard per creare la chiave privata del dominio di invio (nel mio caso, mypmta.thetucks.com.pem) e il contenuto del record TXT DNS pubblico.

  • Configura il record TXT DNS, con un selettore scelto. Ad esempio, ho usato il selettore pmta201811. I caratteri validi per il selettore sono definiti qui.

  • Posiziona il file mypmta.thetucks.com.pem sul server nella directory /etc/pmta.

  • Aggiungi il seguente al mio /etc/pmta/config e riavvia il servizio pmta. (Qui, queste direttive sono scritte a livello globale; su un sistema di produzione, potresti preferire aggiungerle sotto un virtual-mta invece.)

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

Il controllo del record DNS risulta OK tramite MX Toolbox, e DKIM è ora attivo.

PowerMTA supporta vari mezzi di iniezione dei messaggi, inclusa una directory di "pickup" di file, SMTP e un API. SMTP è il metodo utilizzato qui.

Per illustrare la configurazione più semplice possibile, installeremo gli strumenti S/MIME sullo stesso server di PowerMTA. Iniettiamo i messaggi al listener, che è aperto per impostazione predefinita sulla porta TCP 25, accettando solo traffico locale.

export SMTP_HOST=localhost

(Se dimentichi questo passaggio, vedrai: "Environment var SMTP_HOST not set – stopping" quando provi a eseguire.)

Abbiamo già la chiave privata del mittente (steve@thetucks.com.pem) e la chiave pubblica del destinatario (steve.tuck@sparkpost.com.crt). Le prime righe del file del messaggio sono:

To: SteveT <steve.tuck@sparkpost.com> From: Steve <steve@thetucks.com> Subject: Questo è un messaggio creato usando HEML MIME-Version: 1.0 Content-Type: text/html; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit

Inviamo il messaggio con:

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

Vediamo:

Connessione SMTP aperta (plain) a localhost, porta 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

Il messaggio arriva rapidamente nell'Inbox e viene segnalato in Mac Mail come firmato e crittografato.

Caratteristica bonus: DKIM con PowerMTA

Il DKIM è abbastanza facile da configurare e convive felicemente con S/MIME. I passaggi sono:

  • Usa il sito PowerMTA DKIM Wizard per creare la chiave privata del dominio di invio (nel mio caso, mypmta.thetucks.com.pem) e il contenuto del record TXT DNS pubblico.

  • Configura il record TXT DNS, con un selettore scelto. Ad esempio, ho usato il selettore pmta201811. I caratteri validi per il selettore sono definiti qui.

  • Posiziona il file mypmta.thetucks.com.pem sul server nella directory /etc/pmta.

  • Aggiungi il seguente al mio /etc/pmta/config e riavvia il servizio pmta. (Qui, queste direttive sono scritte a livello globale; su un sistema di produzione, potresti preferire aggiungerle sotto un virtual-mta invece.)

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

Il controllo del record DNS risulta OK tramite MX Toolbox, e DKIM è ora attivo.

3. SMTP Injection Verso Momentum

Momentum supports various means of message injection, including API and SMTP. SMTP is the method used here, towards a host already running Momentum. We’ll leave its configuration unchanged, as it already has a capability to accept incoming injections from other approved hosts.

This is a smaller version of a production setup, where “generation” nodes and MTA nodes are separate, yet closely coupled via a private VLAN and load-balancers, carrying internal SMTP injection traffic.




The S/MIME tools are installed as before, and we will inject messages to the address of the SMTP host (MTA):

export SMTP_HOST=xx.xx.xx.xx # set your own MTA / VIP address here

As before, we have the sender’s private key (steve@thetucks.com.pem) and the recipient’s public key (steve.tuck@sparkpost.com.crt) already present on the “generation” node. The first few lines of the message file match these addresses.

We send the message from the “generation” node with exactly the same command as before, and the message shows up in the inbox.

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

As you’d expect, S/MIME also happily coexists with Momentum’s DKIM signing.

4. SMTP injection verso SparkPost

In part 2 abbiamo utilizzato l'API REST di SparkPost transmissions per inviare messaggi. Naturalmente, è anche possibile inviare messaggi in SparkPost utilizzando SMTP. Impostiamo le variabili d'ambiente in questo modo:

export SMTP_PASSWORD=<<YOUR API KEY HERE>> export SMTP_HOST=smtp.sparkpostmail.com export SMTP_USER=SMTP_Injection export SMTP_PORT=587

Se stai utilizzando il servizio ospitato nell'UE di SparkPost, imposta SMTP_HOST come smtp.eu.sparkpostmail.com.
(Vedi qui per altre opzioni – ad esempio puoi inviare sulla porta 2525 invece di 587.)

L'output sotto mostra che viene utilizzato STARTTLS, insieme al nome utente e alla password.

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

Vedrai:

Aperta connessione SMTP (STARTTLS) a smtp.sparkpostmail.com, porta 587, utente="SMTP_Injection", password="****************************************" Inviando tests/fancy-HTML-to-smt.eml Da: Steve <steve@thetucks.com> A: SteveT <steve.tuck@sparkpost.com> OK - in 0.057 secondi

La password viene stampata con caratteri sostitutivi ***, quindi non comprometti la privacy della tua chiave se qualcuno sta guardando sopra la tua spalla.

Proteggere le tue Credenziali

Nota che le variabili d'ambiente potrebbero essere impostate in un file di script shell o simile, per evitare di ridigitare. Se lo fai, per favore proteggi le tue password/chiavi API limitando l'accesso a quel file solo a te stesso. Ad esempio, se il tuo file di configurazione delle credenziali si chiama my_envs.sh, esegui:

chmod 0700 my_envs.sh

Avvertenze Relativamente all'SMTP che Potresti Vedere

L'iniezione SMTP di SparkPost è piuttosto rigorosa, come ci si aspetterebbe da un servizio pubblico. Se non hai impostato il numero di porta SMTP, vedrai un avviso:

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

Se non hai impostato il nome utente SMTP o non hai impostato la password, vedrai:

(530, b'5.7.1 Authorization required. Ref. https://developers.sparkpost.com/api/index#header-smtp-relay-endpoints', 'steve@thetucks.com')

Questi messaggi di errore vengono semplicemente riportati così come sono dalla libreria SMTP di Python, da cui la formattazione.

Quale è più veloce – SMTP o API?

Francamente, S/MIME è improbabile che sia un caso d'uso ad alto volume, ma avere lo stesso strumento con due opzioni di output era una sfida da affrontare!

Il file di test email “Avocado” utilizzato qui è di circa 19KB. Ripetendo i test 10 volte tramite un loop bash, i tempi medi risultavano simili per SMTP e API, circa 60 millisecondi per messaggio, il che è piuttosto veloce. In questo caso, abbiamo iniettato da un'istanza EC2 media nella stessa regione di hosting di SparkPost.com, che è un buon modo per mantenere bassi i tempi di andata e ritorno della rete.

Ripetendo questo con un file di test più grande (577KB), l'API ha impiegato circa 200 millisecondi, mentre SMTP ha impiegato 280 millisecondi per messaggio – ancora impressionante per una dimensione del file 30 volte più grande. Naturalmente, le tue prestazioni possono variare a seconda della posizione, della congestione di internet, ecc., ma è improbabile che le prestazioni rappresentino un problema.

Se hai davvero bisogno delle massime prestazioni, un buon punto di partenza sarebbe avviare un numero definito di processi/sessioni di iniezione concorrenti secondo le nostre raccomandazioni sulle pratiche migliori di trasmissione - ad esempio, da un'attività supervisore.

Riassumendo …

Abbiamo visto come lo strumento basato su API di SparkPost utilizzato in Parte 2 sia stato aggiornato per supportare l'inserimento SMTP per supportare MTAs on-premises come Port25 PowerMTA e Momentum in una varietà di configurazioni, così come con SparkPost.

Questo è tutto per ora! Buon invio.

Iscriviti alla nostra Newsletter.

Rimani aggiornato con Bird attraverso aggiornamenti settimanali nella tua inbox.

Inviando, accetti che Bird possa contattarti riguardo ai nostri prodotti e servizi.

Puoi annullare l'iscrizione in qualsiasi momento. Consulta la Informativa sulla Privacy di Bird per i dettagli sul trattamento dei dati.

Iscriviti alla nostra Newsletter.

Rimani aggiornato con Bird attraverso aggiornamenti settimanali nella tua inbox.

Inviando, accetti che Bird possa contattarti riguardo ai nostri prodotti e servizi.

Puoi annullare l'iscrizione in qualsiasi momento. Consulta la Informativa sulla Privacy di Bird per i dettagli sul trattamento dei dati.

Iscriviti alla nostra Newsletter.

Rimani aggiornato con Bird attraverso aggiornamenti settimanali nella tua inbox.

Inviando, accetti che Bird possa contattarti riguardo ai nostri prodotti e servizi.

Puoi annullare l'iscrizione in qualsiasi momento. Consulta la Informativa sulla Privacy di Bird per i dettagli sul trattamento dei dati.

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

Azienda

Impostazioni sulla privacy

Newsletter

Rimani aggiornato con Bird attraverso aggiornamenti settimanali nella tua inbox.

Inviando, accetti che Bird possa contattarti riguardo ai nostri prodotti e servizi.

Puoi annullare l'iscrizione in qualsiasi momento. Consulta la Informativa sulla Privacy di Bird per i dettagli sul trattamento dei dati.

Uber logo
Logo Square
Logo Adobe
Meta logo

Azienda

Impostazioni sulla privacy

Newsletter

Rimani aggiornato con Bird attraverso aggiornamenti settimanali nella tua inbox.

Inviando, accetti che Bird possa contattarti riguardo ai nostri prodotti e servizi.

Puoi annullare l'iscrizione in qualsiasi momento. Consulta la Informativa sulla Privacy di Bird per i dettagli sul trattamento dei dati.

Uber logo
Logo Adobe
Meta logo

Reach

Grow

Manage

Automate

Risorse

Azienda

Newsletter

Rimani aggiornato con Bird attraverso aggiornamenti settimanali nella tua inbox.

Inviando, accetti che Bird possa contattarti riguardo ai nostri prodotti e servizi.

Puoi annullare l'iscrizione in qualsiasi momento. Consulta la Informativa sulla Privacy di Bird per i dettagli sul trattamento dei dati.