Table des matières
Dovecot : Migration a partir de Courier
Soit une configuration "Postfix" pour la livraison des e-mails en local, et "Courier" pour servir les clients qui veulent lire leurs e-mails, en IMAP
ou POP3
.
On va migrer rapidement sous "Dovecot 2".
La configuration sera affinée ultérieurement.
~~READMORE~~
“Dovecot 2
” est disponible dans les paquets stables de Debian Wheezy
Etat des lieux
Système
Debian Wheezy AMD64 .
Postfix
Juste pour dire qu'actuellement, c'est “Postfix
” qui va livrer directement les mails dans les “HOME” des utilisateurs.
Ainsi, dans la conf /etc/postfix/main.cf
, il y a (extraits) :
local_recipient_maps = home_mailbox = Maildir/ mailbox_transport =
Sauf quelques cas particuliers (comme un fichier ~/.forward
qui donne d'autres directives), pour une livraison locale, Postfix
va écrire les mails dans:
${HOME_du_USER}/Maildir/new/
Courier
Actuellement en service:
# netstat -anp --tcp | grep courier tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN 1856/couriertcpd tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN 1861/couriertcpd tcp 0 0 0.0.0.0:993 0.0.0.0:* LISTEN 1864/couriertcpd tcp 0 0 0.0.0.0:995 0.0.0.0:* LISTEN 1853/couriertcpd
Pré-configuration
Le but est de minimiser le temps d'interruption et les interventions auprés des utilisateurs finaux: ces derniers ne devraient pas ressentir de changement ! (ou si peu )
Pré-install
Avant de casser courier
, on va simplement installer “dovecot-core
” : juste après, on préparera la configuration.
# aptitude install dovecot-core
Dovecot
démarre, mais il ne fait encore rien de génant. (il n'ecoute aucun port vers l'extérieur)
Toutefois , nous allons arreter Dovecot
maintenant :
# /etc/init.d/dovecot stop
( Parce qu'il semble tenir compte des changements de la conf à l'arrêt aussi…)
Continuons, maintenant, que Dovecot
est arrêté.
La configuration de Dovecot est là dedans: /etc/dovecot
, et plus particulièrement:
/etc/dovecot/dovecot.conf
/usr/share/dovecot/protocols.d/*.protocol
/etc/dovecot/conf.d/*.conf
/etc/dovecot/local.conf
Le fichier local.conf
(qui n'existe pas par défaut) est prévu pour recevoir notre configuration.
La conf par défaut est particulièrement vide (hors commentaires!):
!include_try /usr/share/dovecot/protocols.d/*.protocol dict { #quota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext #expire = sqlite:/etc/dovecot/dovecot-dict-sql.conf.ext } !include conf.d/*.conf !include_try local.conf
… et un tout petit peu plus fournit dans conf.d/*
.
Lorsqu'on aura des modifications a apporter dans local.conf
qui interféreront avec un contenu dans conf.d/*
, on renommera le fichier concerné en “*.conf-DISABLED
” .
Fichiers SSL
On va importer les certificats SSL utilisés par Courier
pour Dovecot
.
Dovecot
n'utilise pas exactement le même format de fichier.
Dans Courier
imapd-ssl
et pop3d-ssl
j'ai respectivement:
TLS_CERTFILE=/etc/courier/ssl-key-imap-tjaouen-fr.pem
TLS_CERTFILE=/etc/courier/ssl-key-pop3-tjaouen-fr.pem
Note: Les clefs sont differentes selon le protocole “imap
” ou “pop3
” .
Pour chaque fichier, on va extraire la clé publique et privée dans 2 fichiers differents.
# cd /etc/dovecot
Le répertoire private/
existe déjà.
IMAP
d'abord:
# sed -ne '/BEGIN CERT/,/END CERT/p' /etc/courier/ssl-key-imap-tjaouen-fr.pem > ssl-imap-tjaouen-fr.pem # sed -ne '/BEGIN RSA PRIV/,/END RSA PRIV/p' /etc/courier/ssl-key-imap-tjaouen-fr.pem > private/ssl-imap-tjaouen-fr.key # chmod 0600 private/ssl-imap-tjaouen-fr.key
POP3
ensuite:
# sed -ne '/BEGIN CERT/,/END CERT/p' /etc/courier/ssl-key-pop3-tjaouen-fr.pem > ssl-pop3-tjaouen-fr.pem # sed -ne '/BEGIN RSA PRIV/,/END RSA PRIV/p' /etc/courier/ssl-key-pop3-tjaouen-fr.pem > private/ssl-pop3-tjaouen-fr.key # chmod 0600 private/ssl-pop3-tjaouen-fr.key
Pré-Configuration
Ipv4 Only
C'est mon choix
Dans local.conf
:
# Desactiver ipv6 en ecoutant qu'ipv4 listen = *
Authentification
… avec PAM
et plain
(c'est la seule chose qui marche avec PAM!)
Par defaut, on voit que les fichiers conf.d/10-auth.conf
et conf.d/auth-system.conf.ext
(inclu par le premier) sont correct par defaut.
Pour mémoire, ils contiennent:
auth_mechanisms = plain !include auth-system.conf.ext
… et :
passdb { driver = pam } userdb { driver = passwd }
Dans un autre Blog-Post , nous verrons que cette configuration devra être changé à cause de “userdb ”… |
Maildir et NameSpace
Une configuration existe déjà dans conf.d/10-mail.conf
:
mail_location = mbox:~/mail:INBOX=/var/mail/%u namespace inbox { inbox = yes }
… et dans conf.d/15-mailboxes.conf
:
namespace inbox { mailbox Drafts { special_use = \Drafts } mailbox Junk { special_use = \Junk } mailbox Trash { special_use = \Trash } mailbox Sent { special_use = \Sent } mailbox "Sent Messages" { special_use = \Sent } }
On va désactiver ces configurations:
# mv conf.d/10-mail.conf{,-DISABLED} # mv conf.d/15-mailboxes.conf{,-DISABLED}
Maildir
Dans le fichier local.conf
:
mail_location = maildir:~/Maildir
NameSpace
Dans le fichier local.conf
:
namespace inbox { inbox = yes mailbox Drafts { auto = no special_use = \Drafts } mailbox Spam { auto = no special_use = \Junk } mailbox Junk { auto = create special_use = \Junk } mailbox Trash { auto = no special_use = \Trash } mailbox Archives { auto = no special_use = \Archive } # Thunderbird/Evolution mailbox Sent { auto = subscribe special_use = \Sent } # Apple Mail mailbox "Sent Messages" { auto = no special_use = \Sent } # Outlook mailbox "Sent Items" { auto = no special_use = \Sent } }
SSL
Il n'a pas été possible de désactiver SSL globalement, et de l'activer uniquement localement selon les protocoles en activité.
Donc , les clés créés lors de l'installation de Dovecot
( dovecot.pem
et private/dovecot.pem
) reste en place et son référencé par la conf via conf.d/10-ssl.conf
, mais ne devrait pas être utilisé (sauf si la conf est cassé!)
Donc, quelque part dans local.conf
:
ssl = yes
( Si “ssl = no
” , alors le SSL ne sera pas utilisé, ni en IMAP
ni en POP3
! )
plain
Dans local.conf
:
Parce qu'il y a des vieux comptes mal configurés (PAS RECOMMANDE) :
disable_plaintext_auth=no
IMAP
Dans local.conf
:
protocol imap { # Imposer notre certificat ssl_cert = </etc/dovecot/ssl-imap-tjaouen-fr.pem ssl_key = </etc/dovecot/private/ssl-imap-tjaouen-fr.key } protocol imaps { # Imposer notre certificat ssl_cert = </etc/dovecot/ssl-imap-tjaouen-fr.pem ssl_key = </etc/dovecot/private/ssl-imap-tjaouen-fr.key } service imap-login { service_count = 1 process_min_avail = 2 # CPU core }
POP3
Dans local.conf
:
protocol pop3 { # Imposer notre certificat ssl_cert = </etc/dovecot/ssl-pop3-tjaouen-fr.pem ssl_key = </etc/dovecot/private/ssl-pop3-tjaouen-fr.key } protocol pop3s { # Imposer notre certificat ssl_cert = </etc/dovecot/ssl-pop3-tjaouen-fr.pem ssl_key = </etc/dovecot/private/ssl-pop3-tjaouen-fr.key } service pop3-login { service_count = 1 process_min_avail = 2 # CPU core }
Divers
On peut restreindre les comptes (PAM) par uid
et gid
, par exemple:
# uid des comptes mails uniquement first_valid_uid = 2000 last_valid_uid = 2999 # gid "users" first_valid_gid = 100 last_valid_gid = 100
Pour éviter que Dovecot
fasse tomber les clients a chaque fois qu'on modifiera la conf:
shutdown_clients = no
Migration
A ce stade on a toujours Courier
en fonctionnement, et Dovecot
qui est configuré mais pas en service !
On va procédé en 3 étapes:
- Arrêt de
Courier
- Conversion des index
Courier
en indexDovecot
- Installation et demarrage de
dovecot-imapd
etdovecot-pop3d
Script de conversion
D'abord, découvrons un script de conversion des fichiers “Courier
” en “Dovecot
”.
Le script: http://www.dovecot.org/tools/courier-dovecot-migrate.pl
Par exemple:
# cd /root # mkdir tmp # cd tmp # wget http://www.dovecot.org/tools/courier-dovecot-migrate.pl # perl -c courier-dovecot-migrate.pl courier-dovecot-migrate.pl syntax OK # chmod a+x courier-dovecot-migrate.pl
Tester *avant* par :
./courier-dovecot-migrate.pl --to-dovecot --recursive /home ... Total: 2757 mailboxes / 819 users 0 errors No actual conversion done, use --convert parameter WARNING: Badly done migration will cause your IMAP and/or POP3 clients to re-download all mails. Read http://wiki.dovecot.org/Migration carefully.
Desactiver les utilisateurs vers Dovecot
Pour que Dovecot
puisse démarrer sans laisser entrer les clients (a part peut être un client de test), on peut:
- soit mettre en place un firewall
- soit changer les “uid” et/ou “gid” valident
- soit mettre
ENABLED=0
dans/etc/default/dovecot
- soit … ?
Nous, on va juste changer /etc/default/dovecot
pour avoir:
ENABLED=0
On avait déjà arrété Dovecot |
Arret de l'IMAP et du POP3
Arret courier
Le fait d'installer les paquets Dovecot
va arreter Courier
, mais pas les sessions en cours des utilisateurs !
# aptitude install dovecot-imapd dovecot-pop3d ... Supprimer les paquets suivants : 1) courier-imap 2) courier-imap-ssl 3) courier-pop 4) courier-pop-ssl YES!!!!
Rappel: On a fait en sorte que Dovecot
ne demarre pas et/ou les clients ne peuvent pas ce connecter.
Pour mémoire, lors de l'installation:
Creating config file /etc/dovecot/conf.d/20-imap.conf with new version Creating config file /etc/dovecot/conf.d/20-pop3.conf with new version
A part des commentaires, les 2 fichiers sont vides.
Par contre, il y a 2 nouveaux protocoles là /usr/share/dovecot/protocols.d/
pour imap
et pop3
bien sur.
Virer les utilisateurs
Attendre quelques secondes…
Pour les utilisateurs résistants, faire à la main:
# ps aux | egrep "(courier|imap|pop)"
….
# killall -u <USER_RESISTANT>
… jusqu'a ce qu'il n'y ait plus personne… en dehors de soi-même !
Conversion
Maintenant que les fichiers sont stables dans les HOMEs, on peut appliquer la conversion :
./courier-dovecot-migrate.pl --to-dovecot --recursive --convert /home ... Total: 2757 mailboxes / 819 users 0 errors 1553 dovecot-uidlist files written
Et enfin.
On va démarrer Dovecot
, mais avec finesse …
Commenter la ligne “ENABLED=0
” dans /etc/default/dovecot
.
Vérifier la configuration actuelle avant de démarrer:
# /etc/init.d/dovecot status
S'il y a des erreurs , en dehors de simplement “[FAIL] dovecot is not running … failed!
”, il faut corriger.
Si tout va bien:
# /etc/init.d/dovecot start Starting IMAP/POP3 mail server: dovecot.
Dans les logs, on voit juste un timide:
Apr 12 06:04:10 mail dovecot: master: Dovecot v2.1.7 starting up (core dumps disabled)
Les services sont UP:
# netstat -anp --tcp | grep dovecot tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN 9444/dovecot tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN 9444/dovecot tcp 0 0 0.0.0.0:993 0.0.0.0:* LISTEN 9444/dovecot tcp 0 0 0.0.0.0:995 0.0.0.0:* LISTEN 9444/dovecot
Un bilan
L'interruption de service n'aura duré que “quelques” minutes .
Visuellement rien ne change… sauf la présentation des dossiers dans Thunderbird
.
Voila.
A suivre...
La configuration de Dovecot
n'est pas terminée.
En l'état, la livraison des e-mails n'étant pas assuré par Dovecot
, mais réalisé par Postfix
, les outils comme “Sieve” et la gestion des “Quotas” ne peuvent pas être fonctionnel de façon optimale.