Cette page est considérée comme vétuste et ne contient plus d'informations utiles.
Apportez votre aide…

Ceci est une ancienne révision du document !


Installer un serveur mail avec postfix, procmail et fetchmail

L'objectif du tutorial est l'installation et l'utilisation de postfix pour l'envoi de mails, de fetchmail pour la recupération et de deux clients mails pour la visualisation et l'envoi des courriels.

Pourquoi utiliser deux clients mails ?
Thunderbird permet la lecture des mails depuis son PC comme le fait tout un chacun mais mutt lit ses mails en console donc depuis n'importe quel PC pourvu que le serveur soit relié au net.

Pour que le tuto soit plus clair, je vais définir deux boites aux lettres:

  • la boite d'un fournisseur d'accès comme free, laposte toto@fai.fr
  • la boite du serveur de mail interne toto@postfix.fr

Installation des paquets
Avant tout il faut installer un certains nombres de paquets. Un simple

sudo apt-get install postfix fetchmail procmail mutt

suffit.

Passons maintenant à la configuration de fetchmail. fetchmail est chargé de la récupération des mails. Il faut définir un fichier dans le répertoire personnel de l'utilisateur

sudo gedit .fetchmailrc

un fichier vide s'ouvre, il faut ajouter:

## fai : votre fournisseur d'accès Internet.

poll pop.fai.fr    protocol pop3   user toto@fai.net  password    mot_de_passe_de_toto options keep

puis sauvegarder le fichier.

L'option keep 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. c'est utile si on reçoit beaucoup de mails et que l'on ne veut pas encombrer le serveur du FAI.

Protection du fichier
Maintenant il faut protéger ce fichier qui montre en clair les mots de passe du compte. C'est une étape que je n'ai pas encore réalisé (par fainéantise) mais je vous livre la méthode.

On définit un utilisateur fetchmail (ça manque d’originalité, vous pouvez bien sûr l’appeler comme vous voulez) qui doit être créé.

sudo adduser -g 65534 -d /répertoire_des_mails 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 /home/toto/Maildir par exemple comme répertoire maison (= répertoire utilisateur).

Changez les utilisateurs/droits pour que ça aille bien :

sudo chown fetchmail:nogroup /home/toto/.fetchmailrc
sudo chmod 600 /home/toto/.fetchmailrc
sudo chown -R fetchmail:nogroup /home/toto/Maildir
sudo chmod 700 /home/toto/Maildir

Reste ensuite à vérifier 2 choses :

  • Que le fichier /etc/default/fetchmail (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 /home/toto/Maildir et pas ailleurs, sinon ça risque de ne pas fonctionner correctement.

Voilà. Normalement, un lancement de fetchmail.

Procmail est chargé de faire le tri de mails à l'aide de filtres appelés recettes. créons un répertoire pour stocker les mails dans le répertoire personnel de toto

sudo maildirmake Maildir

Ceci créera la boite mail Maildir/ dans votre ~, autrement dit, dans votre /home/toto.

Une fois de plus il faut rédiger un fichier dans son répertoire personnel par exemple.

sudo gedit .procmailrc

Il faut compléter la page vierge pour obtenir un fichier de ce type

 MAILDIR=/home/toto/Maildir
 ## Faites en sorte que ça existe.
 LOGFILE=/home/toto/.procmaillog
 LOGABSTRACT=no
 #VERBOSE=on (Est utilisé uniquement pour le débogage.)
 VERBOSE=off
 FORMAIL=/usr/bin/formail
 NL="
 ## Les lignes de « recipe » commencent par « :0 ».
 ## Ne mettez pas de commentaires dans les lignes de « recipe ».
 ## Désactivez un « recipe » grace au NON logique (!).
 ## Les conditions commencent par *, utilisez des expressions rationnelles.
 ## Les conditions sont associées avec un ET logique.
 ## Tout ce qui suit * est passé directement à egrep.
 ## Une ligne d'action suit les conditions, ici c'est un nom de BAL.
 # Utilise formail pour les courriers dupliqués.
 :0 Whc: .msgid.lock
 | $FORMAIL -D 16384 .msgid.cache
 #utilisation de spamassassin
 :0 a
 $MAILDIR/duplicates
 :0fw
 | spamassassin -P
 :0:
 * ^X-Spam-Status: Yes
 $MAILDIR/spambox
 # Spam à la poubelle.
 :0
 * ^Subject:.*(credit|cash|money|debt|sex|sale|loan)
$MAILDIR/spam
 # Plus de messages HTML.
 :0
 * ^Content-Type:.*html
 $MAILDIR/junk
 # mailing list du wiki-ubuntu
 :0
 * ^Subject:.*(UWiki)
 $MAILDIR/UWiki
 #tri des mails locaux
 :0
 * ^TOtoto@postfix.fr
 $MAILDIR/locaux
 :0
 * ^TOroot@postfix.fr
 $MAILDIR/locaux
 
 #######################################
 # Dernière règle : tout ce qui arrive #
 # ici va dans la boîte par défaut.    #
 #######################################
 :0
 * .*
 Inbox
 
 # Fin de fichier

MAILDIR=/home/toto/Maildir est le répertoire où seront stockés les mails triés.
LOGFILE=/home/toto/.procmaillog est le fichier d'erreurs.

Viens ensuite les différentes recettes. On marque le début d'une recette par :0 puis on indique le critère de tri par * ^TO ou *^Subject et enfin le fichier où l'on stocke les mails. par exemple $MAILDIR/locaux

Pour plus d'explications, il y a de nombreux sites parlant de la réalisation de recettes très élaborées. Dans le fichier on a :

  • une recette pour éviter les mails dupliqués
  • l'utilisation de spamassassin
  • un tri en fonction des listes de diffusions
  • les mails internes
  • et le restant est stocké dans le fichier Inbox.

Cette étape peut être faite à partir du moment où le serveur smtp est installé. Le plus simple est de s'envoyer des messages par son client mail habituel. Ou utiliser la commande mail du paquet mailx. Par exemple :

mail -s essai toto@fai.net
Cc:<enter>
essai pour voir

puis ctrl+d pour envoyer un mail avec pour sujet essai à toto@fai.net et comme texte essai pour voir. sans copie particulière.
comment relever ses mails avec fetchmail.
il suffit de taper

fetchmail -akv -m "/usr/bin/procmail -d %T"

Si les droits sont bien attribués, on voit fetchmail interroger le fai et le voir récupérer les mails.

Sinon il faut vous les réattribuer avec un chmod, chgrp et chown.

Comment vérifier le tri?
Il faut simplement aller dans le dossier Maildir et cliquer sur les fichiers définis dans procmail. Tant qu'un courriel n'est pas trié par la recette, le fichier correspondant n'apparait pas.

si vous ne les trouvez pas ils peuvent être stockés dans le répertoire /var/mail/toto ou root.

On définit un compte pop dans Thunderbird de façon classique. Puis on se rend dans les paramètres du compte, on change le répertoire du dossier local pour le rediriger vers le dossier Maildir crée auparavant.

Ici, il y a une petite subtilité importante. D'autres trouveront peut-être une solution différente.

Pour que les fichiers triés par procmail apparaissent et soient gérés par Thunderbird, il faut créer des sous-dossiers dans les dossiers locaux.

Par exemple, créer un sous-dossier spambox pour récupérer les pouriels. Ou un sous-dossier locaux pour les messages internes. Il en faut autant que de fichier trié par procmail.

Enfin on utilise postfix pour envoyer des mails. C'est une utilisation très simple de ce serveur de mails.
En fait, on va créer un domaine mais qui n'est hélas pas connu sur la toile. Il faut donc réécrire le nom de domaine lorsque l'on veut envoyer un courriel vers l'extérieur. Certains fournisseurs d'accès empêchent l'envoi de courriel lorsqu'ils ne connaissent le nom de domaine.

On édite un fichier

sudo gedit /etc/postfix/main.cf

Puis on va y modifier un certain nombre de ligne en voici un copie

# See /usr/share/postfix/main.cf.dist for a commented, more complete version
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
#nom du serveur de mail
myhostname = postfix.fr
mydomain = ce que l'on veut
mynetworks = 127.0.0.0/8
#gestion des alias
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = localhost.localdomain, postfix.fr, localhost, ubuntu,
#relayhost = smtp.fai.fr
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
#serveur imap renvoie sur le dossier Maildir
home_mailbox=Maildir/
#ligne pour la translation d'adresse(en plus)
sender_canonical_maps = hash:/etc/postfix/canonical

Le nom de domaine(myhostname) correspond au nom de serveur de mail interne. postfix.fr
Le nom de domaine(mydomain) correspond à un domaine comme www.goolge.fr ou autre. Il existe la possibilité par exemple d'associer un nom de domaine(toto) à son adresse IP(80.truc.muche). je vous invite à voir la page correspondantehttp://doc.ubuntu-fr.org/serveur/dns_dynamique.

Les alias(alias_map) servent à simplifier l'écriture des en-têtes des courriers ainsi en tapant toto cela signifie pour le serveur de mail toto@postfix.fr. On peut même rediriger le courrier de root vers sa propre adresse. C'est relativement intéressant car certains programmes envoient des mails internes pour prévenir des défaillances (exemple fail2ban). Pour cela il faut ouvrir le fichier /etc/aliases, on voit apparaitre le nom de l'utilisateur et l'adresse email associée.

Sur le courriel apparait le nom du serveur qui a envoyé le mail(myorigin). Ici c'est le nom de notre domain situé dans /etc/mailname(postfix.fr). C'est ce nom qu'il faudra modifier pour envoyer un mail.
mydestinations indique les autres noms possibles pour envoyer des courriels sur le réseau interne. Ainsi pour envoyer un courrier à toto, on peut écrire toto@postfix.fr mais aussi toto@localhost. Le courrier sera acheminé de la même façon.
La mailcommand permet de commander procmail par postfix pour qu'il reçoivent le courrier.

(home_mailbox) Si on a installé un serveur Imap(courrier-Imap) le courrier téléchargé est stocké dans le répertoire /Maildir.

La ligne de réécriture d'adresse(sender_canonical_maps) est à ajouter. On va maintenant changer lors de l'envoi des mails, l'adresse de l'expéditeur. On modifie toto@postfix.fr par toto@fai.fr.
Il ne faut pas oublier de créer le fichier /etc/postfix/canonical

sudo gedit /etc/postfix/canonical

Une page vierge s'ouvre, on écrit :

toto@postfix.fr	   toto@fai.fr

Il faut enfin penser à charger la base de données liée à postfix par un postmap.

 postmap /etc/postfix/canonical

http://doc.ubuntu-fr.org/serveur/postfix

J'ai décrit sur cette page l'installation personnelle de mon serveur de mails, espérant que cela puisse aider d'autres personnes.
L'installation de postfix n'est pas une utilisation très poussée. Pour plus d'explications, je vous invite à lire la documentation spécialisée.
webographie ensemble des liens qui m'ont permis d'élaborer le serveur.

Pour plus d'informations rendez vous sur le forumhttp://forum.ubuntu-fr.org/viewtopic.php?id=71599.


Contributeur : bidou

  • serveur_mail_avec_postfix_et_fetchmail.1242662967.txt.gz
  • Dernière modification: Le 18/05/2009, 18:09
  • par 213.95.41.13