Utiliser un compte extérieur avec fetchmail - Debian 9.0 Stretch
Rédigé par Marc GUILLAUME | Aucun commentaireCet aspect n'est pas traité dans le document de Christophe Haas, mais peut être utile.
Qu'est-ce que fetchmail ?
fetchmailest un programme déjà ancien, écrit à l'origine par Eric S. Raymond. Il sert, comme son nom l'indique, à relever des mails sur une machine (serveur ou poste de travail) depuis différents comptes extérieurs, soit à la demande, soit à intervalle régulier en tournant en mode démon. A l'origine ce programme était destiné à être utilisé avec les connexions non permanentes à Internet, telles qu'on les connaissait majoritairement jusqu'à la fin des années 1990. Il n'a cessé d'évoluer et offre une panoplie de fonctionnalités assez impressionnante, pouvant aller jusqu'à pratiquement remplacer un mta.
L'utilisation que nous allons voir ici correspond à un besoin très précis et ne fera appel qu'à une infime partie des possibilités de fetchmail.
Il se trouve que je possède une adresse mail sur un domaine hébergé chez un opérateur depuis une vingtaine d'années, que j'utilise encore cette adresse et que je ne veux pas la ramener sur mon serveur de courrier. En effet, en cas de problème avec mon serveur de mail, j'entends avoir encore quelques adresses externes pour pouvoir, au minimum pouvoir communiquer avec OVH chez qui se trouvent mes serveurs. Il en est de même avec l'adresse chez mon FAI attachée à ma connexion Internet.
Mais l'hébergement mail que je possède correspond à une offre très ancienne, qui est très peu honnéreuse mais n'a pas évolué avec le temps (je soupçonne même que je dois être un des derniers, voir le dernier à utiliser encore cette offre qui a disparu de leur catalogue depuis plus de dix ans). Cet hébergement à l'ancienne ne propose que des connexions pop3. J'ai peu d'espace disque ce qui m'oblige à effacer les mails au fur et à mesure de mes consultations. J'ai donc décidé de les transférer sur mon serveur IMAP, où j'ai beacoup de place et qui est sauvegardé automatiquement quotidiennement. Pour cela j'utilise donc le programme fetchmail.
Installation de fetchmail
Aucune difficulté :
apt install fetchmail
Configuration de fetchmail
fetchmail se configure par deux fichiers /etc/default/fetchmail
et /etc/fetchmailrc
. Le premier fichier sert à definir si fetchmail doit être lancé en mode démon ou pas. Le second contient les informations qui lui sont nécessaires pour relever les comptes distants.
/etc/default/fetchmail
Ce fichier sert à définir le mode de fonctionnement de fetchmail, soit par un appel explicite, soit en mode démon pour aller automatiquement chercher le courrier à intervalle donné. Si l'on ne le lance pas comme un démon, on peut, par exemple, avec une tâche cron lancer la relève du courrier à des intervalles différents selon différents critères, par exemple toutes les 10 minutes de 9h00 à 19h00 les jours de semaine et toutes les heures en dehors de ces plages de temps et le week-end. On utilise alors les connexions à la demande. Si l'on veut en permanence aller consulter sa ou ses boîtes, par exemple tous les quart d'heure le mode démon est tout à fait approprié. Je l'utilise en mode démon et donc mon fichier /etc/default/fetchmail
contient simplement :
# Declare here if we want to start fetchmail. 'yes' or 'no' START_DAEMON=yes
/etc/fetchmailrc
Ce fichier n'est pas créé par défaut lors de l'installation de fetchmail. Mais il existe un fichier exemple dans /usr/share/doc/fetchmail/examples/fetchmailrc.example qui peut servir de base à la création de votre fichier fetchmailrc :
cp /usr/share/doc/fetchmail/examples/fetchmailrc.example /etc/fetchmailrc
La configuration pour relever un compte imap est aussi simple que celle figurant ci-dessous ;
set daemon 600 set no bouncemail set syslog set invisible set postmaster postmaster@example.org # The --invisible option (keyword: set invisible) tries to make fetchmail invisible. Normally, fetchmail behaves like any other MTA would # it generates a Received header into each message describing its place in the chain of transmission, and tells the MTA it forwards to # that the mail came from the machine fetchmail itself is running on. If the invisible option is on, the Received header is suppressed # and fetchmail tries to spoof the MTA it forwards to into thinking it came directly from the mailserver host. # mda "/usr/lib/dovecot/dovecot-lda -f %F -d %T" poll pop.monhebergeur.com proto pop3 user "pop2546" pass "BjUiop" no keep sslcertck is "marc@mondomaine.org"
Description des options
- set daemon 600
- Indique l'intervalle de chaque connexion pour relever le courrier. Ici 600 secondes, soit 10 minutes.
- set no bouncemail
- Pas de mail de bounce (envoyé en cas d'erreur).
- set syslog
- Utiliser syslog pour les logs de l'application
- set invisible
- Supprime l'entête annonçant au serveur distant qu'il a affaire à fetchmail
- set postmaster postmaster@example.org
- Indique l'adresse mail à qui envoyer des messages d'alerte.
- poll pop.monhebergeur.com
- L'option poll indique quel serveur pop ou imap interroger
- proto pop3
- Indique quel protocole utiliser (ce pourrait être imap, etern etc.)
- user "pop2546"
- Nom d'utilisateur pour s'identifier auprès du serveur interrogé
- pass "BjUiop"
- Mot de passe de l'utilisateur ci-dessus
- no keep
- Indique de ne pas conserver de copie du mail sur le serveur. keep fait l'inverse. Ici comme le serveur a très peu d'espace disponible, c'est l'option importante.
- sslcertck
- Vérifie le certificat ssl du serveur.
- is "marc@mondomaine.org"
- La boîte mail dans laquelle distribuer le courrier.
Il suffit de définir un tel bloc de données pour chaque adresse mail que l'on veut relever. On pourrait par exemple utiliser le protocole imap au lieu de pop.
Choisir l'adresse de destination
Dans ce cas précis, j'ai créé dans la base de données de mon serveur mon domaine de courrier (ici dans l'exemple mondomaine.org) et l'adresse que je veux relever. Comme en réalité ce n'est pas mon serveur qui est MX pour ce domaine mais que c'est pop.monhebergeur.com, cela entraîne quelques obligations et présente un effet de bord non négligeable signalé ci-dessous.
Comme mon hébergeur a mis en place une signature dkim et un enregistrement spf et dmark je suis obligé de configurer mes clients de mail pour utiliser le serveur smtp fourni par mon hébergeur. Je peux donc envoyer des courriers depuis mon client de mail via ce serveur sous cette identité. Si je le faisais depuis mon propre serveur je pourrais être considéré comme un usurpateur d'identité à cause des contrôles dkim et spf.
Un effet de bord possible est que si un utilisateur dont le domaine et l'adresse sont hébergés sur mon serveur et qui voudrait m'écrire sur mondomaine.org, ne va pas passer par le serveur de mon hébergeur puisque Postfix va voir qu'il possède ce domaine dans sa table de virtual_domains. Le chemin sera plus court, mais je recevrai le mail.
Par contre il ne pourra pas écrire à toute autre adresse sur ce domaine qui ne figurerait pas dans virtual_users. En effet Postfix lui dirait que cet utilisateur n'est pas un utilisateur virtuel connu pour ce domaine dont il croit être responsable. C'est donc une technique à manier avec précaution.
Ce problème peut-être évité si vous utilisez une adresse existante d'un autre domaine, comme si l'adresse que vous relevez était un alias de cette adresse.