Un serveur qmail sur Raspberry Pi

Qmail, Courier-IMAP, ImapProxy et RoundCube sur Raspbian
13 Juillet 2013
  • {:toc}

On part d’une image Raspbian (ici Wheezy datée du du 25 mai 2013), sur un Rapsberry Pi modèle B (le seul avec un port ethernet). Sauf indication contraire, tout se fait en root.

Avant toute chose, et évidemment avant de rendre la machine visible depuis internet (attention avec l’ipv6) on modifie le mot de passe du compte root et on supprime le compte pi:

passwd
deluser pi

On en profite pour virer toute l’interface graphique, ce qui peut alléger sérieusement les mises à jour (étape optionnelle néanmoins)

apt-get remove --auto-remove --purge libx11-.*

Puis on met le système à jour :

apt-cache update
apt-get upgrade
# Mise à jour du firmware
rpi-update

Puis on redémarre.

À ce point, la machine peut (et devra à un moment, mais ce n’est pas urgent) être rendue accessible depuis l’internet, au moins sur les ports 22 (ssh), 25 (smtp), 80 (http), 143 (imap) et 993 (imap ssl).

La base

On configure le hostname complet de la machine, attention c’est important (qmail refusera de s’installer si ce n’est pas fait avant).

hostname mail.example.com

Préférez un sous domaine ! Même si vous voulez recevoir vos mails sur des adresses du format moi@example.com, le serveur de mail peut être situé sur mail.example.com, et c’est le champ MX du DNS de example.com qui fera le lien, c’est-à-dire qui indiquera que les mails de ce domaine sont gérés par cette machine. Le choix du hostname peut être long.

Enfin, évidemment, configurez ce sous-domaine pour pointer vers l’IP du Raspberry Pi. Si vous ne la connaissez pas par cœur :

apt-get install curl
curl http://bot.whatismyipaddress.com
# (C'est un peu *overkill* d'installer curl juste pour
# connaître son ip, mais ça servira à un moment ou
# un autre de toutes façons)

Attention, assurez vous de disposer d’une vraie ip fixe, sinon utilisez un service de type dyndns. La plupart des FAI qui ne fournissent pas d’IP fixe proposent un tel service en standard, via leurs “box”.

Dans la mesure du possible, configurez le reverse DNS, mais en France, je crois que seul Free permet cela.

Ensuite on installe les paquets de qmail:

apt-get install qmail courier-imap courrier-imap-ssl

On modifie les paramètres de distribution pour revenir à une configuration plus moderne que celle de Debian, que Courier digèrera mieux :

echo ./Maildir/ > /var/lib/qmail/control/defaultdelivery

Très important. Si le hostname n’est pas le domaine des mails (par exemple, ici, les mails de thb.lt sont gérés par la machine namo.thb.lt), on modifie /var/lib/qmail/control/locals pour y intégrer la totalité des domaines qui devront être servis sur une boîte locale (et non pas transmis à un autre smtp). Sinon, le message mortel apparaîtra dans les logs:

qmail-smtpd: pid 10183 from 192.168.0.1: Exceeded hop count

Ensuite, on crée le dossier Maildir de chaque utilisateur:

cd /home/thibault
sudo -u thibault maildirmake Maildir

(Je crois que les Maildir doivent être créés pour l’utilisateur, avec ses droits. Sinon, un coup de chown peut évidemment régler le problème)

Si le client IMAP (Thunderbird par exemple) affiche “Filesystem notification initialization error (…) check for configuration errors with the FAM/Gamin library” tout en recevant normalement les messages, ça se règle en installant libgamin (astuce trouvée ici) :

apt-get install gamin
/etc/init.d/courier-authdaemon restart
/etc/init.d/courier-imap restart
/etc/init.d/courier-imap-ssl restart

Reste à créer les alias. C’est dans /var/lib/qmail/alias. Chaque fichier .qmail-[boite] contient le nom de la boite vers laquelle renvoyer les courriers. Par exemple, chez moi, postmaster renvoie sur thibault. La configuration donne ça:

$ root@namo:/var/lib/qmail/alias# cat .qmail-postmaster
thibault

À ce point, ça doit marcher.

Ajouter le chiffrement sur IMAP

Dans /etc/courier, on génère une clé RSA (> 1024 bits pour beaucoup de certificateurs) puis un CSR, qu’on fait signer par son autorité préférée (StartSSL est gratuit pour la classe 1). On met bout à bout la clé privée, le certificat et les intermédiaires jusqu’au certificat racine dans un fichier /etc/courier/imapd.pem. Et voilà.

Les commandes courantes d’OpenSSL sont ici.

Et pour refuser toute authentification en clair, dans /etc/courier/imapd-ssl, passer la clé IMAP_TLS_REQUIRED à 1.

IMAP_TLS_REQUIRED=1

Installer RoundCube

Un webmail ne fait jamais de mal en dernier recours. Si le webmail est destiné à un usage quotidien, RoundCube est loin d’être idéal sur un Pi (trop lourd), mais l’essentiel de ces remarques peuvent s’appliquer. J’ai installé RoundCube sur lighttpd. La configuration de base est assez simple, par contre il est fortement recommandé d’installer imapproxy, qui évite d’ouvrir une nouvelle connexion au serveur imap à chaque requête, et donc évite que le webmail ne se traine comme un escargot arthritique. Imapproxy écoute sur 127.0.0.1:1143 et force starttls.

# /etc/imapproxy.conf
force_tls yes # default is no