Reach

Grow

Manage

Automate

Reach

Grow

Manage

Automate

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

Uccello

1 dic 2019

Email

1 min read

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

Uccello

1 dic 2019

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, esaminando la firma e la crittografia dei nostri flussi di messaggi attraverso una gamma di client di posta. Per le organizzazioni che implementano la crittografia S/MIME, capire come raccogliere le chiavi pubbliche dei destinatari in modo efficiente diventa cruciale per operazioni di email sicure e scalabili. La parte 2 ci ha guidato attraverso un semplice strumento da linea di comando per firmare e crittografare le email, quindi inviarle tramite SparkPost.

In questa parte, esamineremo come lo strumento può essere adattato per iniettare flussi di posta in piattaforme on-premises 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 email on-premises come PowerMTA o Momentum, si è già responsabili dell'impostazione dei domini di invio, delle chiavi DKIM ecc. Le organizzazioni che utilizzano sistemi on-premises spesso devono anche affrontare sfide del sistema di archiviazione email per la conformità normativa e i requisiti di conservazione dei dati. Ciò 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 del messaggio, inclusa una directory di "pickup" 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 di default sul TCP porta 25, accettando solo traffico locale.

export SMTP_HOST=localhost

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

Abbiamo già presente 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 di messaggio sono:

To: SteveT <steve.tuck@sparkpost.com> From: Steve <steve@thetucks.com> Subject: 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

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="" Inviando tests/fancy-HTML-to-smt.eml From: Steve <steve@thetucks.com> To: SteveT <steve.tuck@sparkpost.com> OK - in 0.028 secondi

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

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

Funzionalità bonus: DKIM con PowerMTA

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

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

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

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

  • Aggiungi quanto segue 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 una virtual-mta invece.)

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

Il record DNS passa il controllo OK tramite MX Toolbox, e DKIM è ora attivo.

MX Toolbox interface showing successful DKIM record verification with all tests passing for email authentication security.

PowerMTA supporta vari mezzi di iniezione del messaggio, inclusa una directory di "pickup" 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 di default sul TCP porta 25, accettando solo traffico locale.

export SMTP_HOST=localhost

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

Abbiamo già presente 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 di messaggio sono:

To: SteveT <steve.tuck@sparkpost.com> From: Steve <steve@thetucks.com> Subject: 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

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="" Inviando tests/fancy-HTML-to-smt.eml From: Steve <steve@thetucks.com> To: SteveT <steve.tuck@sparkpost.com> OK - in 0.028 secondi

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

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

Funzionalità bonus: DKIM con PowerMTA

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

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

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

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

  • Aggiungi quanto segue 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 una virtual-mta invece.)

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

Il record DNS passa il controllo OK tramite MX Toolbox, e DKIM è ora attivo.

MX Toolbox interface showing successful DKIM record verification with all tests passing for email authentication security.

PowerMTA supporta vari mezzi di iniezione del messaggio, inclusa una directory di "pickup" 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 di default sul TCP porta 25, accettando solo traffico locale.

export SMTP_HOST=localhost

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

Abbiamo già presente 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 di messaggio sono:

To: SteveT <steve.tuck@sparkpost.com> From: Steve <steve@thetucks.com> Subject: 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

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="" Inviando tests/fancy-HTML-to-smt.eml From: Steve <steve@thetucks.com> To: SteveT <steve.tuck@sparkpost.com> OK - in 0.028 secondi

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

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

Funzionalità bonus: DKIM con PowerMTA

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

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

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

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

  • Aggiungi quanto segue 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 una virtual-mta invece.)

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

Il record DNS passa il controllo OK tramite MX Toolbox, e DKIM è ora attivo.

MX Toolbox interface showing successful DKIM record verification with all tests passing for email authentication security.

3. SMTP Injection Verso Momentum

Momentum supporta vari mezzi di iniezione di messaggi, inclusi API e SMTP. SMTP è il metodo utilizzato qui, verso un host che esegue già Momentum. Lasceremo la sua configurazione invariata, poiché ha già la capacità di accettare iniezioni in arrivo da altri host approvati.

Questa è una versione più piccola di un setup di produzione, dove i nodi di “generation” e i nodi MTA sono separati, ma strettamente collegati tramite una VLAN privata e bilanciatori di carico, trasportando traffico di iniezione SMTP interno.


Diagram showing email flow from a generation server to on-premises MTA (Mail Transfer Agent) via SMTP protocol.


Gli strumenti S/MIME sono installati come prima, e inietteremo messaggi all'indirizzo dell'host SMTP (MTA):

export SMTP_HOST=xx.xx.xx.xx # imposta qui il tuo indirizzo MTA/VIP

Come prima, abbiamo già presente la chiave privata del mittente (steve@thetucks.com.pem) e la chiave pubblica del destinatario (steve.tuck@sparkpost.com.crt) sul nodo di “generation”. Le prime righe del file del messaggio corrispondono a questi indirizzi.

Inviamo il messaggio dal nodo di “generation” con esattamente lo stesso comando di prima, e il messaggio appare nella inbox.

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

Come ci si aspetterebbe, S/MIME coesiste felicemente con la DKIM signing di Momentum.

4. SMTP injection verso SparkPost

In part 2 abbiamo utilizzato il SparkPost transmissions REST API per inviare messaggi. Certo, è anche possibile inviare messaggi a 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 da SparkPost EU, imposta SMTP_HOST come smtp.eu.sparkpostmail.com.
(Vedi qui per ulteriori opzioni – ad esempio, puoi inviare su porta 2525 anziché 587.)

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

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

Visualizzerai:

Apertura connessione SMTP (STARTTLS) a smtp.sparkpostmail.com, porta 587, user="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 sbirciando alle tue spalle.

Proteggere le tue Credenziali

Nota che le variabili d'ambiente potrebbero essere impostate in un file script di shell o simile, per evitare di ridigitare. Se lo fai, si prega di prendersi cura delle 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, quindi esegui:

chmod 0700 my_envs.sh

Avvertenze Relative a SMTP che Potresti Vedere

L'injection SMTP di SparkPost è piuttosto severa, 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 sono semplicemente riportati così come sono dalla libreria SMTP Python, da qui 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 proprio un invito per noi a fare una gara!

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

Ripetendo questo con un file di test più grande (577 KB), 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, il vostro rendimento può variare a seconda della posizione, congestione internet, eccetera, ma le prestazioni difficilmente saranno un problema.

Se avete realmente 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 trasmissioni migliori pratiche – ad esempio da un'attività di supervisore.

Riassumendo …

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

Per ora è tutto! Buona invio di email.

Connettiamoci con un esperto di Bird.
Scopri tutta la potenza del Bird in 30 minuti.

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.

Azienda

Newsletter

Rimani aggiornato con Bird attraverso aggiornamenti settimanali nella tua inbox.

Connettiamoci con un esperto di Bird.
Scopri tutta la potenza del Bird in 30 minuti.

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.

Azienda

Newsletter

Rimani aggiornato con Bird attraverso aggiornamenti settimanali nella tua inbox.

Connettiamoci con un esperto di Bird.
Scopri tutta la potenza del Bird in 30 minuti.

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.

R

Raggiungi

G

Grow

M

Manage

A

Automate

Azienda

Newsletter

Rimani aggiornato con Bird attraverso aggiornamenti settimanali nella tua inbox.