back to top

Installare Dovecot

Nella panoramica fatta ad inizio guida abbiamo detto che avremmo installato Dovecot come MDA (Mail Delivery Agent). Un MDA è un software con il compito di accettare messaggi email in entrata per distribuirli alle varie mailbox degli utenti destinatari se l’indirizzo è locale, o ad un altro server SMTP se il destinatario è remoto.

Dovecot è uno dei più diffusi server IMAP e POP3 grazie alla sua leggerezza e velocità, senza contare che sin dalla sua nascita gli sviluppatori hanno sempre tenuto in massima considerazione la sicurezza. Ci sono altre alternative anche solo nel mondo Linux (la principale è rappresentata dal software Courier), ma Dovecot andrà benissimo sia per le installazioni con poche mailbox sia per quelle più massicce.

Procediamo quindi con l’installazione di Dovecot e dei suoi demoni:

sudo apt-get install dovecot-imapd dovecot-pop3d dovecot-mysql

La prima modifica da fare sarà quella di specificare a Dovecot la posizione delle nostre mailbox. Dovremo poi dare le specifiche dell’utente che avrà il compito di accedere ad esse. Trasformiamo in istruzioni quanto detto andando a modificare il file di configurazione di Dovecot:

sudo nano /etc/dovecot/dovecot.conf

inserendo in fondo al file:

mail_location = maildir:/var/mail/vmail/%d/%n
mail_privileged_group = vmail
first_valid_uid = 1001

Ancora una volta 1001 è l’uid assegnato al nostro utente vmail.

Occorre poi abilitare l’autenticazione degli utenti virtuali a discapito di quelli locali. Per farlo andiamo a sostituire le direttive userdb e passdb che fanno riferimento a PAM (per l’accesso locale), con le seguenti:

userdb {
driver = sql
args = /etc/dovecot/dovecot-mysql.conf
}
passdb {
driver = sql
args = /etc/dovecot/dovecot-mysql.conf
}

Come possiamo vedere abbiamo specificato in args un file di configurazione che dovrà contenere i parametri di accesso al database. Creiamo quindi il suddetto file:

sudo nano /etc/dovecot/dovecot-mysql.conf

e scriviamo al suo interno le direttive che consistono nei dati di accesso al database e nell’istruzione delle query per ottenere username e password degli utenti virtuali con accesso alle mailbox:

driver = mysql
connect = host=localhost dbname=postfix user=postfixuser password=mia_password client_flags=0
default_pass_scheme = MD5
user_query = SELECT maildir, 1001 AS uid, 1001 AS gid FROM mailbox WHERE username = '%u'
password_query = SELECT password FROM mailbox WHERE username = '%u' AND active = '1'

dove ancora una volta 1001 e 1001 sono uid e gid dell’utente vmail.

Configurazione SSL/TLS

Considerando il delicato compito di Dovecot nell’accesso alle caselle email degli utenti, non possiamo esimerci dal configurare una sicurezza TLS (Transport Layer Security) per proteggere questa operazione. Editiamo il seguente file di configurazione:

sudo nano /etc/dovecot/conf.d/10-auth.conf

decommentiamo e modifichiamo l’istruzione

disable_plaintext_auth = no

salviamo e chiudiamo il file. Andiamo poi ad editare un secondo file:

sudo nano /etc/dovecot/conf.d/10-ssl.conf

qui abilitiamo il supporto SSL/TLS:

ssl = yes

e decommentiamo poi le 2 righe che specificano:

ssl_cert = </etc/dovecot/dovecot.pem
ssl_key = </etc/dovecot/private/dovecot.pem

Da più di un anno il protocollo SSL3 è stato dichiarato insicuro, dal momento che ne sono stati scoperti alcuni exploit. Furono gli stessi sviluppatori a dichiararlo ufficialmente nel settembre del 2014. Se vogliamo mantenere la sicurezza del nostro mailserver al massimo, sarà bene, pertanto, disabilitarlo lasciando attivo solo il protocollo TLS. Questo avrà un minimo impatto sui client dal momento che ormai quasi tutti supportano il TLS. Per disabilitare quanto detto è sufficiente editare il valore ssl_protocols come segue:

ssl_protocols = !SSLv2 !SSLv3

Ora possiamo salvare le modifiche e chiudere il file 10-ssl.conf.

Per creare i certificati SSL dovecot mette a disposizione alcuni script (qui trovate la documentazione), ma nulla ci impedisce di crearli manualmente nel metodo "classico" tramite openssl. Importante sarà però mantenere il percorso indicato nel file 10-auth.conf alle voci ssl_cert e ssl_key:

sudo openssl req -new -x509 -days 365 -nodes -out /etc/dovecot/dovecot.pem -keyout /etc/dovecot/private/dovecot.pem

Inseriamo i valori richiesti per il certificato con i riferimenti del nostro server:

Country Name (2 letter code) [AU]:IT
State or Province Name (full name) [Some-State]:Italy
Locality Name (eg, city) []:Rimini
Organization Name (eg, company) [Internet Widgits Pty Ltd]:mrwebmaster
Organizational Unit Name (eg, section) []:IT Department
Common Name (e.g. server FQDN or YOUR name) []:mail.esempio.com
Email Address []:postmaster@esempio.com  

Attenzione: Il CN (Common Name) deve essere uguale all’hostname del server. I client infatti verificheranno che il CN specificato nel certificato coincida con l’hostname del server per l’autenticazione.

Terminate così le configurazioni di dovecot dobbiamo riavviare il servizio:

sudo service dovecot restart

Autenticazione SMTP tramite Dovecot

Un mailserver, nello specifico un SMTP server, ha il compito di decidere quando un client SMTP è autorizzato ad inviare mail a destinazioni remote o solamente a destinatari gestiti dallo stesso server SMTP. Tipicamente un server SMTP accetta mail verso destinazioni remote quando il client che inoltra la richiesta risiede sulla stessa rete. I client al di fuori delle rete del server necessitano invece di un modo alternativo per autenticarsi. Per venire incontro a questa esigenza Postfix supporta l’autenticazione SASL. SASL (Simple Authentication and Security Layer) è una architettura software per l’autenticazione e la sicurezza all’interno dei protocolli Internet, SMTP nel nostro caso specifico. Attraverso di esso un client può autenticarsi presso Postfix per poter inviare mail a server SMTP esterni. Postfix non implementa nativamente al suo interno SASL, perciò deve appoggiarsi a moduli esterni. Possiamo verificare quali SASL supporta Postfix eseguendo il comando:

postconf -a

Come vediamo c’è anche Dovecot nella lista ed è quello che noi andremo ad usare, dal momento che già lo abbiamo installato e configurato. Per prima cosa andiamo ad editare il file 10-master.conf:

sudo nano /etc/dovecot/conf.d/10-master.conf

aggiungendo in fondo al file

service auth {
  ...
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix        
  }
  ...
}

I software di posta elettronica di Microsoft (Outlook, Windows Mail, ecc..) non rispettano lo standard di autenticazione SASL PLAIN, pertanto se c’è la possibilità che i nostri utenti possano usare questi client di posta, aggiungiamo anche la seguente istruzione in fondo al file per renderli compatibili con il nostro mailserver:

auth_mechanisms = plain login

Chiudiamo e salviamo il file per passare a modificare le impostazioni su Postfix. Il primo file da modificare è main.cf:

sudo nano /etc/postfix/main.cf

al quale dobbiamo aggiungere in fondo le seguenti righe di istruzione:

smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

In questo modo abbiamo detto a Postfix che l’autenticazione SASL è abilitata ed è quella fornita da Dovecot.

Per ultimo andiamo a modificare il file master.cf per configurare Postfix in modo che accetti solo le sessioni criptate con TLS, per una maggiore sicurezza:

sudo nano /etc/postfix/master.cf

e modifichiamo il file aggiungendo le seguenti righe:

submission inet n - n - - smtpd
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth
  -o smtpd_sasl_security_options=noanonymous
  -o smtpd_sasl_local_domain=$myhostname
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o smtpd_sender_login_maps=hash:/etc/postfix/virtual
  -o smtpd_sender_restrictions=reject_sender_login_mismatch
  -o smtpd_recipient_restrictions=reject_non_fqdn_recipient,reject_unknown_recipient_domain,permit_sasl_authenticated,reject

Salviamo e chiudiamo il file.

Le ultime versioni di Dovecot hanno portato sostanziali cambiamenti nella forma delle espressioni dei file di configurazione. Per ottimizzare quando scritto, Dovecot mette a disposizione un tool che in automatico ci scrive un nuovo file con le istruzioni formalmente corrette. Approfittiamone!

sudo doveconf -n > dovecot-new.conf

Come vediamo compaiono messaggi descrittivi sui warning sistemati. Possiamo ora andare a sostituire il file così creato con il file dovecot.conf che viene letto:

sudo mv dovecot-new.conf /etc/dovecot/dovecot.conf

Ora riavviamo i servizi Postfix e Dovecot.

sudo service postfix restart
sudo service dovecot restart

In alternativa possiamo anche riavviare tutto il server:

sudo reboot

Testare l’autenticazione SMTP

Per verificare che l’autenticazione SMTP tramite Dovecot SALS sia andata a buon fine colleghiamoci, tramite un altro terminale, alla porta 25 (quella dedicata al protocollo SMTP) usando telnet:

telnet ip_del_server 25

Una volta che il server ci ha risposto, lanciamo una richiesta EHLO (la versione più descrittiva dell’equivalente HELO) per presentarci e leggere alcune informazioni del servizio interrogato:

ehlo davide@prova.com

La prima risposta conterrà il nome del mailserver, le seguenti invece le varie funzionalità offerte. Se le istruzioni appena inserite per abilitare l’autenticazione sono state scritte correttamente, allora tra le varie funzionalità vedremo anche:

250-AUTH PLAIN LOGIN

Ovviamente potremo verificare l’autenticazione anche quando andremo a collegare un mail client al nostro server.

Pubblicità