Exim : Enfin un système de messagerie convivial

Exim est un serveur de messagerie électronique. Encore un me direz-vous ? Il y a déjà sendmail, qmail, smail, zmailer, postfix, etc... Eh bien oui, encore un... Pourquoi dédier un article à celui-la et pas à un autre ? Parce qu'Exim possède un certain nombre de qualités qui valent bien un article; d'autre part, parce que ce logiciel de messagerie devient de plus en plus populaire. C'est déjà le mailer installé par défaut sur les systèmes Debian récents. Exim (qui est fourni sous Licence GPL) n'a pas le problème de licence de qmail, est plus humainement configurable que sendmail et est plus mûr que postfix qui est encore très "jeune".

 

Exim permet également de faire facilement des configurations très complètes. Par facilement, je veux vraiment dire facilement, pas "il y a un truc à rajouter dans le ruleset 91, je dois encore avoir quelque part l'email de 3 pages ou Eric Allman explique ça" (ceux qui ont déjà fait des configurations évoluées avec sendmail savent de quoi je veux parler ;).

Exim supporte un grand nombre de méthodes pour récupérer des informations : fichiers texte standard, fichiers DBM, NIS, NIS+, LDAP, cdb, DNS. Chacune de ces méthodes d'accès posséde ses avantages et inconvénients. Dans la configuration qui est présentée ci-dessous, il est fait usage de fichiers DBM, car ils permettent de gérer facilement des tables assez grosses avec des temps d'accès raisonnables. D'autre part, exim fournit la commande exim_dbmbuild qui permet très simplement de transformer des fichiers textes en fichiers DBM.

Dans l'exemple qui suit, les fichiers DBM utilisés sont générés à partir de fichiers texte contenant une entrée par ligne. La seule exception est pour le fichier d'alias, qui est généré à partir d'un fichier comportant deux champs par ligne séparés par un ':'. exim_dbmbuild acceptant également les lignes commençant par le caractère '#', voici à quoi peut ressembler votre fichier /etc/aliases.txt utilisé pour générer aliases.db :

# fichier /etc/aliases.txt

postmaster@pipo.com: vincent

root@pipo.com: vincent

postmaster@autredomain.org: raphael

root@autredomain.org: raphael

help@pipo.com: :blackhole:

attente@pipo.com: :defer:

machin@pipo.com: :fail: Disparu sans laisser d'adresse

Notons au passage 2 points importants :

- Dans notre exemple, nous utilisons l'option "include_domain=true" (voir plus bas) qui permet d'inclure le nom de domaine dans les alias, ce qui permet de gérer facilement plusieurs domaines simultanement dans avoir de problème de "collision" entre les utilisateurs de 2 domaines différents.

- Exim fournit 3 alias spéciaux ; : blackhole : le mail arrivant à cette adresse est ignorée ; : defer : les messages sont mis en attente pour une durée indéterminée (ce qui est parfois très pratique pour "bloquer" les messages pendant que l'on fait des changements importants dans la configuration); : fail : permet quant à lui de prédéfinir un message d'erreur.

Exim fait également partie des rares logiciels à être livrés avec beaucoup de documentations. Cependant, voici quelques astuces de configuration qui pourront vous faire gagner du temps.

Les lignes qui suivent ne sont pas suffisantes pour réaliser une configuration complète d'Exim, mais elles reprennent les astuces les plus utiles et les plus courantes.

identification du système :

primary_hostname = vince.pipo.com

qualify_domain = pipo.com

qualify_recipient = pipo.com

local_domains = "dbm;/var/spool/exim/db/domains.db"

local_domains_include_host = true

local_domains_include_host_literals = true

never_users = root

trusted_users = mail:list:www-data

Configuration anti-spam locale ; junk.db est generé à partir d'une liste d'adresses email contenant éventuellement des wildcards. (*@savetrees.com par exemple).

relay_domains = "dbm;/var/spool/exim/db/domains.db"

sender_reject = "partial-dbm;/var/spool/exim/db/junk.db"

sender_host_reject = "+allow_unknown:\

partial-dbm;/var/spool/exim/db/junk.db"

relay_match_host_or_sender = true

sender_address_relay = "pipo.com:\

partial-dbm;/var/spool/exim/db/domains.db"

On vérifie que les entêtes des messages soient syntaxiquement correctes (cela permet de filtrer un peu plus de spam)

smtp_verify = true

headers_sender_verify = true

headers_check_syntax = true

On bloque la réception des messages au delà d'une certaine taille. 2 Mo est une limite raisonnable (suffisant pour la plupart des fichiers et pas suffisamment gros pour les utilisateurs qui récupérent leurs messages par POP3).

message_size_limit = 2000K

On refuse de recevoir si la charge est supérieure à 3.0 pour ne pas "écrouler" la machine.

smtp_load_reserve = 3.0

Pour filtrer encore un peu plus de spam: utilisation de la RBL

(voir http://maps.vix.com/rbl/ pour plus d'informations)

prohibition_message = contact postmaster@pipo.com for further info

recipients_reject_except = postmaster@pipo.com

rbl_domains = "rbl.maps.vix.com"

rbl_reject_recipients=true

(à ajouter dans la section "directors")

Le director pour la gestion des alias locaux.

system_aliases :

driver = aliasfile;

search_type = dbm,

file = /var/spool/exim/db/aliases.db,

include_domain=true

expand=true

On active la gestion du fichier '.forward' pour chaque utilisateur, ainsi que la reconnaissance des directives de filtrage (voir plus bas).

userforward :

no_verify,

driver = forwardfile;

check_local_user,

group=8,

file = ${home}/.forward,

filter

Les 3 lignes suivantes sont facultatives, mais permettent de "détourner" tous les messages destinés à une adresse inexistantes et d'être reroutés vers une nouvelle adresse au lieu de générer une erreur.

defer_unknown:

driver = smartuser

new_address = postmaster@pipo.com

Pour envoyer du courrier vers l'extérieur, vous avez besoin de l'une des deux sections suivantes :

Celle-ci, si vous envoyez vos messages à travers un relais de messagerie (smarthost) :

smarthost:

driver = domainlist,

transport = smtp;

route_list = "* smtp.mondomaine.net bydns_a"

Celle-là, si votre machine est connectée en permanence à Internet et que vous n'utilisez pas de relais:

lookuphost :

driver = lookuphost,

transport = smtp;

Exim permet également de donner des régles de réécriture d'entêtes de messages (les expressions régulières utilisées par Exim sont compatibles avec les expressions régulières Perl).

On peut par exemple, utiliser une régle de réécriture pour remplacer toutes les adresses 'utilisateur@machine.pipo.com' en 'utilisateur@pipo.com':

*@*.pipo.com $1@pipo.com Ffrs

Les filtres

Exim reconnait un format étendu de fichier .forward, qui fournit à chaque utilisateur un moyen puissant de filtrer et trier son mail sans avoir à utiliser procmail.

Encore une fois, voici un exemple qui vaut mieux qu'un long discours. Sachez cependant qu'Exim est fourni avec une documentation complète et claire sur l'utilisation des filtres.

#Exim filter

if error_message then

save mail/INBOX

# Listes de diffusion Linux

elif $header_to: contains linux or

$header_cc: contains linux then

save mail/IN-linuxlists

elif $header_to: is root@mondomaine.com or

$header_to: is postmaster@mondomaine.com then

save mail/IN-admin

elif $header_to: is moi@ancien-employeur.com then

deliver monremplacant@ancien-employeur.com

else

save mail/INBOX

endif

Par rapport à procmail, les filtres exim ont l'avantage d'avoir une syntaxe plus conviviale et de ne pas nécessiter d'outils supplémentaires. n

Pour plus d'informations, consultez

Homepage d'Exim http://www.exim.org/


© Copyright 2000 Diamond Editions/Linux magazine France. - Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1or any later version published by the Free Software Foundation; A copy of the license is included in the section entitled "GNU Free Documentation License".