Lire ses mails de n’importe où
par
popularité : 1%
Avec plusieurs comptes de messagerie, Il faut se souvenir des logins, des mots de passe, relever les boîtes sans en oublier, etc. Il est plus pratique de rapatrier tous les emails sur une seule machine et, via Internet, consulter son courrier de chez ses amis, au travail ou en vacances. Cet article présente une des solutions possible : Posftix, Fetchmail, un serveur IMAP et l’interface Webmail Squirrelmail, le tout sécurisé par SSL.
Présentation
Il existe plusieurs manières de consulter ses mails sans rapatrier en local les messages. La méthode la plus simple consiste à se connecteur sur le service Webmail ou IMAP mis à votre disposition par votre fournisseur d’accès Internet, par exemple http://webmail.free.fr. Autre méthode non sécurisée : faire appel à telnet et relever les messages à distance (http://www.delafond.org/survielinux/ ou http://didierdescamps.free.fr/astuce.txt pour en savoir plus). Mais ces méthodes deviennent fastidieuses dès que le nombre de boîtes aux lettres augmente.
Pourquoi cet article ?
J’ai deux comptes de mails et je trouve plus pratique de récupérer les messages sur mon serveur de messagerie. Or, lorsque je suis hors de chez moi, je veux les lire et éventuellement y répondre. Comme ma machine est connectée via une connexion ADSL, je peux m’y connecter en permanence. L’idée étant de lire ses mails d’à peu près n’importe où, le problème de la sécurité se pose assez vite. Une des solutions consiste à tout faire passer au dessus de SSH, mais cela n’est pas très pratique voire impossible lorsqu’on est derrière un firewall ou un proxy.
Je me suis donc penché sur une solution fondée sur le Web et sur SSL pour la consultation des mails à distance. Voici une liste des logiciels utilisés :
Apache pour le serveur Web (en SSL),
Postfix pour le serveur SMTP,
Courier-imap pour le serveur IMAP,
Fetchmail
pour récupérer les emails des différentes boîtes,
Procmail pour le tri dans les maildirs,
Spamassassin pour éviter le spam (pourriel),
Squirrelmail pour le Webmail (consultation/envoi de mails via un navigateur Web).
Concernant Postfix, c’est un serveur SMTP comme il y en a tant d’autres (Sendmail, Exim par exemple). J’ai choisi Postfix parceque les fichiers de configuration sont assez faciles a lire et qu’au tout début, je n’ai trouvé que de la documentation pour Postfix.
Fetchmail et Procmail sont des logiciels assez connus, qui respectivement télécharge les messages d’une ou plusieurs boîtes aux lettres, et dépose ces messages dans les bonnes boîtes aux lettres locales. Procmail permet également d’effectuer des manipulations sur les messages, comme par exemple le lancement de Spamassassin pour chaque mail reçu.
Spamassassin, contrairement à ce que son nom laisse croire, ne tue pas les spams, mais donne une note de ’spamitude’ à tout les mails (voir cette liste pour la notation) et positionne un header (une en-tête) spécial si il considère que le mail est un spam. A charge ensuite au MDA (donc procmail ici) de traiter ce pourriel, pour le supprimer ou le mettre dans une boîte à lettres particulière.
Installation
Foin de troll trop violent. Mais je suis sous Debian. L’installation a donc été d’une simplicité outrageante :
# apt-get install apache-ssl courier-imap squirrelmail fetchmail postfix procmail spamassassin
Un système équivalent doit exister pour les autres distributions (je pense a urpmi par exemple).
En théorie, si le système de paquetage est bien fait, et que les mainteneurs ont fait leur travail, apache-ssl et squirrelmail sont correctement configurés et fonctionnels [1].
Passons donc à la configuration du reste.
Configuration de Fetchmail
On peut utiliser Fetchmail de 3 manières :
Lancer un fetchmail par utilisateur (mode "normal"),
En root, on récupère les mails de tout le système (mode "root"),
En utilisateur non-root qui récupère les mails de tout le système (mode "non-root").
J’ai retenu la dernière solution, les deux autres étant connues et assez facilement configurables. La configuration de fetchmail n’influe pas sur le reste, tout ce que l’on veut, c’est un fetchmail qui fonctionne.
Première étape, configurer fetchmail pour qu’il fonctionne en mode root : un fichier /etc/fetchmailrc qui doit par exemple contenir ce genre de chose :
set postmaster "postmaster"
set nobouncemail
set no spambounce
set properties ""
poll imap.laposte.net with proto IMAP
user 'aurelien.dehay' there with password 'XXXXXXX' is 'aurelien' here options keep
poll pop.wanadoo.fr with proto POP3
user 'aurelien.dehay' there with password 'XXXXXXX' is 'aurelien' here options keep
J’ai laissé les keep dans les options, cela permet de faire des tests sans perdre de mails. Je dis ça, vous êtes prévenus, ça m’est arrivé de perdre quelques mails avant de me rendre compte de ce qu’il se passait.
A la place de keep, vous pouvez par la suite utiliser le paramètre fetchall. Il permet de récupérer tous les mails (utile la première fois) et ainsi, quand votre ordinateur est éteint, de lire les mails à partir du Webmail de votre ISP (Fournisseur d’Accès Internet) puis de les récupérer ensuite.
A part ça, que du classique. Pour le fonctionnement en non-root, ce n’est pas beaucoup plus compliqué.
Un utilisateur fetchmail (ça manque d’originalité, vous pouvez bien sûr l’appeler comme vous voulez) doit être créé, si il n’existe pas déjà (les manipulations sont, bien sûr, à effectuer sous le compte root) :
adduser -g 65534 -d /var/run/fetchmail fetchmail
-g pour utiliser le groupe nogroup. Mettez le GID qui correspond à nogroup, ici 65534. En fait, vous mettez ce que vous voulez (100 pour users par exemple est pas mal non plus).
-d pour utiliser le répertoire /var/run/fetchmail comme répertoire maison (= répertoire utilisateur).
Changez les utilisateurs/droits pour que ça aille bien :
chown fetchmail:nogroup /etc/fetchmailrc
chmod 600 /etc/fetchmailrc
chown -R fetchmail:nogroup /var/run/fetchmail
chmod 700 /var/run/fetchmail
Reste ensuite à vérifier 2 choses :
Que le fichier /etc/default/fetchmail [2] (sur Debian) autorise le lancement de fetchmail en démon : SERVICE doit être à true dans ce fichier.
Que le script de lancement /etc/init.d/fetchmail écrive bien tout ce qu’il faut dans /var/run/fetchmail et pas ailleurs, sinon ça risque de ne pas fonctionner correctement.
Voilà. Normalement, un lancement de fetchmail (évitez de le faire maintenant, surtout si votre fetchmailrc ne contient pas de paramètre keep ou si votre serveur SMTP n’est pas ou est mal configuré).
Configuration Postfix
Je vous laisse vous référer à cette excellente documentation.
La configuration par défaut devrait convenir, mais j’ai préféré restreindre l’accès au serveur uniquement sur l’adresse locale. Vérifiez donc que vous avez bien ces deux lignes (une pour procmail, l’autre pour l’adresse d’écoute) dans votre /etc/postfix/main.cf
mailbox_command = procmail -a "$EXTENSION"
inet_interfaces = localhost
La première ligne est la ligne par défaut qui nous permettra d’utiliser procmail.
La dernière ligne est histoire de sécurité : elle force postfix à écouter uniquement sur l’interface "interne" (lo), il n’acceptera donc aucune connexion de l’extérieur, et résoud ainsi le problème d’un serveur mal configuré en Open Relay.
Vous pouvez cependant supprimer cette ligne pour recevoir directement les mails à (votrenom@votredomain.com. Cela devrait fonctionner, voir cette documentation pour plus d’informations. Vous remarquerez que je n’ai pas choisi cette option pour une raison simple : mon ordinateur n’étant pas allumé en permanence, il se pourrait que je perde des mails.
Voilà, c’est tout pour Postfix.
Configuration de Spamassassin et procmail
Spamassassin a très bien fonctionné une fois installé, mais si vous voulez plus d’informations, voir le répertoire /etc/spamassassin et surtout le man Mail::SpamAssassin::Conf.
spamassassin est un logiciel basé sur un jeu de règle. Un logiciel a priori meilleur, mais que je n’ai pas encore testé est bogofilter. Ce dernier se base sur des règles Baysiennes pour les filtres.
La seule chose notable a se souvenir pour spamassassin, c’est que tout mail ayant eu une note supérieure a 5 dans les tests sera considéré comme du spam et aura donc le header X-Spam-Status positionné a Yes, ce qui nous servira pour filtrer le mail avec procmail.
Concernant procmail, il faut créer un fichier $HOME/.procmailrc qui contiendra par exemple ce qui suit :
VERBOSE=no
SHELL=/bin/sh
PATH=/usr/local/bin:/usr/bin:/bin
MAILDIR=$HOME/Maildir/ #you'd better make sure it exists
LOGFILE=$HOME/.procmail/from #recommended
ORGMAIL=$MAILDIR/emergency-inbox
DEFAULT=$MAILDIR/new
LOGFILE=$MAILDIR/.procmail.log
#truc incompréhensible pour éviter les doublons
#(lors d'un begaillement de list par exemple)
:0 Wh: msgid.lock
| formail -D 8192 msgid.cache
:0fw
| spamassassin
:0:
* ^X-Spam-Status: Yes
$MAILDIR/SPAM/
La partie importante est le paramètre MAILDIR= qui doit pointer sur le répertoire où vous souhaitez mettre votre boîte aux lettres. Dans procmail, tout chemin qui se termine par un / est considéré comme un répertoire au format Maildir. Si le / n’y est pas, le chemin sera considéré comme celui d’une mbox unix normale.
Dans l’exemple ci-dessus, spamassassin est lancé, et on traite tout ce qui est considéré comme du spam en le redirigeant vers le répertoire $MAILDIR/SPAM/, ce qui permet de vérifier si un mail normal n’a pas été considéré comme du spam. [3]. Vous pouvez également remplacer le répertoire par /dev/null, ce qui aura pour effet de supprimer définitivement les mails considérés comme du spam.
Pour ce qui est du reste, voyez le manuel des exemples de procmail : man procmailex. Voici tout de même deux exemples concernant les filtres des listes de diffusion CLX et CLXWEB :
:0
* ^List-Id:.*clx-web@gaia\.anet\.fr
$MAILDIR/.CLXWEB/
:0
* ^List-Id:.*clx@gaia\.anet\.fr
$MAILDIR/.CLX/
Configuration de Courier-imap
La configuration de courier-imap s’effectue via le fichier /etc/courier/imapd.
La configuration nécessaire est plutôt limitée pour ce que je voulais faire : la "mise en écoute" de courier-imap sur l’interface loopback uniquement.
Il faut donc modifier la ligne ADDRESS dans le fichier /etc/courier/imapd en celle-ci :
ADDRESS=127.0.0.1
On peut bien sûr modifierde nombreux paramètres dans les fichiers de configuration, mais comme cela marche ainsi, j’ai laissé les paramètres par défaut. Regardez tout de même ce fichier, surtout la dernière ligne, cela vous évitera certainement de mauvaises surprises à l’avenir.
Conclusion
Voilà, c’est théoriquement terminé. Il ne reste plus qu’à redémarrer tout le toutim dans l’ordre (indicatif) :
Apache-ssl,
courier-imap,
postfix,
fetchmail.
En fait, l’important est de démarrer fetchmail après postfix pour éviter de perdre des mails. Essayez maintenant de vous connecter via Apache ou un client IMAP classique en local.
procmail et spamassassin ne nécessitent pas de lancement, ils sont appelés à chaque mail reçu.
Une fois que les tests sont bons, n’oubliez pas de remplacer le paramètre keep de la configuration de Fetchmail par fetchall.
Tout devrait fonctionner sans problèmes. En cas de problèmes, voyez la lidie.
Pour une documentation et des explications plus poussées, reportez-vous à l’excellente documentation de Phandaal. Vous y trouverez en plus de la doc sur Samba et Cups.
Notes de la Rédaction : Malheureusement, cette doc n’est plus accessible...
[1] Enfin, comme les serveurs IMAP et SMTP ne sont pas encore configurés, vous ne pourrez pas encore lire vos mails avec Squirrelmail.
[2] Ne vous formalisez pas si vous utilisez autre chose que postfix et que vous lisez ce fichier, surtout la partie décrivant le RUNASROOT
[3] Pour les abonnés Wanadoo : la newsletter Wanadoo se retrouvera là-dedans par exemple.
Commentaires