Lire ses mails de n’importe où

L’étape suivante pour améliorer l’utilisation de sa e-messagerie.
vendredi 9 août 2002
par  Aurélien DEHAY
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...


[1Enfin, comme les serveurs IMAP et SMTP ne sont pas encore configurés, vous ne pourrez pas encore lire vos mails avec Squirrelmail.

[2Ne vous formalisez pas si vous utilisez autre chose que postfix et que vous lisez ce fichier, surtout la partie décrivant le RUNASROOT

[3Pour les abonnés Wanadoo : la newsletter Wanadoo se retrouvera là-dedans par exemple.


Commentaires

Logo de Greg
dimanche 14 août 2005 à 03h03 - par  Greg

Connaissez-vous CheckMail ?

Ce service gratuit de Net Oxygen vous permet de consulter plusieurs comptes mail (POP ou IMAP) via le web.

TrÚs pratique surtout en vacances car vous avez accÚs facilement à tous vos mails depuis n’importe quel ordinateur connecté à internet !

Site web : CheckMail
Logo de herve
dimanche 19 octobre 2003 à 21h22 - par  herve

mon prob est le suivant :

des que je fais ta config mes users ne reçoivent plus les mails dans leur maildir, j’en deduit donc que procmail ne fonctionne plus ..pourquoi ? mystere....
et a la fin de chaque .fetchmailrc j’ai pourtant mis :
mda "/usr/bin/procmail"

qui doit appeller procmail...
et mes regles procmail sont bonnes

quand je reviens a ma config initiale, avec un fetchmailrc dans chaque /home/user/ et pas dans /etc/ ,il n’y a qu’un user qui reçoit ses mails dans sont mailrdir, l’autre ne reçois rien..

dans /etc/default/fetchmail SERVICE est a true pour le faire fonctionner en demon et RUNASROOT est false...

en fait j’aimerai pouvoir configurer fetchmail de telle maniere a ce que mes deux users aient leurs mails dans leur maildir respectif sachant que mes fichiers .procmailrc sont ok au niveau des regles..

quelque chose coince au niveau de fetchmail...

Merci de ton aide precieuse car j’avoue que je suis un peu perdu...

dimanche 19 octobre 2003 à 19h45

Le RUNASROOT doit être effectivement à false.

dimanche 19 octobre 2003 à 18h59

En fait, fetchmail est lancé par root au démarrage de la machine, mais l’utilisateur qui fait effectivement fonctionner fetchmail, ce n’est pas root.

Pour fetchmail, s’il est correctement configuré : /etc/init.d/fetchmail start

Logo de herve
dimanche 19 octobre 2003 à 18h08 - par  herve

hello

voila je voulais savoir (j’ai certainement pas bien lu...)
si dans le fichier de config /etc/default/fetchmail , le RUNASROOT tu le mettais a false ou a true....j’ai supposé false puisque que tu crees un user qui n’a pas les droits root et que tu dis que tu as retenu la solution du user non-root
Ou alors tu le fait tourner root mais le fichier de config est non root evitant un eventuel prob de securité ?

dis moi aussi comment tu relances fetchmail pour qu’il prenne en compte la nouvelle config et surtout sous quel compte tu fais ça ? ROOT par hasard ?

merci en tout cas pour ton article et a bientot

Logo de Aurélien
mardi 5 août 2003 à 21h20 - par  Aurélien

Pas moi. Avec spamassassin « tout court » ça fonctionne. Enfin, chez moi ça fonctionne.

— 
Aurélien

Logo de fabrice eudes
mardi 5 août 2003 à 17h06 - par  fabrice eudes

j’ai suivi la procédure détaillée ; tout s’est à peu prÚs bien passé.

par contre, il y a une typo dans la config de procmail (procmailrc) :

c’est "spamassassin -P" au lieu de "spamassassin", sinon le msg n’est pas envoyé automatiquement dans le répertoire SPAM. qqun confirme ?

merci pour cette doc Aurélien.

Logo de Frédéric Gautier
mercredi 14 août 2002 à 10h24 - par  Frédéric Gautier

Corrections effectuées.

mercredi 14 août 2002 à 09h35

Tout d’abord, une derniÚre correction : dans la conclusion, remplacer

- Une fois que les tests sont bons, n’oubliez pas de retirer le keep de la configuration de Fetchmail.
par
- Une fois que les tests sont bons, n’oubliez pas de remplacer le keep de la configuration de Fetchmail par un fetchall.

Et non, je suis pas sûr que le loopback soit en lo0 pour la simple raison que le loopback est en lo. Valà.

Logo de Frédéric Gautier
lundi 12 août 2002 à 00h03 - par  Frédéric Gautier

Ok Aurélien, j’ai fait les corrections directement dans le texte. cela te va-t-il ?
Et j’en ai profité pour corriger 2 ou 3 erreurs de frappe qui m’avaient échappées.
Juste un autre truc : es-tu sûr du loopback en lo0 ?

Logo de Aurélien
dimanche 11 août 2002 à 20h58 - par  Aurélien

Il y a pas mal d’erreurs dans l’article. Pas des fautes, des erreurs. Par exemple :

On ne peux pas mettre dans le fetchmailrc à la fois fetchall et keep, ça risque pas de marcher. Fetchmail ne démarrera pas.

Le chemin n’est pas bon : ce n’est pas /var/lock, mais /var/run.

Il y en a peut-être d’autres.

Agenda

<<

2015

>>

<<

Août

>>

Aujourd’hui

LuMaMeJeVeSaDi
     12
3456789
10111213141516
17181920212223
24252627282930
31      

Annonces

Annuaire LibreNord

Retrouvez l’annuaire de logiciels libres créé par l’association Club Linux Nord-Pas de Calais sur le site suivant http://www.librenord.org