Come implementare la crittografia TLS su Postfix
Nell'ottica di configurare un server di posta, per inviare le nostre email o newsletter, cercando di metter in atto tutti gli accorgimenti necessari per inviare email riducendo al minimo la possibilità di finire in spam, vediamo in questo articolo come implementare la crittografia TLS nell'invio delle nostre mail.
Perchè implementare la crittografia TLS?
Lo vediamo in questa immagine. Abbiamo inviato una email, senza crittogragfia TLS, ad un indirizzo di posta Gmail.
Il risultato è il seguente: la mail viene evidenziata con un lucchetto rosso, ed aprendo il dettaglio capiamo il perchè
Così invece si presenta Gmail nel caso in cui riceva una email con crittografia TLS
Vediamo adesso come implementare la crittografia TLS su un server di posta come Postfix
In questo articolo utilizziamo come sistema operativo Centos 7.
1: Il certificato SSL
Per prima cosa, occorre un certificato SSL.
Un certificato SSL (Secure Sockets Layer) ed il suo successore TLS (Transport Layer Security), proteggono le comunicazioni via Internet, assicurando che le informazioni fornite dagli utenti sul web rimangano riservate e non vengano in alcun intercettate da terze parti.
Ne abbiamo sentito parlare molto in questo periodo, con riferimento al passaggio dei siti web da http ad https.
Vediamo come utilizzare un certificato anche per l'invio della posta.
I certificati vengono rilasciati da un’Autorità di Certificazione (CA) e ... costano, anche se esistono fornitori di certificati gratuiti come Let's Encrypt.
Come si procede per ottenere un cerificato da una CA?
- si crea sul proprio server una chiave privata (è un file con estensione ".key")
- si crea una richiesta di certificato (è un file con estensione ".csr")
- si invia la richiesta di certificato alla CA
- la CA crea il certificato
- si riceve dalla CA il certificato
Nel nostro esempio vogliamo risparmiare per cui creiamo un certificato autofirmato: in pratica lo generiamo noi, simulando di essere noi la CA.
Procediamo con i 5 punti descritti pocanzi
- creiamo una chiave privata
Utilizziamo a questo scopo il programma openssl.
Se openssl non fosse installato procediamo alla sua installazione con yum
Adesso possiamo generare la chiave privata# yum install openssh
# openssl genrsa -out ca.key 2048
Abbiamo ottenuto un file con nome "ca.key"
- Creiamo la richiesta di certificato
# openssl req -new -key ca.key -out ca.csr
Verrà richiesto l'inserimento di alcune informazioni
You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:IT State or Province Name (full name) []:Italia Locality Name (eg, city) [Default City]:Milano Organization Name (eg, company) [Default Company Ltd]:Pippo Organizational Unit Name (eg, section) []:1 Common Name (eg, your name or your server's hostname) []:pippo.mioserver.com Email Address []:postmaster@mioserver.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
Tralasciate la richiesta di "challenge password" e "optional company name"
Mentre è importantissimo indicare come "Common name" il nome nost della macchina "fully qualified" (FQDN), cioè il nome host della macchina + il dominio della macchina raggiungibile da web. Occorre cioè che per quel server sia stato configurato un dominio registrato (un dominio come quelli che usiamo per i siti web) che punti a quell'IP tramite la creazione di un record A nel DNS del dominio.
Per sapere il nome host fully qualified nel nostro server utlizziamo il comando# hostname --fqdn server1.servertest.com
Nel nostro esempio abbiamo un server a cui abbiamo dato nome host "server1" e come dominio "servertest.com", da cui si ottiene il FQDN "server1.servertest.com"
Abbiamo quindi ottenuto una richiesta di certificato, nel nostro esempio il file "ca.csr" - invio della richiesta di certificato alla CA
Abbiamo detto che simuliamo di essere noi la CA per cui... saltiamo questo punto - la CA (noi!) crea il certificato
openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt
Abbiamo creato un certificato, nel nosto esempio il file "ca.crt", di durata 365 giorni
- riceviamo il certificato dalla CA
Essendo noi la CA... il certificato ce l'abbiamo già avendolo creato al punto precedente!
2 - Configurazione diPostfix
Bene, adesso che abbiamo "ricevuto" il certificato lo dobbiamo installare
- Per prima cosa creiamo, sotto la directory di postfix, una nuova directory chiamata "tls", dove al suo interno spostiamo i file creati
# mkdir /etc/postfix/tls # mv ca.csr /etc/postfix/tls/ckomail.csr # mv ca.key /etc/postfix/tls/ckomail.key # mv ca.crt /etc/postfix/tls/ckomail.crt
- Modifichiamo il file di configurazione di postfix "main.cf"
ed al suo interno, al fondo, aggiungiamo queste righe# vi /etc/postfix/main.cf
# TLS configuration starts here tls_random_source = dev:/dev/urandom # SMTP from your server to others smtp_tls_security_level = may smtpd_tls_security_level = may smtpd_tls_cert_file = /etc/postfix/tls/ckomail.crt smtpd_tls_key_file = /etc/postfix/tls/ckomail.key smtpd_tls_loglevel = 1
- Salviamo, e riavviamo postfix
# service postfix restart
- Verifichiamo che TLS sia stato correttamente implementato, utilizzando in locale telnet
Dopo la riga "220 server1.servertest.com ESMTP Postfix (Debian/GNU)" scriviamo "EHLO test"# telnet localhost 25 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 server1.servertest.com ESMTP Postfix EHLO test 250-mail.rigacci.org 250-PIPELINING 250-SIZE 20480000 250-VRFY 250-ETRN 250-STARTTLS 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN STARTTLS 220 2.0.0 Ready to start TLS quit
Dovremmo quindi leggere una riga "250-STARTTLS" .... scriviamo quindi "STARTTLS", e se TLS è stato correttamente implementato dovremmo vedere indicato "220 2.0.0 Ready to start TLS"
Scriviamo "quit" per uscire. - Inviamo una mail di prova
Abbiamo implementato TLS su Postfix, proviamo ad inviare una email di prova su gmail all'indirizzo "pippo@gmail.com", con oggetto "Mail di prova" e testo "Test invio". Nel nostro esempio abbiamo utilizzato il programma MUTT
echo "Test invio" | mutt -s "Mail di prova" pippo@gmail.com
Controlliamo su gmail, e se tutto è andato correttamente a buon fine la nostra mail si presentera così:
Abbiamo così concluso la spiegazione di come implementare TLS su Postfix.
Stay tuned!
Potrebbe interessarti
- Come leggere un report DMARC aggregato.
- Gestire la coda di Postfix
- Postifix: recapitare un messaggio ad un indirizzo email alternativo, in una coda di invio
- Postfix: come cancellare gli invii accodati (queued) e destinati ad uno specifico dominio
- Cosa sono il record PTR ed il reverse DNS, e come vengono utilizzati dai server di posta per verificare l'autenticità del mittente.
- Creiamo un record DMARC per definire le azioni da eseguire nel caso in cui i controlli SFP e DKIM falliscano.
- Creare un record DKIM per verificare l’autenticità del contenuto della mail ed inviare una email senza rischio spam
- Configurare il record SPF per rafforzare la reputazione del mittente ed inviare una newsletter a prova di spam