Première chose à faire, passer au format de stockage des messages « Maildir ». C'est extrêmement simple; Postfix sait gérer ce format, il suffit d'ajouter une ligne à notre /etc/postfix/main.cf
:
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
append_dot_mydomain = no
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache
myhostname = cyrus.nain-t.net
myorigin = $myhostname
mydestination = $myhostname, localhost
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
relayhost =
mynetworks = 127.0.0.0/8 192.168.0.0/24
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
home_mailbox = Maildir/
Généralement, un simple postfix reload
suffit pour que le serveur relise sa configuration.
Essayons :
mail prof Subject: Test Maildir Nous passons a Maildir . Cc:
Dans les logs :
Jun 3 14:22:58 cyrus postfix/pickup[20275]: 26D4D67D9E: uid=0 from=<root> Jun 3 14:22:58 cyrus postfix/cleanup[20287]: 26D4D67D9E: message-id=<20080603122258.26D4D67D9E@cyrus.nain-t.net> Jun 3 14:22:58 cyrus postfix/qmgr[20273]: 26D4D67D9E: from=<root@cyrus.nain-t.net>, size=329, nrcpt=1 (queue active) Jun 3 14:22:58 cyrus postfix/local[20289]: 26D4D67D9E: to=<prof@cyrus.nain-t.net>, orig_to=<prof>, relay=local, delay=0.05, delays=0.03/0.01/0/0, dsn=2.0.0, status=sent (delivered to maildir) Jun 3 14:22:58 cyrus postfix/qmgr[20273]: 26D4D67D9E: removed
Tout s'est bien passé. Mais où est allé notre message ? Est-il toujours dans /var/mail/ ? Non. Tout se passe désormais dans le répertoire de l'utilisateur :
# su prof prof@cyrus:~/Maildir/new$ cd ~ prof@cyrus:~$ ls Maildir prof@cyrus:~$ cd Maildir/ prof@cyrus:~/Maildir$ ls cur new tmp prof@cyrus:~/Maildir$ cd new/ prof@cyrus:~/Maildir/new$ ls 1212495778.V306I7b467M188615.cyrus prof@cyrus:~/Maildir/new$ cat 1212495778.V306I7b467M188615.cyrus Return-Path: <root@cyrus.nain-t.net> X-Original-To: prof Delivered-To: prof@cyrus.nain-t.net Received: by cyrus.nain-t.net (Postfix, from userid 0) id 26D4D67D9E; Tue, 3 Jun 2008 14:22:58 +0200 (CEST) To: prof@cyrus.nain-t.net Subject: Test Maildir Message-Id: <20080603122258.26D4D67D9E@cyrus.nain-t.net> Date: Tue, 3 Jun 2008 14:22:58 +0200 (CEST) From: root@cyrus.nain-t.net (root) Nous passons a Maildir prof@cyrus:~/Maildir/new$Dans le « home » de l'utilisateur, Postfix a créé un répertoire
Maildir
. Dedans, il y a 3 répertoires : cur
, new
et tmp
. C'est dans new
que Postfix range les messages entrants, un message par fichier. /var/mail/prof
n'a plus de service.
Reste maintenant à installer Dovecot, pour permettre d'exploiter à distance le contenu de ~/Maildir
, par l'entremise d'IMAP et éventuellement POP3.
Dovecot est fourni dans toutes les « bonnes » distributions GNU/Linux (et Debian en est une). Aperçu de quelques paquets relatifs à Dovecot sur une Debian Jessie:
# aptitude search dovecot ... p dovecot-core - secure POP3/IMAP server - core files ... p dovecot-imapd - secure POP3/IMAP server - IMAP daemon ... p dovecot-managesieved - secure POP3/IMAP server - ManageSieve server ... p dovecot-pop3d - secure POP3/IMAP server - POP3 daemon p dovecot-sieve - secure POP3/IMAP server - Sieve filters support ...
Parmi les plus importants pour ce qui nous intéresse ici, relevons les paquets contenant le cœur du serveur, ce qui est nécessaire à la gestion des protocoles ipam
et pop3
, ainsi que sieve
qui permet le filtrage et le classement des messages directement à leur arrivée, donc sans l'intervention d'un quelconque MUA.
# aptitude install dovecot-imapd dovecot-pop3d
Les NOUVEAUX paquets suivants vont être installés :
dovecot-core{a} dovecot-imapd dovecot-pop3d
0 paquets mis à jour, 3 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de télécharger 3 854 ko d'archives. Après dépaquetage, 8 772 ko seront utilisés.
Voulez-vous continuer ? [Y/n/?]
...
Paramétrage de dovecot-imapd (1.0.rc15-2etch4) ...
La configuration du pigeonnier a beaucoup évolué, du moins dans sa forme sinon dans son esprit depuis son origine. Cette page a été «actualisée» avec la version 2.2.13 de Debian Jessie.
Nous avons désormais une multitude de fichiers placés dans /etc/dovecot/conf.d
tout en ayant toujours un /etc/dovecot/dovecot.conf
. Si nous le vidons de ses commentaires, il se résume à ceci:
!include_try /usr/share/dovecot/protocols.d/*.protocol dict { } !include conf.d/*.conf !include_try local.conf
autrement-dit à rien si ce n'est à des références vers d'autres fichiers.
Comme ceci risquerait malgré tout de rester trop simple, nous avons également un /etc/default/dovecot
. Nous savons que ce type de fichier n'a en général d'influence que sur les scripts de démarrage. Par défaut, il ne contient que des commentaires:
# Set to '0' to explicitly disable starting Dovecot #ENABLED=0 # Set to '1' to allow Dovecot daemons to produce core dumps #ALLOW_COREDUMPS=1
ce qui est très bien comme ça.
Avec notre installation, il n'y a que deux fichiers, imapd.protocol
et pop3d.protocol
. Par curiosité voyons ce qu'il y a dans imapd.protocol
:
protocols = $protocols imap
Voilà qui promet…
Ici, c'est autre chose, la liste des fichiers présents ne présage rien de bon:
ls -1 conf.d 10-auth.conf 10-director.conf 10-logging.conf 10-mail.conf 10-master.conf 10-ssl.conf 10-tcpwrapper.conf 15-lda.conf 15-mailboxes.conf 20-imap.conf 20-pop3.conf 90-acl.conf 90-plugin.conf 90-quota.conf auth-checkpassword.conf.ext auth-deny.conf.ext auth-dict.conf.ext auth-master.conf.ext auth-passwdfile.conf.ext auth-sql.conf.ext auth-static.conf.ext auth-system.conf.ext auth-vpopmail.conf.ext
Ce fichier n'existe même pas, mais il est possible de le créer si l'on souhaite compliquer encore plus les choses (ou au contraire, les simplifier). En effet, ce fichier, s'il existait, serait lu en dernier et ce qu'il contiendrait écraserait tout le reste si nécessaire.
La question est Est-ce que, avec la configuration par défaut, nous aurions des chances que ça marche ? Et la réponse est:
netstat -lapte | grep dovecot tcp 0 0 *:pop3 *:* LISTEN root 14267 3720/dovecot tcp 0 0 *:imap2 *:* LISTEN root 14295 3720/dovecot tcp6 0 0 [::]:pop3 [::]:* LISTEN root 14268 3720/dovecot tcp6 0 0 [::]:imap2 [::]:* LISTEN root 14296 3720/dovecot
Donc il est permis d'espérer. Les ports pop3 et imap sont effectivement à l'écoute.
Essayons…
Depuis une console locale:
telnet localhost 143 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. * OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN] Dovecot ready. 10 capability * CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN 10 OK Pre-login capabilities listed, post-login capabilities have more. 20 login prof epikoi * CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS SPECIAL-USE BINARY MOVE 20 OK Logged in
Tout ceci est bien encourageant…
Essayons la même chose, mais depuis un autre nœud du réseau:
telnet cyrus.nain-t.net 143 Trying 192.168.60.115... Connected to 192.168.60.115. Escape character is '^]'. * OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE LOGINDISABLED] Dovecot ready.Qu'est-ce à dire, ce
LOGINDISABLED
? Essayons tout de même:
10 login prof epikoi * BAD [ALERT] Plaintext authentication not allowed without SSL/TLS, but your client did it anyway. If anyone was listening, the password was exposed. 10 NO [PRIVACYREQUIRED] Plaintext authentication disallowed on non-secure (SSL/TLS) connections.
Dovecot, par défaut, aurait donc des tendances paranoĩaques. S'il accepte en privé les connexions en clair, il n'accepte en public que TLS. L'attitude n'est pas absurde, mais du coup, il va nous falloir mettre les mains dans le cambouis car, qui TLS
dit «chiffrement» donc «certificats X509».
L'horizon s'obscurcit.