Ubuntu ssl con postfix davecot

 

In questo articolo descriverò in breve come installare un certificato SSL sul server di posta che utilizza Postfix/Dovecot come demone/MDA settando in maniera corretta le configurzioni per ognuno in modo da garantire un elevato grado di sicurezza.

A scopo di test, è stato utilizzato un certificato PositiveSSL Comodo (ora Sectigo).

Il test è stato eseguito sul seguente stack di server:

Ubuntu 16.04
Postfix 3.1.0
Dovecot 2.2.22

Preparazione dei certificati

Se non disponi ancora di alcun certificato emesso (attendibile) per il nome host del tuo server di posta, è necessario acquistarlo (es ssls.com), generare un CSR e attivarlo.

La prima cosa che devi fare è caricare e concatenare i file del certificato sul server. Puoi seguire le azioni seguenti:

1. Carica il file del certificato yourdomainname.crt sul server insieme al bundle CA. Tieni presente che il bundle CA può essere in un singolo file (example.ca-bundle) o in file separati (COMODORSADomainValidationSecureServerCA.crt, COMODORSAAddTrustCA.crt, AddTrustExternalCARoot.crt come nel nostro caso). I seguenti file devono essere salvati nel modo seguente:

i file del certificato e del bundle CA nella directory /etc/ssl/certs/;

la chiave privata corrispondente (example_com.key) nella cartella /etc/ssl/private/.

2.Unisci i file caricati in uno utilizzando uno dei comandi seguenti:

2.1. Crea un file con il certificato del server e la catena CA:

cat /etc/ssl/certs/yourdomainname.crt /etc/ssl/certs/yourdomainname.ca-bundle >> /etc/ssl/certs/certificate.crt
cat /etc/ssl/certs/yourdomainname.crt /etc/ssl/certs/COMODORSADomainValidationSecureServerCA.crt /etc/ssl/certs/COMODORSAAddTrustCA.crt /etc/ssl/certs/AddTrustExternalCARoot.crt >> /etc/ssl/certs/certificate.crt

2.2. Un file con il certificato combinato, la catena CA e la chiave privata può essere accettabile per Postfix e Dovecot. Uno dei comandi seguenti può essere utilizzato per crearlo:

cat /etc/ssl/certs/yourdomainname.crt /etc/ssl/certs/yourdomainname.ca-bundle /etc/ssl/private/yourdomainname.key >> /etc/ssl/certs/certificate_and_key.crt
cat /etc/ssl/certs/yourdomainname.crt /etc/ssl/certs/COMODORSADomainValidationSecureServerCA.crt /etc/ssl/certs/COMODORSAAddTrustCA.crt /etc/ssl/certs/AddTrustExternalCARoot.crt /etc/ssl/private/yourdomainname.key >> /etc/ssl/certs/certificate_and_key.crt

Per controllare il contenuto del nuovo file in questione, eseguire il seguente comando:

cat /etc/ssl/certs/certificate.crt

o

cat /etc/ssl/certs/certificate_and_key.crt

È necessario verificare che non ci siano spazi vuoti all'interno del certificato con codifica PEM e nella keychain.

Se trovi spazi, devono essere rimossi manualmente: apri il file in un editor di testo come "vi" o "nano" e rimuovili.

Modifica file di configurazione Postfix e Dovecot per abilitare SSL / TLS su porte specifiche

Il processo di invio e ricezione della posta su Internet è un sistema complesso di endpoint e istanze intermedie (server di posta e software client) etichettati come user agents di posta (MUA), agenti di invio della posta (MSA), agenti di trasferimento della posta (MTA) e mail delivery agents (MDA) a seconda delle funzioni che svolgono. Normalmente, un'e-mail viene passata dagli agents sopra menzionati e vengono utilizzati diversi protocolli di trasporto in ogni fase; il protocollo di invio, il protocollo SMTP (Simple Mail Transfer Protocol), il protocollo POP3 (Internet Message Access Protocol) e IMAP).

La tabella seguente mostra l'uso delle porte per l'esecuzione di protocolli di trasporto specifici.

Protcollo Funzione Testo in chiaro/
Sessione criptata
Solo sessione
criptata
POP3 Posta in arrivo 110 995
IMAP  Posta in arrivo 143 993
SMTP  Posta in uscita 25 465
Submission Posta in uscita 587  

L'approccio TLS offre la possibilità di utilizzare le porte 25, 110, 143 e 587 in modalità testo normale (non crittografato) o protetto (crittografato). Secondo questo approccio, il comando STARTTLS viene richiesto quando si verifica una sessione di testo attiva esistente.

Tecnicamente, l'utilizzo delle porte 465, 993 e 995 e il modo in cui viene utilizzato il protocollo HTTP su SSL / TLS sono simili: 1) le porte protette vengono scollegate dalle loro controparti "non protette"; 2) qualsiasi scambio di dati può essere eseguito dopo aver stabilito una sessione crittografata.

NOTA: sebbene la porta 465 non sia elencata come porta SMTPS negli standard ufficiali della documentazione IANA, viene utilizzata per servire il traffico di posta in uscita crittografato dagli amministratori del server di posta.

Entrambe le tecniche sopra descritte sono considerate utilizzate nel sistema di posta Internet oggi giorno. Per proteggere la tua posta, è meglio installare un certificato SSL su ogni porta di posta che intendi utilizzare.

I passaggi seguenti ti aiuteranno a installare il tuo certificato SSL per entrambe le porte di posta: in entrata e in uscita:


Porta 25 (SMTP con STARTTLS)

Apri per modificare il file denominato main.cf (file di configurazione di Postfix). Di solito puoi trovarlo nella directory /etc/postfix/.
Individua la sezione dei parametri TLS nel file main.cf e apporta le modifiche ai seguenti valori di determinate direttive. Guarda l'esempio di seguito:

- se salvi il certificato e la chiave privata in file separati:

smtpd_tls_cert_file = /etc/ssl/certs/certificate.crt
smtpd_tls_key_file = /etc/ssl/private/yourdomainname.key

 - se salvi il certificato e la chiave privata in un unico file:

smtpd_tls_cert_file = /etc/ssl/certs/certificate_and_key.crt
smtpd_tls_key_file = $smtpd_tls_cert_file

NB: è necessario assicurarsi che la direttiva smtpd_use_tls sia impostata su yes:

smtpd_use_tls = yes

Una volta terminato, chiudi il file main.cf e salva le modifiche apportate.

Porte 587 (invio con STARTTLS) e 465 (SMTPS)

Individua il file master.cf di Postfix nella directory /etc/postfix/ e aprilo;
Quando viene aperto, decommenta (o modifica se necessario) le righe successive:

- per aprire e proteggere la porta 587:

submission inet n – y – – smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=may
-o smtpd_sasl_auth_enable=yes

- per aprire e proteggere la porta 465:

smtps inet n – y – – smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes

Salva il file e chiudi.

Porte 110 (POP3 con STARTTLS), 143 (IMAP con STARTTLS), 993 (IMAPS) e 995 (POP3S)

Se devi installare un certificato SSL per Dovecot, è essenziale seguire i passaggi successivi:

1. Aprire il file denominato 10-ssl.conf. Questo file di solito può essere posizionato nella directory /etc/dovecot/conf.d/.

2. Modifica le seguenti righe:

- se salvi il certificato e la chiave privata in file separati:

ssl_cert = /etc/ssl/certs/certificate.crt
ssl_key = /etc/ssl/private/yourdomainname.key

- se salvi il certificato e la chiave privata in un unico file:

ssl_cert = /etc/ssl/certs/cert_and_key.crt
ssl_key = /etc/ssl/certs/cert_and_key.crt

3.Assicurati che la direttiva ssl sia impostata su yes:

ssl = yes

4. Una volta apportate le modifiche, chiudere il file 10-ssl.conf.

Se vengono eseguiti i passaggi sopra menzionati, il certificato SSL viene installato per tutte le porte in entrata ora.

Nota: se hai la versione 1.x di Dovecot, le direttive per i certificati SSL nei file di configurazione potrebbero differire leggermente:

È necessario verificare se /etc/dovecot/dovecot.conf ha la seguente riga:

protocols = imap pop3 imaps pop3s

Modifica il file /etc/dovecot/conf.d/10-ssl.conf nel modo seguente:

ssl_disable = no

- Se salvi il certificato e la chiave privata in file separati:

ssl_cert_file = /etc/ssl/certs/certificate.crt
ssl_key_file = /etc/ssl/private/yourdomainname.key

- Se salvi il certificato e la chiave privata in un unico file:

ssl_cert_file = /etc/ssl/certs/cert_and_key.crt
ssl_key_file = /etc/ssl/certs/cert_and_key.crt

Consigli utili

Di seguito puoi trovare le informazioni relative ad alcune impostazioni aggiuntive che possono essere utili per configurare la gestione SSL / TLS del tuo server di posta. Per ulteriori informazioni, puoi fare riferimento alla documentazione ufficiale di Postfix e Dovecot anche su questo argomento.

È possibile utilizzare la porta STARTTLS su Postfix in modalità "wrapper" con la direttiva smtpd_tls_wrappermode. Invece di mostrare il supporto STARTTLS e aspettare la richiesta da un client remoto, questa opzione aiuta a eseguire una connessione sicura fin dall'inizio. La seguente direttiva dovrebbe essere aggiunta a /etc/postfix/master.cf, ad esempio:

smtps inet n – n – – smtpd
-o smtpd_tls_wrappermode=yes

Su Dovecot, quando provi ad accedere, c'è la possibilità di impostare la direttiva ssl sul valore richiesto (ssl = required), il che implica la forzatura dell'handshake SSL.

In questi casi, la password verrà inviata in modo sicuro, mentre con ssl = yes, ai client di posta elettronica non viene richiesto di utilizzare SSL / TLS in precedenza. Con questa impostazione è possibile applicare meccanismi di autenticazione sia in chiaro che non in chiaro.

Per disattivare il meccanismo di autenticazione in chiaro, è possibile utilizzare la direttiva disable_plaintext_auth (/etc/dovecot/conf.d/10-auth.conf):

disable_plaintext_auth = yes

Le seguenti direttive su Dovecot (/etc/dovecot/dovecot.conf) possono essere utilizzate per eliminare i cifrari che è meglio non usare a causa della bassa crittografia:

ssl_dh_parameters_length = 2048
ssl_cipher_list = ALL:!LOW:!SSLv2:!EXP:!aNULL

Per escludere alcune cifrature o protocolli per la crittografia opportunistica (STARTTLS) o obbligatoria (SSL normale), è possibile utilizzare le seguenti direttive in /etc/postfix/main.cf e assegnare loro i valori corrispondenti:

- per TLS obbligatorio

smtpd_tls_mandatory_exclude_ciphers = [cipher] smtpd_tls_mandatory_protocols = ![protocol]

- per TLS opportunistico

smtpd_tls_exclude_ciphers = [cipher]
smtpd_tls_protocols = ![protocol]

Per impostare l'elenco di crittografia lato server, più preferibile rispetto a quello lato client, è possibile utilizzare queste direttive:

- su Dovecot (/etc/dovecot/conf.d/10-ssl.conf)

ssl_prefer_server_ciphers = yes

- su Postfix (/etc/postfix/main.cf)

tls_preempt_cipherlist = yes

Come controllare l'installazione SSL

OpenSSL

Il toolkit OpenSSL aiuta a controllare l'installazione del certificato SSL su un server sia in remoto che localmente.

Per controllare le porte STARTTLS, è necessario eseguire il seguente comando. Sostituisci [porta] con il numero di porta e [protocollo] con il valore smtp, pop3 o imap:

openssl s_client -connect example.com:[port] -servername example.com -starttls [protocol]

Per controllare le porte non STARTTLS, utilizzare il seguente comando:

openssl s_client -connect example.com:[port] -servername example.com

Come controllare la tua connessione sicura

Per verificare la connettività del server di posta su SSL / TLS, è possibile utilizzare i controlli online elencati di seguito.

È necessario specificare il nome host del server e il numero di porta o un account di posta elettronica esistente ed eseguire il test.

Strumenti SSL: https://ssl-tools.net/mailservers

CheckTLS: https://www.checktls.com/index.html

MXToolbox: https://mxtoolbox.com/diagnostic.aspx

Bridge high-tech: https://www.htbridge.com/ssl