webmail tranquille

Posted on September 21, 2013

Un post assez court sur « comment installer un webmail chez soi même si on n’est pas doué ».

Avoir un serveur email chez soi (ou à soi plutôt) c’est important. Cela a des avantages non négligeables, et notamment cela permet d’être indépendant de tout service « gratuit où c’est nous la marchandise », les emails vous appartiennent et il n’y a que VOUS qui les voyez (oui, Google, Yahoo,… peuvent regarder vos emails). Plus ça va et plus les agences gouvernementales viennent fouiller dans nos vies privées, beaucoup d’articles sur le net en parlent, pas besoin de ressortir un pavé à ce sujet. De ce fait, il devient de plus en plus important et intéressant pour tout un chacun de devenir maître de sa vie numérique.

Bien sûr cela n’est pas à la portée de tous sans un bon tutoriel, ne traitant pas que de l’installation d’un logiciel en particulier mais ayant une vision plus large. Ceci est une difficulté lorsque l’on débute : savoir par où commencer.

J’héberge mon service email depuis un petit moment maintenant, et ça marche bien (voir mon article sur Postfix). Cependant ce n’est pas adapté à tout le monde, et avoir une interface web accessible de n’importe-où est intéressant. Pour ma part, j’ai voulu fournir un webmail à mes parents, pour qu’ils puissent enfin profiter d’une gestion d’emails propre. Ce que j’appelle « webmail » est une interface permettant de gérer ses emails depuis un simple navigateur web comme firefox (comme gmail par exemple).

Pourquoi Roundcube ? Au départ, j’ai voulu installer SOGO (un autre webmail). J’ai lu la documentation et elle m’a paru bien longue (un PDF), le soft m’a l’air très adapté à de grandes boîtes mais pour le pékin moyen que je suis j’ai surtout trouvé que devoir posséder un serveur LDAP en plus d’un SGBD et d’un serveur web pour faire tourner le bousin c’était un peu lourd pour 3 personnes. On m’avait conseillé SOGO pour sa gestion de calendrier, super mais j’en utilise pas et je n’en éprouve pour l’instant pas le besoin alors je vais voir ce qui se fait d’autre. Juste après j’ai lu la pauvre demie page d’installation de Roundcube qui te dit qu’une fois la copie du dossier effectuée l’installation est déjà presque finie. Haha, Sogo je te verrai plus tard.

Au final, voici les pré-requis pour faire tourner notre serveur de messagerie avec une interface web toute jolie :

  • un nom de domaine (de préférence)
    • Si vous n’en avez pas, Net Libre peut vous aider. ;)
  • un serveur SMTP : postfix
  • un agent de livraison locale (ouais ça parle pas des masses, LDA en anglais) : procmail
  • un serveur IMAP : dovecot
  • un SGBD : mysql (oui je sais mariadb c’plus mieux et PostgreSQL c’est cool)
  • un serveur http : apache2 (ou nginx, lighttpd… si vous préférez mais j’ai pas la conf)
  • et enfin roundcube.

Petite note sur le fonctionnement de l’installation que je vais décrire : postfix reçoit et émet les emails. Il donne les emails reçus à procmail qui va les stocker en format maildir dans le répertoire personnel de l’utilisateur. Dovecot ne sert qu’à fournir ce dossier au webmail en IMAP+SSL. Postfix, procmail et dovecot se trouvent sur la même machine, le serveur web peut être où vous le souhaitez.

Pour rendre l’explication encore plus simple :

  1. réception d’un email : Postfix reçoit, donne à procmail qui sait où le mettre (il le place dans ~/Maildir/cur) ;
  2. envoi d’un email : votre MUA (Thunderbird, mutt…) va parler à postfix et lui demande d’envoyer l’email ;
  3. zieutage de votre boîte depuis le webmail : le webmail parle en IMAP+SSL à dovecot, dovecot regarde ce qu’il y a dans ~/Maildir.

Avant toute chose il faut gérer son nom de domaine. Pour cela, il faut faire un enregistrement de type « MX » dans votre zone. Si cela ne vous parle pas des masses, c’est un peu normal. En gros : quand on veut savoir qui est derrière « example.com » pour accéder à une page web (par exemple), on va demander à notre serveur DNS qui est « example.com ». Pour cela, on demande quel est l’enregistrement A (A = adresse) de ce nom de domaine. Pour envoyer des emails c’est pareil, sauf que c’est un enregistrement de type MX (mail exchange). Je ne vais pas rentrer dans des explications trop fournies sur le système de DNS, sachez simplement qu’une personne possédant un nom de domaine doit entrer quelques informations dans ce qu’on appelle sa « zone DNS » pour qu’on sache qui se cache derrière son nom de domaine.

Voici ce qu’il faut mettre dans votre zone : mail IN A 211.197.196.185 mail IN AAAA fc00::100:c688:ce47:c817:e2ac::1 example.com. IN MX 10 mail.example.com. En mode capitaine évidence : il faut changer les adresses IP, le nom de domaine ainsi que le nom d’hôte du serveur email pour l’adapter à votre cas.

L’installation de tout ça est assez simple : # postfix, pour la configuration : http://blog.karchnu.fr/?p=805 apt-get install postfix

# dovecot
apt-get install dovecot-core dovecot-mysql dovecot-imapd

# web
apt-get install apache2 php5 php5-mysql

# roundcube : allez sur http://roundcube.net/download pour télécharger l'archive puis :
tar xf roundcube*.tar.gz
rm roundcube*.gz
mkdir -p /srv/www/
mv roundcubemail* /srv/www/roundcube/
chown -R www-data /srv/www/roundcube/
</code></pre>

On vient donc de mettre les fichiers de roundcube où il fallait, on lui a donné les bons droits pour qu'apache puisse y accéder, maintenant il va falloir configurer Postfix (http://blog.karchnu.fr/?p=805), dovecot et apache. Pour dovecot, le fichier <code>/etc/dovecot.conf</code> :
<pre><code>
# Général
listen = *,[::]
mail_privileged_group = mail
log_timestamp = "%Y-%m-%d %H:%M:%S "

auth_mechanisms = plain login

service auth {
	user = root
}

userdb {
	driver = passwd
}

# on utilise simplement le mot de passe de l'utilisateur local
passdb {
	driver = pam
}

protocols = imap

# Sécurité
ssl = required

# bien sûr, il faudra remplacer ça par votre certificat SSL
ssl_cert = </etc/postfix/tls/mail.example.com.cert
ssl_key = </etc/postfix/tls/mail.example.com.key

ssl_protocols = "!SSLv2"
ssl_cipher_list = !aNULL:!eNULL:!EXPORT:!MD5:!DES:!LOW:kEDH:HIGH:MEDIUM
disable_plaintext_auth=yes

Le fichier /etc/apache2/sites-available/000-default.conf sur la machine hébergeant roundcube :

<VirtualHost *:80>
    ServerAdmin exemple@example.com
    ServerName mail.example.com

    # optionnel, si vous avez plusieurs noms pour cette machine
    ServerAlias webmail.example.com

    # c'est dans ce répertoire qu'il faut mettre les fichiers de roundcube
    DocumentRoot /srv/www/roundcube/
    <Directory "/srv/www/roundcube">
        Options FollowSymLinks Indexes Includes
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/mail.example.com.err

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/mail.example.com.log combined
</VirtualHost>

Une fois que vous avez mis ces fichiers où il fallait :

service dovecot restart
service apache2 restart

Pour finir l’installation, il faut se rendre sur votre nom de domaine configuré dans apache, dans le répertoire /installer (ici cela donnerait http://mail.example.com/installer) pour finir l’installation de Roundcube. Il vous demandera de remplir quelques informations assez simples, puis vous devrez télécharger un fichier qu’il aura généré (le fichier main.inc.php) et le mettre dans /srv/www/roundcube/config

Dans un autre article je gèrerai la livraison en local avec un filtrage (supprimer les spams, rediriger des emails dans un dossier en particulier…), et ce sera fait avec Sieve + dovecot, qui remplacera procmail. Comme d’habitude, les commentaires sont fermés, n’oubliez pas que si vous souhaitez me parler vous pouvez aller sur irc : #arn sur irc.geeknode.net ou utiliser mon adresse email karchnu CHEZ karchnu POINT fr.