Dovecot per ISP con debian wheezy: differenze tra le versioni
Riga 93: | Riga 93: | ||
user = postfix | user = postfix | ||
group = postfix | group = postfix | ||
} | |||
unix_listener auth-master { | |||
mode = 0660 | |||
user = vmail | |||
group = vmail | |||
} | } | ||
</pre> | </pre> |
Versione delle 20:14, 11 set 2014
|
Creazione utente dovecot
E' ora di configurare Dovecot, che svolgerà i seguenti compiti:
- ricevere le email da Postfix e salvarle su disco
- controllare le quote disco
- eseguire regole e filtri user-based
- mettere a disposizione i protocolli POP3 e IMAP per gli utenti
Prima di iniziare, però, è bene concedere un occhio alla sicurezza creando un nuovo utente di sistema a cui attribuiremo la proprietà di tutte le mailboxes. Con il comando seguente creeremo l'utente vmail
con UID 5000 e il gruppo vmail
con GID 5000. Ovviamente è bene controllare che i valori UID e GID non siano già in uso nel sistema; altrimenti sarà possibile utilizzare un qualsiasi valore non in uso compreso tra 1000 e 65000:
# groupadd -g 5000 vmail # useradd -g vmail -u 5000 vmail -d /var/vmail -m
Assicuriamoci che la directory abbia i giusti permessi:
# chown -R vmail:vmail /var/vmail # chmod u+w /var/vmail
Installazione Dovecot
Installiamo i pacchetti che utilizzeremo nella nostra configurazione:
# apt-get install dovecot-mysql dovecot-pop3d dovecot-imapd dovecot-managesieved
Configurazione
Siamo pronti per iniziare. I files di configurazione di Dovecot si trovano in /etc/dovecot
.
Fino a Debian Squeeze la configurazione di Dovecot era tutta contenuta in due file; da Debian Wheezy la configurazione è stata spezzata in una trentina di file, contenuti tutti nella directory /etc/dovecot/conf.d. Il file di configurazione principale /etc/dovecot/dovecot.conf non richiede alcuna modifica e attraverso la direttiva
!include conf.d/*.conf
carica tutti i file presenti in /etc/dovecot/conf.d/ che terminano in ".conf" in sequenza. Quindi "10-auth.conf" sarà caricato per primo e "90-quota.conf" per ultimo. Il grosso vantaggio di questa situazione è che potremo modificare o rimpiazzare parti della configurazione senza sovrascriverla interamente; lo svantaggio è che la migrazione da una versione precedente di Dovecot può diventare un'operazione difficoltosa.
Diamo uno sguardo ai file presenti nella directory di configurazione conf.d.
10-auth.conf
Se ci aspettiamo di dover servire client che utilizzano Microsoft Outlook come applicazione per la posta elettronica, dovremo cambiare il meccanismo di autenticazione in:
auth_mechanisms = plain login
Alla fine del file troveremo elencati i vari backend di autenticazione che Dovecot può utilizzare. Di default utilizza l'autenticazione tramite system users, ma a noi interessa abilitare un database MySQL, quindi modifichiamo la sezione come segue:
#!include auth-system.conf.ext !include auth-sql.conf.ext #!include auth-ldap.conf.ext #!include auth-passwdfile.conf.ext #!include auth-checkpassword.conf.ext #!include auth-vpopmail.conf.ext #!include auth-static.conf.ext
auth-sql.conf.ext
Modifichiamo ora il file di configurazione SQL.
Commentiamo la prima sezione standard "userdb" e decommentiuamo e modifichiamo quella subito successiva. I parametri finali devono essere:
passdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext } userdb { driver = static args = uid=vmail gid=vmail home=/var/vmail/%d/%n }
Attenzione: deve esserci attiva una sola sezione "userdb" (il file d'esempio ne contiene invece due, di cui una decommantata).
Attenzione: c'è un'altra sezione molto simile a quella che vogliamo, ma utilizza "%u" al posto di "%d/%n". Occorre stare attenti a non confonderle, perchè la differenza di variabili influenza il percorso di memorizzazione delle maildir.
10-mail.conf
Cambiamo la direttiva mail_location in
mail_location = maildir:/var/vmail/%d/%n/Maildir
Questa sarà la directory dove Dovecot cercherà le email di ogni specifico utente. Ad esempio l'utente john@example.org avrà le sue email archiviate in /var/vmail/example.org/john/Maildir.
Cambiamo la direttiva auth_socket_path in
auth_socket_path = /var/run/dovecot/auth-master
Cerchiamo la sezione namespace inbox. Se abbiamo già archiviato email sul server e stiamo aggiornando il nostro sistema da Squeeze a Wheezy, allora dobbiamo modificare la direttiva separator in:
separator = .
per mantenere la retrocompatibilità della configurazione.
10-master.conf
Nella sezione service auth dobbiamo inserire:
# Postfix smtp-auth unix_listener /var/spool/postfix/private/auth { mode = 0660 user = postfix group = postfix } unix_listener auth-master { mode = 0660 user = vmail group = vmail }
Gli altri servizi possono essere lasciati come sono.
10-ssl.conf
Creiamo un certificato SSL per i servizi Pop3 3 Imaps:
# openssl req -new -x509 -days 3650 -nodes -newkey rsa:4096 -out /etc/ssl/certs/mailserver.pem -keyout /etc/ssl/private/mailserver.pem
e proteggiamolo:
# chmod 600 /etc/ssl/private/mailserver.pem
Quindi indichiamo a Dovecot dove si trovano questi certificati, inserendo:
ssl_cert = </etc/ssl/certs/mailserver.pem ssl_key = </etc/ssl/private/mailserver.pem
15-lda.conf
In questo file dobbiamo abilitare il plugin sieve, che, in parole povere, è un sistema per gestire le regole email a livello server. Cerchiamo la sezione protocol lda verso la fine del gile e aggiungiamo sieve alla lista dei plugin:
protocol lda { # Space separated list of plugins to load (default is global mail_plugins). mail_plugins = $mail_plugins sieve }
/etc/dovecot/dovecot-sql.conf.ext
Questo file è richiamato dal file /etc/dovecot/conf.d/auth-sql.conf.ext e dice a Dovecot come accedere al database MySQL e dove trovare le informazioni sugli account. Accertiamoci che contenga le linee:
driver = mysql connect = host=127.0.0.1 dbname=mailserver user=mailuser password=mailuser2009 default_pass_scheme = PLAIN-MD5 password_query = SELECT email as user, password FROM virtual_users WHERE email='%u';
ponendo attenzione a inserire le credenziali MySQL create in precedenza.
Protezione dei file
Impostiamo le giuste credenziali per il file di configurazione principale:
# chgrp vmail /etc/dovecot/dovecot.conf # chmod g+r /etc/dovecot/dovecot.conf
e proteggiamo il file di configurazione SQL in modo che nessuno possa scoprire la password del database:
# chown root:root /etc/dovecot/dovecot-sql.conf.ext # chmod go= /etc/dovecot/dovecot-sql.conf.ext
Infine riavviamo Dovecot:
# service dovecot restart
e verifichiamo dai log che non ci siano errori:
# tail -f /var/log/mail.log ... dovecot: master: Dovecot v2.1.7 starting up (core dumps disabled)
Collegamento da Postfix a Dovecot
OK, fin qui è stato tutto bello, però adesso che dovecot è stato istruito a dovere è necessario indicare a postfix come collegarsi a dovecot.
Procediamo con ordine.
Ma come vanno trattate queste mail?
Il nostro obiettivo è archiviare le mail sull'hard disk del server; normalmente questo compito è svolto dallo stesso Postfix, che al suo interno ha un piccolo mail delivery agent (MDA) chiamato virtual. Poichè però abbiamo deciso di utilizzare Dovecot per fornire accesso POP3 e IMAP agli utenti, utilizzeremo anche il suo local delivery agent (chiamato Dovecot LDA), che è a mio avviso più ricco e funzionale di virtual.
Per fare in modo che Postfix utilizzi questo agent dobbiamo aggiungere un servizio in coda al file /etc/postfix/master.cf
:
dovecot unix - n n - - pipe flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/dovecot-lda -f ${sender} -d ${recipient}
Nota: la seconda riga deve essere indentata con degli spazi e non con il TAB.
A questo punto non resta che riavviare Postfix:
# service postfix restart
e fare in modo che utilizzi il servizio appena creato per lo smistamento delle email, modificando il file /etc/postfix/main.cf
nella maniera vista in precedenza:
# postconf -e virtual_transport=dovecot # postconf -e dovecot_destination_recipient_limit=1
Da adesso in poi Postfix smisterà le email in arrivo al programma di Dovecot /usr/lib/dovecot/deliver
.
Sistemiamo i permessi di Dovecot
ATTENZIONE Permessi sbagliati sui file di funzionamento di dovecot comportano l'irrimediabile perdita della posta in arrivo |
da controllare: i permessi in /var/run/dovecot/, non mi è ancora chiaro quali debbano essere. Mi è capitato di perdere delle email perche lda non riusciva a leggere il file /var/run/dovecot/auth-master.
Impostiamo le giuste credenziali per il file di configurazione principale:
# chgrp vmail /etc/dovecot/dovecot.conf # chmod g+r /etc/dovecot/dovecot.conf
per lo spool di Postfix:
# chown postfix:postfix /var/spool/postfix/private/auth # chmod 666 /var/spool/postfix/private/auth
e proteggiamo il file di configurazione SQL in modo che nessuno possa scoprire la password del database:
# chown root:root /etc/dovecot/dovecot-sql.conf.ext # chmod go= /etc/dovecot/dovecot-sql.conf.ext
Infine riavviamo Dovecot:
# service dovecot restart
e verifichiamo dai log che non ci siano errori:
# tail -f /var/log/mail.log ... dovecot: master: Dovecot v2.1.7 starting up (core dumps disabled)
Test della configurazione
Apriamo un altro terminale e controlliamo i log della posta in tempo reale:
# tail -f /var/log/mail.log
Dal primo terminale aperto proviamo a inviare una semplice prima mail di prova:
# echo test | mail john@example.org
Nei log dovremmo trovare qualcosa di simile:
Oct 20 17:42:32 sirius postfix/pickup[22273]: A6F8EB55: uid=0 from=<root> Oct 20 17:42:32 sirius postfix/cleanup[22582]: A6F8EB55: message-id=<20131020154232.A6F8EB55@sirius.localdomain> Oct 20 17:42:32 sirius postfix/qmgr[22274]: A6F8EB55: from=<root@sirius.workaround.org>, size=287, nrcpt=1 (queue active) Oct 20 17:42:32 sirius dovecot: auth-worker(22635): mysql(127.0.0.1): Connected to database mailserver Oct 20 17:42:32 sirius dovecot: lda(john@example.org): msgid=<20131020154232.A6F8EB55@sirius.localdomain>: saved mail to INBOX Oct 20 17:42:32 sirius postfix/pipe[22586]: A6F8EB55: to=<john@example.org>, relay=dovecot, delay=0.14, delays=0.04/0/0/0.1, dsn=2.0.0, status=sent (delivered via dovecot service) Oct 20 17:42:32 sirius postfix/qmgr[22274]: A6F8EB55: removed
All'interno della directory principale di archiviazione, Dovecot dovrebbe aver creato tutta la struttura di directory per il dominio e per l'utente di test:
# find /var/vmail /var/vmail/ /var/vmail/example.org /var/vmail/example.org/john /var/vmail/example.org/john/Maildir /var/vmail/example.org/john/Maildir/dovecot.index.log /var/vmail/example.org/john/Maildir/cur /var/vmail/example.org/john/Maildir/dovecot-uidvalidity.5263f9e8 /var/vmail/example.org/john/Maildir/new /var/vmail/example.org/john/Maildir/new/1382283752.M737526P22632.sirius,S=352,W=362 /var/vmail/example.org/john/Maildir/dovecot-uidvalidity /var/vmail/example.org/john/Maildir/tmp /var/vmail/example.org/john/Maildir/dovecot-uidlist /var/vmail/example.org/john/Maildir/dovecot.index.cache
Invio di email tramite telnet
Installiamo innanzitutto il pacchetto telnet:
# aptitude install telnet
Poi stabiliamo una connessione TCP sulla porta SMTP del nostro server:
# telnet localhost smtp
Dovremmo ottenere come risposta:
Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 mailtest ESMTP Postfix (Debian/GNU)
Ottimo. Postfix è funzionante e possiamo proseguire nella sessione di invio della mail:
ehlo example.com 250-my-new-mailserver 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN mail from:<steve@example.com> 250 2.1.0 Ok rcpt to:<john@example.com> 250 2.1.5 Ok data 354 End data with <CR><LF>.<CR><LF> Hi John, just wanted to drop you a note. . 250 2.0.0 Ok: queued as A9D64379C4 quit
Un controllo al file di log /var/log/mail.log
dovrebbe confermarci che la mail è stata correttamente inviata:
postfix/smtpd[...]: connect from localhost[127.0.0.1] postfix/smtpd[...]: 5FF712A6: client=localhost[127.0.0.1] postfix/cleanup[...]: 5FF712A6: message-id=<...> postfix/qmgr[...]: 5FF712A6: from=<steve@example.com>, size=364, nrcpt=1 (queue active) postfix/pipe[...]: 5FF712A6: to=<john@example.com>, relay=dovecot, ..., status=sent (delivered via dovecot service) postfix/qmgr[...]: 5FF712A6: removed postfix/smtpd[...]: disconnect from localhost[127.0.0.1]
L'invio della mail si è concluso felicemente. Postfix ha determinato correttamente che il dominio di destinazione è uno dei nostri domini virtuali e ha inoltrato la mail al servizio Dovecot.
Controllo della mailbox dell'utente
E' il momento di verificare la corretta ricezione della mail:
$ cd /var/vmail/example.com/john/Maildir $ find . ./cur ./new ./new/1179521979.V801I2bbf7M15352.mailtest ./tmp $ mutt -f . q:Quit d:Del u:Undel s:Save m:Mail r:Reply g:Group ?:Help 1 N May 18 steve@example.c (0.1K) Press ENTER to read the email: From: steve@example.com To: undisclosed-recipients: ; Hi John, just wanted to drop you a note.
La mail è arrivata correttamente. Premiamo q
due volte per uscire da mutt
.
Test del server POP3
Il Post Office Protocol (detto anche POP) è un protocollo che ha il compito di permettere, mediante autenticazione, l'accesso ad un account di posta elettronica presente su di un host per scaricare le e-mail del relativo account. Il pop (nella versione 3) rimane in attesa sulla porta 110 dell'host (di default, ma può anche essere diversa) per una connessione TCP da parte di un client. I messaggi di posta elettronica, per essere letti, devono essere scaricati sul computer, anche se è possibile lasciarne una copia sull'host. Il protocollo POP3 non prevede alcun tipo di cifratura, quindi le password utilizzate per l'autenticazione fra server e client passano in chiaro.
Stabiliamo una connessione POP3 con il nostro server:
$ telnet localhost pop3 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. +OK Dovecot ready. user john@example.com +OK pass summersun +OK Logged in. list +OK 1 messages: 1 474 . retr 1 +OK 474 octets Return-Path: <steve@example.com> X-Original-To: john@example.com Delivered-To: john@example.com Received: from example.com (localhost [127.0.0.1]) by ... (Postfix) with ESMTP id 692DF379C7 for <john@example.com>; Fri, 18 May 2007 22:59:31 +0200 (CEST) Message-Id: <...> Date: Fri, 18 May 2007 22:59:31 +0200 (CEST) From: steve@example.com To: undisclosed-recipients:; Hi John, just wanted to drop you a note. . quit +OK Logging out. Connection closed by foreign host.
Effettuata questa prima verifica di funzionamento, sarà possibile utilizzare un qualsiasi email client per le operazioni quotidiane.
Test del server IMAP
L'Internet Message Access Protocol (IMAP), a volte anche chiamato Interactive Mail Access Protocol, è un protocollo di comunicazione per la ricezione di e-mail. Il significato "Interactive Mail Access Protocol" è stato valido fino alla versione 3, dalla quarta in poi è cambiato in "Internet Message Access Protocol". Il protocollo è stato inventato da Mark Crispin nel 1986 come alternativa più moderna all'utilizzatissimo POP. La porta predefinita del demone IMAP sull'host è la 143. Se si utilizza una connessione sicura tramite SSL, allora la porta è la 993.
Entrambi i protocolli permettono ad un client di accedere, leggere e cancellare le e-mail da un server, ma con alcune differenze. Il protocollo POP 3 scarica la posta direttamente sul PC, eventualmente cancellandola dal server; con il protocollo IMAP è possibile conservare copia delle proprie e-mail sul server, e scaricarle in un secondo momento da altri computer.
Per verificare il corretto funzionamento del server IMAP possiamo utilizzare il client mutt:
$ mutt -f imap://john@example.com@localhost
Oppure, in alternativa, aprire una connessione IMAP attraverso telnet:
$ telnet localhost imap2 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. * OK Dovecot ready. 1 login john@example.com summersun 1 OK Logged in. 2 list "" "*" * LIST (\HasNoChildren) "." "INBOX" 2 OK List completed. 3 select "INBOX" * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) * OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags permitted. * 1 EXISTS * 0 RECENT * OK [UIDVALIDITY 1180039205] UIDs valid * OK [UIDNEXT 3] Predicted next UID 3 OK [READ-WRITE] Select completed. 4 fetch 1 all * 1 FETCH (FLAGS (\Seen) INTERNALDATE ......... 4 OK Fetch completed. 5 fetch 1 body[] * 1 FETCH (BODY[] {474} Return-Path: <steve@example.com> X-Original-To: john@example.com Delivered-To: john@example.com Received: from example.com (localhost [127.0.0.1]) by ... (Postfix) with ESMTP id 692DF379C7 for <john@example.com>; Fri, 18 May 2007 22:59:31 +0200 (CEST) Message-Id: <...> Date: Fri, 18 May 2007 22:59:31 +0200 (CEST) From: steve@example.com To: undisclosed-recipients:; Hi John, just wanted to drop you a note. ) 5 OK Fetch completed. 6 logout * BYE Logging out 6 OK Logout completed.
Test dei server POP3s e IMAPs
La via più veloce per testare i servizi POP3s e IMAPs, gli equivalenti dei servizi visti in precedenza, ma con TLS/SSL abilitato, è utilizzare il client mutt:
$ mutt -f imaps://john@example.com@localhost
Dovecot all'atto dell'installazione genera un certificato self-signed. Potete decidere di utiizzarlo, oppure di generarne un secondo personalizzato:
# openssl req -new -x509 -days 3650 -nodes -out /etc/ssl/certs/dovecot.pem \ -keyout /etc/ssl/private/dovecot.pem
Durante la generazione del certificato vi saranno poste alcune domande:
Generating a 1024 bit RSA private key .........++++++ ............................++++++ writing new private key to '/etc/ssl/certs/dovecot.pem' ----- Country Name (2 letter code) [AU]:DE State or Province Name (full name) [Some-State]:Hamburg Locality Name (eg, city) []:Hamburg Organization Name (eg, company) [Internet Widgits Pty Ltd]:workaround email service Organizational Unit Name (eg, section) []: Common Name (eg, YOUR name) []:mailtest.workaround.org Email Address []:postmaster@workaround.org
L'impostazione più importante è la definizione del Common Name
, dove va inserito il fully-qualified name (FQDN) del mail server. Il certificato generato sarà valido per 10 anni (3650 giorni).
Infine impostiamo i corretti permessi sul file certificato:
# chmod o= /etc/ssl/private/dovecot.pem
e riavviamo Dovecot per fargli prendere il nuovo certificato:
# /etc/init.d/dovecot restart