Par Serge.
Configurer et utiliser sendmail.
Ce document est sous licence Licence pour Documents Libres de la guilde des doctorants.
Sendmail est peut-ê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 à paraître "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:
Dans cet exemple, les courriers sont délivrés dans des boites aux lettres Maildir d'utilisateur réels (ou système), c'est à dire que chaque boite aux lettres demandent la création d'un utilisateur via la commande adduser
ou useradd
.
La configuration de Sendmail se trouve dans le fichier /etc/mail/sendmail.cf
. Mais ce fichier est relativement complexe, et pour le créer 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 fonctionnalités et options que nous souhaitons pour notre configuration.
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
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).
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
.
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/domaintable
de 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.
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és directement dans ce format par sendmail, mais dans le format de "hash". Pour cela, à chaque fois que vous modifiez ou créez un tel fichier, utilisez la commande: makemap hash fichier.db < fichier
dans le répertoire /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éel. Par exemple vous voulez que tout les courriers 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.
Nous devons maintenant configurer procmail pour que les boîtes 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 créer 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 créer le répertoire Maildir
dans chaque répertoire home de chaque utilisateur.
Astuce:Au lieu de vous embetter à créer un fichier .procmailrc et un répertoire Maildir à chaque utilisateur, créer une seule fois un fichier .procmailrc et un répertoire Maildir dans le répertoire /etc/skel et vous créez ensuite vos utilisateurs via adduser, de ce fait le répertoire Maildir et le fichier .procmailrc sera automatiquement créé.
Cet article n'est qu'un exemple de configuration de sendmail dans une utilisation "personnelle courante". Bien d'autres options sont possibles surtout pour une utilisation plus professionnelle 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 courrier, ajouter un antivirus etc ... Ces articles sont en préparation.
Thèmes : #articles #logiciels #reseau #serge #services
Sauf indication contraire, ce document est placé sous licence CC-BY-SA 3.0.