Ces opérations ont été effectué sur une debian sarge avec un noyau 2.6.2. Les logiciels utilisés sont :
Postfix pour délivrer le courrier
fetchmail pour aller le chercher
procmail pour le trier
spamassassin pour le filtrer
uw-imapd-ssl pour le serveur imap
sylpheed-claws pour le client mail (optionnel, pour les illustrations).
openwebmail pour le webmail (avec un apache-ssl/php derrière, non décrit dans cette documentation).
Les gens pressés pourront passer directement au chapitre « Installation des composants ».
Pourquoi cette documentation
Beaucoup de documentation existe sur internet pour mettre en place un serveur imap, mais a peu près toutes se résume à « installez ça, ça et ça, et hop, plug-n-play, ça marche ». Hors, dans la réalité (du moins chez moi) ça marche pas du tout. L’idée donc est de dépister les petits problèmes qui font que bien que la procédure soit simplissime, ça ne fonctionne pas.
Ce ne sont donc pas les documentations trouvées sur le net qui m’ont permis de trouver les solutions aux problèmes, mais une armée de gens sympa sur #linux-nantes@ircnet (citons Hooligan0 et beny en particulier).
Pourquoi un serveur imap
Un serveur imap à l’avantage de permettre d’organiser le courrier directement sur le serveur (à l’inverse d’un serveur pop à partir duquel on télécharge les messages en bloc puis on les trie avec le client de courrier électronique, ce qui est génant si l’on souhaite avoir plusieurs points d’accès pour son courrier). Vous pouvez donc avoir une boîte à lettre consultable à distance.
Par exemple, vous consultez votre courrier de chez vous avec sylpheed (client mail léger et performant). Au travail, vous utilisez mozilla et vous souhaiteriez avoir les même courriers, pas de problème : il vous suffit de synchroniser mozilla sur votre serveur imap. Vous récupererez toute l’arborescence déjà crée (et donc l’organisation de votre boîte à lettre). Nous décrivons ici aussi la mise en place d’un webmail, qui permet, à partir de n’importe quel endroit et avec un simple navigateur de consulter votre courrier.
Installation des composants
Rien de compliqué :
apt-get update
apt-get install postfix fetchmail procmail uw-imapd-ssl openwebmail
La configuration de postfix n’est pas détaillé ici. On peut rapidement faire des choses simple (configuration par défaut), mais pour faire des choses compliqués, c’est compliqué.
Configuration de fetchmail
fetchmail est un outil très simple qui va à intervalle régulier chercher votre courrier sur un serveur distant (votre boite à lettre chez free) et le rapatrie sur votre boîte à lettre locale. Vous devez éditez (ou crée) le fichier /etc/fetchmailrc. La syntaxe est la suivante :
poll <serveur mail> with protocol <protocole>
user '<login_serveur>' there with password '<mot de passe serveur>' is '<login_local>' here
Par exemple dans mon cas :
poll pop.free.fr with protocol POP3
user 'eprochasson' there with password 'Plqsdliu' is 'manproc' here
(le mot de passe n’est pas le vrai évidemment).
Vous mettez ces lignes pour chaque utilisateur.
Attention ! Le mot de passe doit-être en clair dans le fichier, il est donc indispensable qu’il soit lisible uniquement par l’utilisateur fetchmail (chown fetchmail /etc/fetchmailrc
, chmod og-xrw /etc/fetchmailrc
).
fetchmail va ainsi récupérer votre courrier et le stocker dans la boîte mail locale de l’utilisateur (/var/mail/[utilisateur]).
Configuration de procmail/spamassassin
Je vous renvois à la documentation sur spamassassin qui explique très clairement comment cela fonctionne.
Configuration de uw-imapd
Il n’y a à priori rien à faire, le logiciel étant « plug & play » (d’après la documentation du projet). On peut juste regarder comment ça fonctionne (et les éléments bloquant qui peuvent empecher d’avancer).
Le serveur cherche la boîte INBOX d’un utilisateur dans /var/mail/[utilisateur], et les sous-dossier dans son HOME (/home/[utilisateur]). C’est au client de courrier électronique de dire qu’il faudrait aller chercher les sous-dossiers ailleurs (par exemple, créer un répertoire /home/[utilisateur]/Maildir et indiquer le répertoire « Maildir » au client.
- Sylpheed configuration imap 1
- Configuration du répertoire imap
Si vous utilisez uw-imap-ssl (recommandé pour le webmail) il faut le dire au client, sinon ça ne marche pas (et le message d’erreur n’est pas du tout explicite).
- Sylpheed configuration imap 2
- Configuration SSL
Vous pouvez ensuite créer des sous-repertoire dans celui que vous avez précisé (par exemple Maildir) dans lesquels vous pourrez mettre vos messages pour les trier. Si à partir d’un client mail quelconque, vous déplacez un message dans un répertoire, ou que vous supprimiez un message, la modification sera effectuée sur le serveur et sera donc effective sur les autres points d’accès que vous utiliserez.
Configuration d’openwebmail
Ici encore, rien de bien compliqué. Il faut veillez avoir un apache-ssl fonctionnel si vous utilisez uw-imapd-ssl. Si vous utilisez un repertoire différente de /home/[utilisateur] pour stocker les sous-repertoire, il faut le précisez a openwebmail. Dans /etc/openwebmail/openwebmail.conf.default il faut modifier la ligne :
homedirfolderdirname <RepertoireVoulu>
en remplaçant le répertoire par « Maildir » par exemple.
openwebmail est un très bon outil qui permet de faire beaucoup plus que de consulter son courrier. Je vous invite a explorer l’interface.
Annexe : configuration iptable pour accéder à son serveur web de l’extérieur
Attention : si vous voulez consulter votre webmail de l’extérieur (ce qui est un peu le but il faut l’avouer), il faut permettre d’accéder a votre serveur web de l’extérieur, ce qui peut-être un trou de sécurité.
La règle iptable pour laisser rentrer ce qui vient vers le port http (80) est la suivante :
iptables -A BAD-LAN -p tcp --dport http -j ACCEPT
où BAD-LAN est un chemin du dehors (le ternet) vers le dedans (votre lan) par exemple :
iptables -A INPUT -i eth1 -j BAD-LAN
iptables -A FORWARD -i eth1 -j BAD-LAN
avec eth1 l’interface connectée au modem.
Si votre serveur web n’est pas directement sur le firewall, il faut rediriger le port :
(remplacez ici eth1 par l’interface connecté a internet).