Vous êtes ici: La documentation de Slackware-fr » Thématique Logiciels » Articles, Logiciels » Configurer et utiliser Sendmail

Configurer et utiliser Sendmail

Par Serge Configurer et utiliser sendmail.

Ce document est sous licence License pour Documents Libres de la guilde des doctorants.

Introduction

Sendmail est peu être le plus connu des serveurs de courriers électronique du monde Unix, et il est naturellement fournit en standard sur la Slackware. Mais sa configuration a tendance à paraitre “barbare” lors de ses premiéres prises en main. Ce document a pour but de vous familiariser avec sa configuration au travers d'un exemple relativement complet:

  • Serveur mail multi-domaine
  • Routage particulier de domaines
  • Utilisation du serveur du FAI dans le cas d'une connexion par un fournisseur d'accés (ADSL, modem, etc…)
  • Boites aux lettres du type Maildir pour être compatible avec les serveurs “imap”

Dans cet exemple, les couriers sont délivrés dans des boites aux lettres Maildir d'utilisateur réèls (ou système), c'est à dire que chaque boite aux lettres demandent la création d'un utilisateur via la commande adduser ou useradd.

Configuration de sendmail

La configuration de Sendmail se trouve dans le fichier /etc/mail/sendmail.cf. Mais ce fichier est relativement complexe, et pour le créér nous créons en premier un fichier .mc qui, une fois traités par le pré-processeur m4, donnera le fichier de configuration sendmail.cf . Nous devons alors créer un fichier “mc” qui va décrire les fonctionalités et options que nous souhaitons pour notre configuration.

Le fichier mc

Pour creer ce fichier, placez-vous tout d'abord dans le répertoire /usr/share/sendmail/cf/cf, qui contient d'ailleur déjà pas mal de fichier exemple de configuration. Voici tout d'abord ce fichier que nous expliquerons aprés. N'utilisez pas cette configuration comme ça, lisez bien les explications qui suivent ou sendmail ne pourra pas fonctionner corectement:

 dnl# Fichier exemple de configuration sendmail-slackfr.mc
 dnl# 
 dnl# Septembre 2004
 dnl# 
 dnl# http://slackfr.org
 dnl# 
 dnl# Include et paramétres généraux
 include(`../m4/cf.m4')
 VERSIONID(`Exemple de configuration slackfr.org v0.1')dnl
 OSTYPE(`linux')dnl
 dnl# empêche de detecter les emails valides
 define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl
 dnl# utilisation du serveur du FAI pour les mails sortants (A PERSONNALISER)
 define(`SMART_HOST',`smtp.fai.tld')
 dnl# Evite les timeout sur l'ident
 define(`confTO_IDENT', `0')dnl
 dnl# Gestion de noms multiples pour ce serveur
 FEATURE(`use_cw_file')dnl
 dnl# Gestion des utilisateurs de confiance
 FEATURE(`use_ct_file')dnl
 dnl# Gestion de routage spécifique à certain domaine
 FEATURE(`mailertable',`hash -o /etc/mail/mailertable.db')dnl
 dnl# Gestion multi-domaine
 FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable.db')dnl
 dnl# Mappage des noms de domaine
 FEATURE(`domaintable',`hash -o /etc/mail/domaintable.db')dnl
 dnl# Gestion des autorisations / liste noire / anti spam
 FEATURE(`access_db', `hash -T<TMPF> /etc/mail/access')dnl
 FEATURE(`blacklist_recipients')dnl
 dnl# Définition du mailer local
 FEATURE(`local_procmail',`',`procmail -t -Y -a $h -d $u')dnl
 dnl# Force l'ajout du domaine meme en local 
 FEATURE(`always_add_domain')dnl
 dnl# Gestion du redirect pour les emails qui ont "déménagés"
 FEATURE(`redirect')dnl
 dnl# Ne pas vérifier la validité du domaine de l'expéditeur 
 FEATURE(`accept_unresolvable_domains')dnl
 EXPOSED_USER(`root')dnl
 dnl# Accepte les mails locaux localhost.localdomain générés 
 dnl# par certains programmes locaux à la machine
 LOCAL_DOMAIN(`localhost.localdomain')dnl
 MAILER(local)dnl
 MAILER(smtp)dnl
 MAILER(procmail)dnl
 

Explication du fichier mc.

Nous allons reprendre chaque ligne du fichier de configuration et expliquer son rôle. Les lignes commençant par dnl sont des commentaires et ne seront pas prisent en compte lors de la génération du fichier cf (le # ajouté apres le dnl est là juste avoir une syntaxe proche des commentaires des scripts shells et facilite la lecture).

  • VERSIONID(`Exemple de configuration slackfr.org v0.1')dnl: Champ libre vous permettant de donner une “version” à votre fichier de configuration.
  • OSTYPE(`linux')dnl: Défini l'OS sur lequel on est (Linux ici). Permet de définir les paths, les variables et la configuration minimum necessaire au bon fonctionement de sendmail sur la plateforme sur laquelle on le configure. Pour voir la liste des OS supportés, listez le contenu du repertoire /usr/share/sendmail/cf/ostype.
  • define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl: cette directive empéche de detecter facilement si un email est valide sur votre serveur. Des robots utilisent le système de vérification d'email valide pour construire des bases d'email valide a des fins de spams. Avec cette directive de configuration, ces robots ne peuvent pas déterminer facilement les emails valides de votre serveur.
  • define(`SMART_HOST',`smtp.fai.tld'): indique si l'on utilise un relai smtp pour les mails non locaux. Si vous etes en connection ADSL, modem cable, modem RTC, bref vous utilisez un fournisseur d'accés, je vous conseille de mettre ici le serveur smtp de votre FAI (vous remplacez smtp.fai.tld par l'adresse du serveur smtp de votre FAI), autrement certain de vos mails seront refusés si vous ne passez pas par le serveur mail de votre FAI (par exemple vos mails en direction d'abonés club-internet seront refusés).

Si par contre votre serveur est autonome (serveur dédié chez un hébergeur, ou sur ligne spécialisé avec IP publique attribuée) vous devez supprimer cette directive, vous n'en avez pas besoin à moins que vous souhaitez faire transiter tout vos mails sortants vers un serveur mail spécifique.

  • define(`confTO_IDENT', `0')dnl: désactive l'utilisation du protocole “ident”, ce qui a tendance à provoquer des timeouts (temps d'attente de 30 environ à chaque envoie de mails) car plus personne utilise ce protocle qui, en plus, est dangereux du point de vue de la sécurité de votre serveur.
  • FEATURE(`use_cw_file')dnl: active le support de nom multiple pour ce serveur de mail, ce qui est utile dans le cas ou on gére plusieurs domaines et que le serveur à un nom spécifique sur chaque domaine (exemple: smtp.domaine1.com, smtp.domaine2.com, …). La liste des différents nom se trouve alors dans /etc/mail/local-host-names.

Si votre serveur ne gére qu'un seul domaine, cette directive est inutile pour vous.

  • FEATURE(`use_ct_file')dnl: active le support d'utilisateur de confiance, c'est à dire que ces utilisateurs peuvent changer le champ From de leur mail sans que sendmail signale un avertissement. Utile seulement si vos utilisateurs ont accés à un shell local ou si des scripts/programmes locaux envoient des mails en utilisant des champs From spécifiques (pour des rapports systèmes par exemple, ou des scripts PHP etc…). La liste des utilisateurs de confiance se trouvent dans le fichier /etc/mail/trusted-users.
  • FEATURE(`mailertable',`hash -o /etc/mail/mailertable.db')dnl: Permet un routage des mails pour un domaine spécifique. Par exemple vous voulez que tout les mails pour le domaine toto.com transitent vers un serveur mail particulier smtp.titi.com. Pour cela vous utiliserez le fichier /etc/mail/mailtertable avec dans ce fichier:

toto.com smtp:[smtp.titi.com] Cela est utile quand vous etes un serveur mx secondaire (ou backup) d'un domaine par exemple.

  • FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable.db')dnl: Permet le mappage entre utilisateur virtuel et utilisateur réèl sur la machine. Nécessaire si le serveur gére plusieurs domaines. On utilise alors le fichier /etc/mail/virtusertable pour la corespondance utilisateur virtuel ↔ utilisateur réèl de la forme:

email user_local

  • FEATURE(`domaintable',`hash -o /etc/mail/domaintable.db')dnl: Permet le mappage de nom de domaine, à utiliser uniquement sur vos propres domaines. Cela permet par exemple de rediriger tout les mails d'un ancien domaine vers un nouveau, quand par exemple un site à changé de nom de domaine et veux rediriger automatiquement tout les mails adresser à l'ancien domaine vers le nouveau. On utilise alors le fichier /etc/mail/domaintablede la forme:

anciendomaine.tld nouveaudomaine.tld

  • FEATURE(`access_db', `hash -T<TMPF> /etc/mail/access')dnl : Active le controle d'accés à sendmail pour empecher que votre serveur soit un openrelay. Vous donnez alors la liste des domaines et réseaux autoriser à envoyer ou recevoir du mail dans le fichier /etc/mail/access de la forme:

domaine_ou_adresse VALEUR avec pour une utilisation courante VALEUR: RELAY l'autorise a utiliser le serveur sans restriction, OK l'autorise juste pour une utilisation locale, REJECT le rejette. D'autres comportements spécifiques existent, j'invite les utilisateurs les plus avancés à consulter le site officiel de sendmail.

  • FEATURE(`blacklist_recipients')dnl: Permet de spécifier des boites aux lettres, des utilisateurs ou des hôtes dans le fichier /etc/mail/access. La syntaxe reste la même.
  • FEATURE(`local_procmail',`',`procmail -t -Y -a $h -d $u')dnl: Indique quel programme à utiliser comme agent de livraison local. Ici nous utilisons procmail. Nous verrons plus loin dans cet article comment configurer procmail pour gérer SpamAssassin et le format des boites aux lettres Maildir.
  • FEATURE(`always_add_domain')dnl: Ajoute toujours la partie domaine même dans le cas d'envoie local. Nécessaire pour la gestion multi-domaine.
  • FEATURE(`accept_unresolvable_domains')dnl: Cette option permet d'accepter les mails d'expéditeur qui auraient la partie domaine de leur email inexistante. Activer cette option uniquement si votre serveur n'a pas tout le temps accés à un serveur DNS, ou si vous utilisez fetchmail pour récupérer des mails distants vers des boites locales (car dans ce cas les mails avec des champs From invalides seront refuser par votre sendmail et fecthmail les laissera sur votre compte distant, et ne pourra jamais délivrer ce mail). Dans les autres cas, n'utilisez pas cette option de façon à filtrer les mails d'adresses invalides.

Le reste des options sont necessaires à l'utilisation du serveur en local. Il nous reste donc maitenant à génerer notre fichier sendmail.cf, pour cela sauvegarder votre fichier mc et lancez alors la commande:

sh Build fichier.mc

qui va créer le fichier fichier.cf qu'il vous suffit de copier en /etc/mail/sendmail.cf pour qu'il soit pris en compte par sendmail.

Les autres fichiers de sendmail.

Comme nous l'avons vu, vous devez aussi renseigner les fichiers /etc/mail/access, /etc/mail/domaintable, /etc/mail/mailtertable, /etc/mail/virtualusertable suivant votre configuration.

Attention: Les fichiers /etc/mail/access, /etc/mail/domaintable, /etc/mail/mailtertable et /etc/mail/virtualusertable ne sont pas utilisé directement dans ce format par sendmail, mais dans le format de “hash”. Pour cela, à chaque fois que vous modifiez ou creez un tel fichier, utilisez la commande: makemap hash fichier.db < fichier dans le repertoire /etc/mail avec fichier ayant pour valeur access, mailertable, ….

Il y a aussi un autre fichier trés important, qui est le fichier /etc/mail/aliases qui lui permet le mappage de compte réèl. Par exemple vous voulez que tout les courriers qui sont normalement destiné à l'utilisateur root soient redirigés vers un autre utilisateur local (par exemple serge), vous devez alors mettre dans votre fichier /etc/mail/aliases:

root: serge

Ce fichier contient déjà par défaut pas mal de mappage.

Attention: le fichier /etc/mail/aliases demande lui aussi d'être transformé en /etc/mail/aliases.db, mais il est légèrement différent des autres et il est généré par la commande newaliases (sans arguments) et non pas par la commande makemap.

Configuration de procmail

Nous devons maitenant configurer procmail pour que les boites aux lettres des utilisateurs soient au format Maildir, qui est bien plus pratique pour la gestion des mails que le format mailbox par défaut. Pour cela rien de plus simple, il suffit pour chaque utilisateur de creer un fichier .procmailrc qui va contenir ces instructions:

 PATH=$HOME/bin:/usr/bin:/usr/ucb:/bin:/usr/local/bin:.
 MAILDIR=$HOME/Maildir/
 DEFAULT=$MAILDIR/
 LOGFILE=$HOME/.procmail_log
 LOCKFILE=$HOME/.lockmail
 

Vous devez aussi creer le répertoire Maildir dans chaque repertoire home de chaque utilisateur.

Astuce:Au lieu de vous embetter à creer un fichier .procmailrc et un repertoire Maildir à chaque utilisateur, créer une seule fois un fichier .procmailrc et un repertoire Maildir dans le repertoire /etc/skel et vous créez ensuite vos utilisateurs via adduser, de ce fait le repertoire Maildir et le fichier .procmailrc sera automatiquement créer.

Conclusion

Cet article n'est qu'un exemple de configuration de sendmail dans une utilisation “personnelle courante”. Bien d'autres options sont possibles surout pour une utilisation plus professionelle et ne sont pas couvertes ici. Nous verrons aussi dans d'autres articles comment ajouter un filtre antispam comme SpamAssassin, ajouter un serveur pop3 ou imap aux boites aux lettre pour pouvoir lire le courier, ajouter un antivirus etc … Ces articles sont en préparation.

Tags

logiciels/articles/configurer_et_utiliser_sendmail.txt · Dernière modification: 2010/02/22 21:29 (édition externe)