Page suivante - Page précédente - Table des matières

6. Installation de l'agent de transport de courrier (MTA)

6.1 Qmail v1.03

Sécurisé, rapide et facile à utiliser, c'est mon agent de transport de courrier préféré.

Actuellement, aucune distribution ne préinstalle qmail. Nous allons nous concentrer sur la compilation et l'installation de qmail puisque c'est la seule partie difficile : la configuration est vraiment immédiate.

Obtenir qmail

Allez sur www.qmail.org pour télécharger la dernière version.

Décompresser les sources

Ensuite, décompressez le en tapant

mv qmail.tar.gz /usr/local/src
cd /usr/local/src ; tar -zxvf qmail.tar.gz

Si vous trouvez une version bz2 (qui est un nouveau et meilleur format de compression), remplacer tar par

bunzip2 qmail.tar.bz2
tar -xvf qmail.tar

Préparer la compilation

Maintenant entrez dans le répertoire qmail pour examiner la configuration par défaut :

cd qmail; more conf-*

Vous ne devriez avoir à changer aucun paramètre, mais vous pouvez (par exemple) spécifier un répertoire d'installation alternatif ou de meilleurs options de compilation.

Maintenant lancer

mkdir /var/qmail
pour créer le répertoire d'installation.

Si nous n'avez pas installé une distribution Debian, vous devrez ajouter plusieurs UID pour l'utilisation de qmail. La grande sécurité de qmail dépend de cela.

Le fait que qmail soit divisé en modules tournant chacun sous leur propre UID rend la tâche de mettre hors-service la totalité de votre système de courrier ou de gagner un accès root plus difficile.

Donc, lancer

 # groupadd nofiles
 # useradd -g nofiles -d /var/qmail/alias alias
 # useradd -g nofiles -d /var/qmail qmaild
 # useradd -g nofiles -d /var/qmail qmaill
 # useradd -g nofiles -d /var/qmail qmailp
 # groupadd qmail
 # useradd -g qmail -d /var/qmail qmailq
 # useradd -g qmail -d /var/qmail qmailr
 # useradd -g qmail -d /var/qmail qmails

ou éditer à la main /etc/passwd et /etc/group pour ajouter ces utilisateurs vous-même.

Evan E. m'a signalé qu'il avait dû utiliser le paramètre -g GID avec la version officielle de groupadd (Caldera 1.2) car sinon groupadd retournait cette erreur : « A group with that name already exists. » (un groupe de ce nom existe déjà).

Par exemple, vous pouvez respectivement ajouter

 qmail:*:2107:
 nofiles:*:2108:

et

 alias:*:7790:2108::/var/qmail/alias:/bin/true
 qmaild:*:7791:2108::/var/qmail:/bin/true
 qmaill:*:7792:2108::/var/qmail:/bin/true
 qmailp:*:7793:2108::/var/qmail:/bin/true
 qmailq:*:7794:2107::/var/qmail:/bin/true
 qmailr:*:7795:2107::/var/qmail:/bin/true
 qmails:*:7796:2107::/var/qmail:/bin/true

Maintenant vous pouvez lancer

make setup check

pour tester votre configuration, ensuite

./config
pour configurer qmail.

Attention, votre serveur disposer d'une adresse reconnue (i.e. pouvant être résolue par une requête DNS) ou ./config sera perturbé.

Si ce n'est pas le cas, vous pouvez donnez le nom de votre serveur directement via :

./config-fast ordinateur.lambda.fr

Maintenant, vous devez installer quelques alias, puisque /etc/alias n'est pas utilisé pas qmail sauf si vous compilez et installez un paquetage optionnel.

Voici ma configuration :

File : ".qmail-MAILER-DAEMON"
&postmaster
File : ".qmail-bin"
&root
File : ".qmail-daemon"
&root
File : ".qmail-decode"
&root
File : ".qmail-dumper"
&root
File : ".qmail-games"
&root
File : ".qmail-ingres"
&root
File : ".qmail-mailer-daemon"
&postmaster
File : ".qmail-manager"
&root
File : ".qmail-news"
&root
File : ".qmail-nobody"
&root
File : ".qmail-operator"
&root
File : ".qmail-postmaster"
&root
File : ".qmail-root"
&guylhem
File : ".qmail-system"
&root
File : ".qmail-toor"
&root
File : ".qmail-uucp"
&root
File : ".qmail-uucp-default"
|preline -dr /usr/bin/uux - -r -gC -a"${SENDER:-MAILER-DAEMON}" lm!rmail "($DEFAULT@$HOST)"

Vous devez créer chacun de ces fichiers dans ~alias en remplaçant &guylhem dans .qmail-root par votre propre compte récupérant le courrier de root.

Attention si vous utilisez UUCP !

Ne faites pas confiance à la FAQ de qmail pour UUCP, utilisez mon .qmail-uucp-default à la place sinon vous ne pourrez envoyer aucun courrier par votre connexion UUCP !

Maintenant vous devez décider dans quel format vos utilisateurs recevront leur courrier.

Voici mon avis :

  • Pour des répertoires home montés en NFS, utilisez le format MAILDIR avec un correctif pour les logiciel de courrier (les correctifs sont disponibles sur www.qmail.org).
  • Si aucun correctif n'est disponible, préférez le format MAILFILE. N'importe quel logiciel peut lire un fichier à ce format. Les utilisateurs devront seulement créer un alias (pour bash) ou un setenv (pour csh) pour leur logiciel de courrier.
  • Éviter le format /var/spool/mail/$USER format, trop peu sûr.

Pour corriger le format par défaut, lisez chacun des fichiers dans /var/qmail/boot et copiez celui que vous préférez vers /var/qmail/rc.

home ou proc sont des choix sûrs mais je préfère home pour des raisons de sécurités.

Configurer qmail

Dans /var/qmail/control, éditez :

defaultdomain, me, plusdomain

  • me est votre nom de domaine qualifié complet (full qualified domain name) local, par exemple sur ma machine c'est barberouge.linux.lmm.com
  • defaultdomain sera ajouté à toutes adresses sans point, y compris l'adresse par défaut (me). Par exemple vous pouvez le positionner à reseau-local et les mails envoyés à pierre@sa-boite seront complétés et envoyés à pierre@sa-boite.reseau-local.
  • plusdomain est l'exception : il est ajouté à toutes les adresses qui se termine par un signe plus, y compris l'adresse par défaut.

Ces trois exemples vous montre la puissance et la facilité de la configuration de qmail !

locals, rcpthosts

Si vous voulez utiliser les noms de domaines virtuels, ajoutez simplement les noms des domaines dans ces fichiers. Tout courrier reçu envoyé à ces noms sera traité localement.

La différence entre locals et rcpthosts est que rcphosts n'est pas considéré comme un alias local, ce qui est utile si vous recevez des courriers électroniques envoyés à une adresse gratuite comme yahoo.com ou lemel.fr alors que vous envoyez également des courriers à des utilisateurs de ces services non locaux et que vous ne voulez pas traiter localement un courrier envoyé à quelqu-un@yahoo.com !

virtualdomains

Ici vous pouvez spécifier le mode d'envoi par défaut, par exemple

#:alias-uucp

si vous ne voulez pas envoyer vos mail par UUCP mais par SMTP (c'est la configuration par défaut) ou

:alias-uucp

si vous voulez les envoyer par UUCP.

Tester qmail

Maintenant, qmail est configuré, essayez

sh -cf '/var/qmail/rc &'

pour lancer qmail (ça n'interférera pas avec votre agent de transport de courrier), ensuite

echo to: mon-identifiant | /var/qmail/bin/qmail-inject

Vous devriez recevoir ce mail dans le format que vous choisi dans /var/qmail/boot/.

Désinstaller votre ancien agent de transport de courrier

Si le test est concluant, tuez votre ancien agent de transport.

Tout d'abord, arrêtez-le :

$ killall -STOP nom_du_démon

Si des processus-fils tournent, forcez-les à se terminer :

$ killall -CONT leur_nom

Puis réessayez de stopper votre agent de transport de courrier (s'il le faut, répétez ces deux étapes ad nauseam).

Ensuite, tuez votre agent de transport :

$ killall -TERM nom_du_démon
$ killall -CONT nom_du_démon

Virez-le. La manière de le faire dépend de votre distribution. Par exemple rpm -e --nodeps pour une RedHat, une Caldera ou une SuSE, ou dpkg -r --force-depends pour une Debian. Lancer ensuite

# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail

Maintenant configurer qmail-smtpd dans /etc/inetd.conf :

smtp stream tcp nowait qmaild /var/qmail/bin/tcp-env tcp-env /var/qmail/bin/qmail-smtpd

Tout ceci doit se trouver sur la même ligne.

Si vous utilisez un vielle distribution avec un init non SysV (c'est par exemple le cas des vielles RedHat), ajoutez cela à vos scripts d'initialisation :

sh -cf '/var/qmail/rc &'

Il y a de grandes chances pour que ce soit /etc/rc.local mais cela peut varier.

Pour les distribution actuelles avec des init SysV (RedHat, Caldera, SuSE, Debian), ajoutez ce script dans /etc/init.d/ ou /etc/rc.d/init.d :

  • Pour la Debian :
    #!/bin/sh
    test -x /var/qmail/rc || exit 0
    case "$1" in
     start)
     echo -n "Starting mta: " # démarrage de l'agent de transport
     sh -cf '/var/qmail/rc &'
     echo "qmail."
     ;;
     stop)
     echo -n "Stopping mta: " # arrêt de l'agent de transport
     killall qmail-lspawn
     echo "qmail."
     ;;
     restart)
     echo -n "Restarting mta: " # redémarrage de l'agent de transport
     killall -HUP qmail-lspawn
     killall -ALRM qmail-lspawn
     echo "qmail."
     ;;
     *)
     echo "Usage: /etc/init.d/qmail {start|stop|restart}"
     exit 1
    esac
    exit 0
    
  • Pour la RedHat :
    #!/bin/sh
    #
    # qmail         ce script shell s'occupe du démarrage et de l'arrêt de qmail
    #
    # description : qmail est un agent de transport de courrier, c'est-à-dire
    #               le programme qui s'occupe de transporter le courrier d'une
    #               machine à une autre
    # nom de processus : qmail
    # config: /var/qmail/control/
    # source la bibliothèque de function
    . /etc/rc.d/init.d/functions
    # source la configuration du réseau
    . /etc/sysconfig/network
    export PATH=$PATH:/var/qmail/bin
    # vérifie que le réseau est en place
    [ ${NETWORKING} = "no" ] && exit 0
    [ -f /usr/sbin/sendmail ] || exit 0
    # examine les options de démarrage du script
    case "$1" in
     start)
     # Lance les démons.
     echo -n "Starting qmail: " # démarrarage de qmail
     qmail-start '|preline procmail' splogger qmail &
     touch /var/lock/subsys/qmail
     echo
     ;;
     stop)
     # Arrête les démons.
     echo -n "Shutting down qmail: " # arrêt de qmail
     killproc qmail-lspawn
     echo
     rm -f /var/lock/subsys/qmail
     ;;
     restart)
     $0 stop
     $0 start
     ;;
     status)
     status qmail
     ;;
     *)
     echo "Usage: qmail {start|stop|restart|status}"
     exit 1
    esac
    exit 0
    

Faîtes des liens symboliques vers chaque /etc/rc.d/rcN.d/, par exemple :

ln -sf /etc/init.d/qmail /etc/rc.d/rc1.d/K19qmail

Si la première lettre est K, vous tuerez qmail quand la machine passera à ce niveau d'exécution (1 pour le mode simple ou 6 pour le redémarrage) et si la première lettre est S, vous le démarrerez (2, 3, 4, 5).

  • Comment décider si vous devez mettre un K ou un S ? Faites ce que le majorité des démons font dans ces runlevels !
  • Quel nombre devrais-je mettre après K ou S ? Le nombre suivant de celui de votre démon réseau. Cela signifie que l'agent de transport de courrier sera démarré et arrêté respectivement avant et après votre démon réseau. Sans cela, votre réseau ne sera pas activé au moment où sera lancé votre agent, alors que celui-ci s'attendra à ce qu'il fonctionne.

RedHat, Caldera et SuSE utilisent /etc/rc.d à la place de /etc pour un Debian. Ainsi, sur ces distributions, quand je parle de /etc/rc1.d comprenez /etc/rc.d/rc1.d.

Et puis c'est tout !

Pas besoin de redémarrez (Hé, vous utilisez Linux, pas un de ces petits OS de rigolos !) pour que les modifications prennent effet. Lancez juste

killall inetd
init 1

pour passez en mode mono-utilisateur. Puis tapez

init 2

pour retourner à votre niveau d'exécution par défaut (indiqué dans /etc/inittab avec le label initdefault).

Vous auriez également pu lancer à la main le script qmail mais la « méthode init » vous permet de constater si le script qmail est bien placé, c'est-à-dire lancé après les scripts réseaux mais avant tout programme qui utilise le courrier pour vous avertir (comme inn par exemple).

6.2 Smail v3.1

Smail 3.1 est de facto un agent de transport de courrier standard pour les sites utilisant uniquement UUCP et pour quelques un de ceux qui utilisent SMTP. Il est facile à configurer, il se compile sans correctif et est assez bien sécurisé.

Configurer smail

Installez le binaire smail de votre distribution (je vous recommande cette méthode) ou récupérez les sources de smail et compilez le. Si vous compilez smail, vous aurez besoin d'avoir ce qui suit dans votre fichier os/linux pour que sed fabrique des scripts shell qui marchent chez vous.

CASE_NO_NEWLINES=true

Une fois installées, les fichiers de configurations iront certainement dans le répertoire /etc/smail (mais cela peut-être différent si vous utilisez une vielle distribution) ; commençons par les éditer !

le fichier config

# source
smart_path=polux
smart_transport=uux
# destination
hostname=barberouge
domains=linux.lmm.com
visible_name=barberouge.linux.lmm.com
uucp_name=barberouge.linux.lmm.com
# max_message_size=512k
# auth_domains=foo.bar
# more_hostnames=barberouge.polux.freenix.fr

Bon, premièrement, qui va vous alimenter ? Je suis alimenté par polux via UUCP (i.e., par transport UUX) ; naturellement vous devez changer cela en fonction de votre propre situation. Par exemple, vous pourriez être alimenté par bargw.bar.foobar.com via SMTP, dans ce cas vous n'avez pas besoin de fichier de transport et vous pouvez définir -transport_file pour indiquer que vous n'en avez pas besoin.

Vous pouvez aussi utiliser postmaster_address = votre_nom, cachez la topologie du réseau dans les adresses sortantes (si vous êtes un portail) en utilisant bvisible_name, choisir quelles adresses alias peuvent aussi être utilisées pour les courriers que vous recevez grâce à more_hostnames.

Voyez la documentation de smail pour plus de détails ou les exemples de /usr/doc/smail/examples pour voir s'il y en a qui correspondent à votre cas.

le fichier directors

 # aliasinclude - développe les adresses «~:include:filename~» produites
 # par les fichiers alias.
 # Cette entrée et la suivante sont à peu près des modèles standards.
 # Il existe peu de raisons d'y apporter des changements significatifs.
 # Leur unique raison d'être est de reconnaitre et de développer les
 # adresses de la forme :
 #       :include:pathname
 # qui peuvent apparaitre dans les fichiers alias, les listes de
 # diffusions ou les fichiers forward (produite par toute
 # directive dont le pilote (driver) est forwardfile).
 aliasinclude:
 driver = aliasinclude,          # utiliser le pilote destiné à ce cas
 #   particulier ;
 nobody;                         # lorsque des violations modérées des droits
 #   se produisent, associer aux adresses
 #   l'identifiant nobody ;
 copysecure,                     # utiliser les droits du director alias ;
 copyowners,                     # utiliser le propriétaire du director alias.
 # forwardinclude - développe les adresses « :include:filename » produites
 # par les fichiers forward
 forwardinclude:
 driver = forwardinclude,         # utiliser le pilote destiné à ce cas
 #   particulier ;
 nobody;
 copysecure,                      # utiliser les droits du director forwarding ;
 copyowners,                      # utiliser le propriétaire du director forwarding.
 # aliases - cherche les développements d'alias stockés dans une base de donnée.
 # C'est le fichier d'alias standard. Il est utilisé pour réaliser des opérations
 # courantes, comme faire correspondre root, postmaster, MAILER-DAEMON et uucp aux
 # administrateurs du site, créer des développements de petite envergure
 # d'alias système, ou d'autres choses de ce genre. Dans la configuration de
 # ce site, le fichier alias est utilisé principalement pour des informations
 # d'alias et de renvois spécifiques à chaque machine.
 # Les informations générales de renvoi de courrier doivent être mises dans la
 # base de donnée « forward ».
 aliases:
 driver=aliasfile,               # directeur d'alias généraliste ;
 -nobody,                        # toutes les adresses sont associés
 #   par défaut à nobody, donc définir
 #   cette option n'est pas utile ;
 sender_okay,                    # ne pas ignorer l'expéditeur lors des
 #   développements d'adresses ;
 owner=owner-$user;              # les problèmes sont dirigés vers
 #   l'adresse du propriétaire ;
 file=/etc/aliases,
 modemask=002,                   # l'accès en écriture ne doit pas être
 #   autorisé à tous ;
 optional,                       # continuer normalement si le fichier
 #   n'existe pas ;
 proto=lsearch,                  # fichier ASCII non trié.
 # forward - cherche des développements d'adresse selon le contenu de la base
 # de données « forwarding ».
 # C'est la base des adresses des renvois utilisateurs pour tout un sous-domaine.
 # Les informations nécessaires pour faire suivre le courrier des utilisateurs,
 # présents ou passés, vers leur machine préférée sont conservées ici.
 # La base forward est expédiée vers les autres systèmes locaux lors de chaque
 # modification, afin de maintenir la cohérence du réseau.
 #forward:
 #       driver = aliasfile,             # Directeur d'alias généraliste ;
 #       -nobody,                        # toutes les adresses sont associés
 #   par défaut à nobody, donc définir
 #   cette option n'est pas utile ;
 #       owner = real-$user;             # les problèmes sont dirigés vers
 #   l'adresse du propriétaire ;
 #
 #       file = /etc/forward,
 #       modemask = 002,
 #       proto = dbm,                    # Utiliser la librairie dbm(3X)
 #   pour accéder à la base.
 # dotforward - développe les fichiers .forward des répertoires personnels.
 # Pour les utilisateurs qui ont une entrée dans la base « forward », un fichier
 # .forward n'est utilisé que s'il est sur leur machine personnelle, telle
 # qu'indiquée dans la base forward. Lorsque ce fichier est utilisé, il est traité
 # comme une liste d'adresse indiquants la liste des destinataires auxquels
 # doivent être envoyés les courriers reçus par cet utilisateur, au lieu (ou
 # en plus) d'être stockés en local.
 dotforward:
 driver = forwardfile,           # le directeur généraliste forwarding ;
 owner = postmaster, nobody, sender_okay;
 file = ~/.forward,              # le fichier .forward du répertoire personnel ;
 checkowner,                     # l'utilisateur peut être propriétaire de ce fichier ,
 owners = root,                  # ou bien root ;
 modemask = 002,                 # ne doit pas être accessible à tous en écriture ;
 caution = daemon:root,          # ne rien exécuter en tant que root ou daemon ;
 # faire extrêmement attention aux dossiers personnels potentiellement
 # accessibles à distance.
 unsecure = "~uucp:/tmp:/usr/tmp:/var/tmp"
 # forwardto - développe le « Forward to » dans les fichiers boîtes aux lettres utilisateur.
 # Cela émule le méchanisme de renvoi de courrier des systèmes V6/V7/System-V qui utilise
 # une ligne d'adresses de renvoi au début des fichiers boites aux lettres (BAL) utilisateur
 # avec comme préfixe la chaîne « Forward to  » (avec un blanc après to)
 forwardto:
 driver = forwardfile,
 owner = postmaster, nobody, sender_okay;
 file = /var/spool/mail/${lc:user},      # pointe sur la BAL utilisateur ;
 forwardto,                      # autoriser la fonction « Forward to » ;
 checkowner,                     # l'utilisateur peut être propriétaire de ce fichier,
 owners = root,                  # ou root ;
 modemask = 0002,                # sous System V, le groupe mail a la permission d'écriture ;
 caution = daemon:root           # ne rien exécuter sous root ou daemon.
 # user - associe un utilisateur sur l'hôte local à la distribution dans sa BAL.
 user:   driver = user;                  # reconnait les utilisateurs locaux ;
 transport = local               # le transport local distribue le courrier
 #   dans les BAL.
 # real_user - reconnaît les utilisateurs préfixés par la chaîne "real-"
 # Très utile pour permettre à une adresse de correspondre explicitement à
 # une BAL utilisateur. Par exemple, des erreurs de développement d'un fichier
 #.forward pourraient être distribuées ici, ou des boucles dans le renvoi de courrier entre
 # plusieurs machines pourraient être résolues en utilisant une adresse real-nom_d_utilisateur.
 # Aussi, les utilisateurs qui souhaitent utiliser le courrier comme moyen de transfert de
 # données vers une machine qui n'est pas leur machine personnelle peuvent envoyer un
 # courrier à real-nom_d_utilisateur@hôte-distant.
 real_user:
 driver = user;
 transport = local,
 prefix = "real-"                # par exemple, reconnait real-root.
 # lists - développe les listes de diffusion stockées dans le répertoire list
 # Les listes de diffusions peuvent être crées simplement en créant un fichier
 # dans le répertoire /etc/smail/lists.
 lists:  driver = forwardfile,
 caution,                        # marque toutes les adresses avec l'indicateur « caution »,
 nobody,                         # et les associent à l'utilisateur nobody ;
 owner = owner-$user;            # les sites system V peuvent vouloir utiliser
 #   o-$user, puisque owner-$user peut être
 #   trop long, la taille limite des noms de
 #   fichiers étant de 14 caractères ;
 file = lists/${lc:user}         # les listes sont sous $smail_lib_dir.
 # owners - développe les listes de diffusion stockées dans le répertoire des
 #          propriétaires de listes (répertoire « list owner »).
 # Les listes de propriétaires de listes de diffusion peuvent être simplement crées en
 # créant un fichier dans le répertoire /etc/smail/lists/owner. Ces listes permettent
 # de diffuser localement les messages d'erreurs générées par une liste de diffusion.
 # Pour créer une liste des propriétaires d'une liste de diffusion,
 # créer un fichier portant le nom de la liste dans /etc/smail/lists/owners.
 # Cela va créer une adresse de courrier owner-nom_de_liste,
 # telle qu'utilisée par le directeur « lists » plus haut.
 owners: driver = forwardfile,
 caution,                        # marque toutes les adresses avec l'indicateur « caution »,
 nobody,                         # puis les associent à l'utilisateur nobody ;
 owner = postmaster;
 prefix = "owner-",
 file = lists/owner/${lc:user}   # les listes sont sous $smail_lib_dir.
 # request - développe les listes de diffusions stockées dans le répertoire des listes
 # de requêtes. Les listes de diffusion des requêtes concernant une liste de diffusion
 # peuvent être crées tout simplement en créant un fichier dans le répertoire
 # /etc/smail/lists/request. Les adresses requête sont utilisées en général
 # comme adresse standard pour les demandes concernant une liste de diffusion.
 # Par exemple, les demandes d'abonnement ou de désabonnement pour une liste seront
 # en général envoyées à l'adresse « nom_de_liste-request », qui devra être configurée
 # pour faire suivre le courrier à la ou les personnes appropriées.
 request: driver = forwardfile,
 caution,                        # marque toutes les adresses avec l'indicateur « caution »,
 nobody,                         # puis les associent à l'utilisateur nobody ;
 owner = postmaster;
 suffix = "-request",
 file = lists/request/${lc:user} # les listes sont sous $smail_lib_dir.

Vous de devriez pas avoir besoin de changer quoi que ce soit ici, seulement les option destinées aux listes de diffusions si vous voulez gérer de telles listes avec smail, ou bien les options de renvoi (forward options) si, par exemple vous voulez interdire les renvois.

Le fichier fidopaths

.f105.n324.z2.fidonet.org       f105.n324.z2.fidonet.org!%s
.n324.z2.fidonet.org            f105.n324.z2.fidonet.org!%s
.z2.fidonet.org                 f105.n324.z2.fidonet.org!%s
.fidonet.org                    f105.n324.z2.fidonet.org!%s

Créez ce fichier seulement si vous utilisez ifmail et FIDO.

Le fichier routers

 # forces - force l'utilisation d'un chemin de distribution précis
 # L'existence de cette base de donnée est un moyen de coder en dur les chemins d'accès de
 # diverses machines ou domaines. Utilisé pour créer des distorsions temporaires
 # des autres bases de données de routage. Pour changer la base, éditer le
 # fichier maps/force.path puis faire un « make » dans le sous-répertoire maps/
 forces:
 driver = pathalias,             # nom du routeur effectuant les recherches
 #   dans les bases de chemins ;
 method = /etc/smail/maps/table; # les transports sont dans ce fichier ;
 file = forcepaths,              # fichier contenant l'information sur
 #   les chemins forcées ;
 proto = lsearch,                # utiliser le fichier de chemins trié ;
 optional,
 reopen                          # se fermer lorsqu'il n'est pas utilisé.
 uucp_neighbors:
 driver=uuname,                  # utiliser un programme renvoyant les voisins ;
 transport=uux;
 cmd="/usr/bin/uuname -a",       # plus précisément, utiliser le programme uuname ;
 #        domain=uucp                    # enlever le suffixe «~.uucp~»
 # smart_host - un directeur vers une «~machine de relais postal~» partiellement définie
 # Si l'attribut smart_path du fichier de configuration contient un
 # chemin entre l'hôte local et un hôte distant, alors les noms d'hôtes
 # qui ne seraient pas reconnus autrement seront réexpédiés vers l'hôte distant
 # précédemment mentionné (la machine de relais postal). L'attribut du fichier
 # de configuration smart_transport peut être utilisé pour indiquer un moyen
 # de transport différent vers la machine-relais.
 # Si l'attribut smart_path n'est pas spécifié, ce routeur est ignoré.
 smart_host:
 driver = smarthost,             # Pilote conçu pour ce cas spécial
 transport = uux                 # Par défaut, distribuer via UUCP
 #       path=phreak
 # ifmail - pour envoyer des courriers à fidonet et vice versa.
 ifmail:
 driver=pathalias,
 transport=ifmail;
 file=fidopaths,
 proto=lsearch

Vous ne devez inclure la partie ifmail que si vous utilisez ifmail pour les courriers FIDO. Il est à noter que vous pouvez aussi changer le mode de transport de uux (i.e., UUCP) vers, par exemple, smtp, ou même coder en dur les chemins vers différentes machines ou domaines dans /etc/smail/maps/table.

C'est utile si vous voulez que des courriers sortants pour votre réseau local soient distribués immédiatement, puisque il n'auront pas besoin d'être routé vers la connexion UUCP de votre accès internet.

Le fichier transports

 # local - distribution du courrier aux utilisateurs locaux
 # Indique à smail d'ajouter directement le courrier à la fin des fichiers boîtes
 # aux lettres des utilisateurs dans le répertoire /var/spool/mail
 #local: driver = appendfile,            # ajoute le message à la fin d'un fichier ;
 #       -return_path,                   # ajoute le champ « Return-Path: » ;
 #       local,                          # utiliser la forme locale de distribution ;
 #       from,                           # ajoute la ligne d'enveloppe « From_ » ;
 #       unix_from_hack;                 # insère> avant From dans le corps du message ;
 #
 #       file = /var/spool/mail/${lc:user},      # utiliser cet emplacement pour Linux ;
 #                                               # à noter, le répertoire de stockage de
 #   courrier doit avoir des droits à 1777 ;
 #       file = ~/mailfile,       # utiliser cet emplacement pour une sécurité accrue ;
 #       group = mail,            # groupe devant être propriétaire des fichiers pour le System V ;
 #       mode = 0660,             # sous System V, le groupe mail doit avoir les droits d'accès ;
 #       suffix = "\n",           # ajouter d'une ligne supplémentaire.
 #       append_as_user,
 # Ceci permet à chaque utilisateur d'avoir un fichier ~/.procmailrc pour contrôler
 # le filtrage du courrier et permettre de sauvegarder les courriers provenant de
 # listes de diffusions dans des boîtes aux lettres séparées s'ils le souhaitent.
 local:  +inet,
 -uucp,
 driver = pipe,                  # envoi du message via un tube
 return_path,                    # inclus un champ « Return-Path: » ;
 local,                          # utiliser la forme locale de distribution ;
 from,                           # ajoute la ligne d'enveloppe « From_ » ;
 unix_from_hack;                 # insère> avant From dans le corps du message ;
 cmd = "/usr/bin/procmail",      # utilise procmail pour distribuer le courrier local ;
 parent_env,                     # tire les informations d'environnement de
 #   l'adresse du parent ;
 pipe_as_user,                   # utilise l'identifiant utilisateur
 #   associé avec l'adresse ;
 umask = 0022,                   # droits par défaut du processus fils ;
 #       -ignore_status,                 # il faut faire confiance au code de retour ;
 #       -ignore_write_errors,           # réessayer lorsqu'un tube est brisé.
 # pipe - distribue le courrier à des commandes shells
 # Ceci est implicitement utilisé quand smail rencontre des adresses commençant
 # par le caractère barre verticale, comme « |/usr/lib/news/recnews talk.bizarre ».
 # La barre verticale est enlevée de l'adresse avant d'être transmise au transport.
 #pipe:  driver = pipe,                  # envoyer le message à un autre programme
 #                                       #   via un tube ;
 #       return_path, local, from, unix_from_hack;
 #
 #       cmd = "/bin/sh -c $user",       # envoyer l'adresse au shell Bourne ;
 #       parent_env,                     # tire les informations d'environnement de
 #   l'adresse du parent ;
 #       pipe_as_user,                   # utilise l'identifiant utilisateur
 #   associé avec l'adresse ;
 #       umask = 0022,                   # droits par défaut du processus fils ;
 #       -log_output,                    # ne pas enregistrer stdout/stderr dans les logs ;
 #       ignore_status,                  # le code de retour peut être faux, l'ignorer ;
 #       ignore_write_errors,            # ignorer les tubes brisés.
 # file - distribue le courrier dans des fichiers
 # Utilisé implicitement lorsque smail rencontre des adresses qui commencent
 # par un barre de division « / » ou un tilde « ~ », comme « /usr/info/list_messages »
 # ou peut être « ~/Mail/inbox ».
 #file:  driver = appendfile,
 #       return_path, local, from, unix_from_hack;
 #
 #       file = $user,                   # le nom du fichier est pris dans l'adresse ;
 #       append_as_user,                 # utilise l'identifiant utilisateur
 #   associé avec l'adresse ;
 #       expand_user,                    # développe ~ et $ dans l'adresse.
 #       check_path,
 #       suffix = "\n",
 #       mode = 0644
 # uux - distribue le courrier au programme rmail sur un site UUCP distant
 #
 # Il est possible, au cours d'une seule transaction UUCP, de distribuer
 # le courrier destiné à 5 adresses électroniques.
 uux:    driver = pipe,
 -uucp,
 inet,
 #       uucp,                           # utilise le format d'adresse de style UUCP ;
 from,                           # fourni une ligne d'enveloppe « From_ » ;
 max_addrs = 5,                  # au plus 5 adresses par appel ;
 max_chars = 200;                # au plus 200 caractères pour une adresses ;
 # l'option -r évite une distribution immédiate, les parenthèses autour de la variable
 # $user empêche qu'elle soit interprêté par uux.
 cmd = "/usr/bin/uux - -r -g$grade $host!rmail $((${strip:user})$)",
 #        cmd="/usr/bin/uux - $host!rmail $(($user)$)",
 ignore_write_errors,            # ignore les tubes brisés.
 umask = 0022,
 #       pipe_as_sender,
 # uux_one_addr - distribue le courrier par UUCP à un hôte distant qui ne peut
 #                accepter qu'une seule adresse à la fois.
 #
 # Cela est souvent nécessaire quand on distribue du courrier à un site qui
 # tourne sous une version non modifiée de 4.1BSD.
 uux_one_addr:
 driver = pipe,
 uucp,                           # utilise le format d'adresse de style UUCP ;
 from;                           # fourni une ligne d'enveloppe « From_ » ;
 # l'option -r empêche une distribution immédiate.
 cmd = "/usr/bin/uux - -r -g$grade $host!rmail (${strip:user})",
 umask = 0022,
 pipe_as_sender
 queueonly:
 driver = pipe;                  # envoi du message via un tube ;
 cmd = "/usr/lib/sendmail -Q -f $sender -bm $user",
 # utilise getmail pour les distributions locales ;
 user=root,                      # exécute getmail en tant qu'utilisateur « root » ;
 group=mail,                     # exécute getmail sous le groupe « mail » ;
 parent_env,                     # tire les informations d'environnement de
 #   l'adresse du parent ;
 -pipe_as_user,                  # utilise l'identifiant utilisateur
 #   associé avec l'adresse ;
 umask = 0007,                   # droits par défaut du processus fils.
 # pour distribuer un message. Le transport SMTP n'est inclus que si le support
 # réseau BSD est présent.
 # L'attribut uucp peut être positionné pour le transfert dans une zone uucp.
 # L'attribut inet doit être positionné pour les transferts vers l'internet.
 # note : c'est loin d'être optimal, un logiciel d'arrière-plan devrait exister
 # qui puisse prendre en charge plusieurs messages par connection.
 # de plus : il peut être nécessaire de restreindre max_addrs à 100, puisqu'il
 # s'agit de la limite inférieure qu'une mise en oeuvre de SMTP est tenue de
 # prendre en charge.
 smtp:   driver=tcpsmtp,
 inet,                           # si UUCP_ZONE n'est pas défini ;
 #       uucp,                           # si UUCP_ZONE est défini ;
 -max_addrs, -max_chars;         # pas de limite sur le nombre d'adresses ;
 short_timeout=5m,               # la durée maximum des opérations courtes ;
 long_timeout=2h,                # la durée maximum des opérations SMTP plus longues ;
 service=smtp,                   # se connecter à ce port de service ;
 # Pour l'utilisation internet : ne pas commenter les 4 lignes qui suivent
 use_bind,                       # résoud les enregistrements A multiples et MX ;
 defnames,                       # utiliser la recherche standard de domaines ;
 defer_no_connect,               # essayer à nouveau si le serveur est tombé ;
 local_mx_okay,                  # évite un MX vers l'hôte local.
 ifmail:
 from,received,max_addrs=5,max_chars=200,
 driver=pipe;
 pipe_as_sender,
 cmd="/usr/local/bin/ifmail -x9 -r$host $((${strip:user})$)"

Vous ne devez inclure la partie ifmail que si vous utilisez ifmail pour les courriers FIDO. À part cela, vous ne devriez pas avoir besoin de modifier quoi que ce soit dans ce fichier qui définit les agents de transport (comme UUX, SMTP, etc.) que vous pouvez utiliser comme paramètres dans les autres fichiers de configuration.

Remarquez que j'ai commenté quelques parties comme pipes ou file pour améliorer la sécurité.

Le répertoire maps

Il contient les fichiers map et table.

Tout d'abord le fichier map :

#N      foo.bar foo2.bar2
#S      AT 486/RedHat Linux 1.2.13
#O      organization
#C      contact
#E      administration (email)
#T      phone
#P      address
#R
#U      hosts connected via uucp
#W      created/edited by
#
hname polux
hname linux.eu.org
hname = polux
hname = polux.linux.eu.org

Encore une fois, adaptez le fichier à votre situation (je suis alimenté par polux.linux.eu.org).

Maintenant le fichier table :

*       uux

Vous pouvez définir différents transports pour différents chemins, par exemple smtp pour les machines de votre réseau local, uux pour le reste du monde ou vice-versa (j'utilise UUCP pour tous les courriers sortants, donc j'utilise * !)

Autres bons exemples

Les fichiers précédents sont ceux que j'utilise pour mon site ; vous ne devriez pas rencontrer de problèmes en les utilisant comme bases pour vos propres fichiers.

Les fichiers suivants sont donnés comme de bons exemples pour configurer smail de différentes manières.

#ident "@(#) transports,v 1.2 1990/10/24 05:20:46 tron Exp"
 # Voir smail(5) pour une description complète du contenu de ce fichier
 # local - distribution du courrier aux utilisateurs locaux
 #
 # Indique à smail d'ajouter directement le courrier à la fin des fichiers boîtes
 # aux lettres des utilisateurs, contenus dans le répertoire « /usr/mail ».
 local:  driver = appendfile,            # ajouter le message à la fin du fichier ;
 return_path,                    # ajoute le champ « Return-Path: » ;
 local,                          # utiliser la forme locale de distribution ;
 from,                           # ajoute la ligne d'enveloppe « From_ » ;
 unix_from_hack;                 # insère> avant From dans le corps du message ;
 file = /usr/mail/${lc:user},    # utiliser cet emplacement pour System V ;
 group = mail,                   # groupe devant être propriétaire des fichiers
 #   pour le System V ;
 mode = 0660,                    # sous System V, le groupe mail doit avoir les
 #   droits d'accès ;
 suffix = "\n",                  # ajouter d'une ligne supplémentaire.
 append_as_user,
 # pipe - distribue le courrier à des commandes shells
 #
 # Ceci est implicitement utilisé quand smail rencontre des adresses commençant
 # par le caractère barre verticale, comme « |/usr/lib/news/recnews talk.bizarre ».
 # La barre verticale est enlevée de l'adresse avant d'être transmise au transport.
 pipe:   driver = pipe,                  # envoyer le message à un autre programme
 #   via un tube ;
 return_path, local, from, unix_from_hack;
 cmd = "/bin/sh -c $user",       # envoyer l'adresse au shell Bourne ;
 parent_env,                     # tire les informations d'environnement de
 #   l'adresse du parent ;
 pipe_as_user,                   # utilise l'identifiant utilisateur
 #   associé avec l'adresse ;
 umask = 0022,                   # droits par défaut du processus fils ;
 -log_output,                    # ne pas enregistrer stdout/stderr ;
 ignore_status,                  # le code de retour n'est pas fiable, l'ignorer ;
 ignore_write_errors,            # ignorer les tubes brisés.
 # file - distribue le courrier dans des fichiers
 #
 # Utilisé implicitement lorsque smail rencontre des adresses qui commencent
 # par un barre de division « / » ou un tilde « ~ », comme « /usr/info/list_messages »
 # ou peut être « ~/Mail/inbox ».
 file:   driver = appendfile,
 return_path, local, from, unix_from_hack;
 file = $user,                   # le nom de fichier est pris dans l'adresse
 append_as_user,                 # utilise l'identifiant utilisateur
 #   associé avec l'adresse ;
 expand_user,                    # développe ~ et $ dans l'adresse.
 suffix = "\n",
 mode = 0644
 # uux - distribue le courrier au programme rmail sur un site UUCP distant
 #
 # Il est possible, au cours d'une seule transaction UUCP, de distribuer
 # le courrier destiné à 5 adresses électroniques.
 uux:    driver = pipe,
 uucp,                           # utilise le format d'adresse de style UUCP ;
 from,                           # fourni une ligne d'enveloppe « From_ » ;
 max_addrs = 5,                  # au plus 5 adresses par appel ;
 max_chars = 200;                # au plus 200 caractères pour une adresse ;
 # l'option -r évite une distribution immédiate, les parenthèses autour de la variable
 # $user empêche qu'elle soit interprêté par uux.
 cmd = "/usr/bin/uux - -r -g$grade $host!rmail $((${strip:user})$)",
 umask = 0022,
 pipe_as_sender
 # uux_one_addr - distribue le courrier par UUCP à un hôte distant qui ne peut
 #                accepter qu'une seule adresse à la fois.
 #
 # Cela est souvent nécessaire quand on distribue du courrier à un site qui
 # tourne sous une version non modifiée de 4.1BSD.
 uux_one_addr:
 driver = pipe,
 uucp,                           # utilise le format d'adresse de style UUCP ;
 from;                           # fourni une ligne d'enveloppe « From_ » ;
 # l'option -r empêche une distribution immédiate ;
 cmd = "/usr/bin/uux - -r -g$grade $host!rmail (${strip:user})",
 umask = 0022, pipe_as_sender
 # demand - distribution vers un programme rmail distant, connexion à la demande
 demand: driver = pipe,
 uucp, from, max_addrs = 5, max_chars = 200;
 # si l'option -r est omise, essaye de contacter le site distant immédiatement.
 cmd = "/usr/bin/uux - -g$grade $host!rmail $(($user)$)",
 umask = 0022, pipe_as_sender
 # uusmtp - distribution vers un programme rsmtp sur un site UUCP distant
 #
 # Distribution via un simple protocol de transfert SMTP par lots
 # vers la machine distante.
 # Ce qui permet d'utiliser des adresses bien plus libres et qui évite les
 # limitations de uux en termes de nombre d'adresses de destination.
 uusmtp: driver = pipe,
 bsmtp,                          # envoi des lots de commandes SMTP ;
 -max_addrs,                     # il n'y a pas de limite sur le nombre
 -max_chars;                     # et la taille des adresses de destination ;
 # mettre -r pour que la distribution ne soit pas immédiate ; les adresses de
 # destination sont stockées dans les données envoyées vers l'entrée standard de rsmtp.
 cmd = "/usr/bin/uux - -r -g$grade $host!rsmtp",
 umask = 0022, pipe_as_sender
 # demand_uusmtp - distribution vers un programme rsmtp distant, connexion à la demande
 demand_uusmtp:
 driver = pipe,
 bsmtp, -max_addrs, -max_chars;
 # si l'option -r est omise, essaye de contacter le site distant immédiatement.
 cmd = "/usr/bin/uux - -g$grade $host!rsmtp",
 umask = 0022, pipe_as_sender
 # smtp - distribution du courrier en utilisant SMTP sur TCP/IP
 #
 # Se connecte à un hôte distant via TCP/IP et initie une conversation SMTP pour
 # distribuer un message.
 # Le transport SMTP n'est inclus que si le support réseau BSD est présent.
 # note : il peut être nécessaire de restreindre max_addrs à 100, puisqu'il
 # s'agit de la limite inférieure qu'une mise en oeuvre de SMTP est tenue de
 # prendre en charge.
 smtp:   driver = smtp,
 -max_addrs,
 -max_chars
 #ident "@(#) table,v 1.2 1990/10/24 05:20:31 tron Exp"
 # Ce fichier indique les transports utilisés pour distribuer le courrier
 # à des hôtes spécifiques à partir de bargw.
 #host           transport
 #--------       ---------
 curdsgw         demand_uusmtp   # distribue le courrier via des lots de connexions SMTP ;
 oldbsd          uux_one_addr    # les sites 4.1BSD ne peuvent accepter plus d'une adresse ;
 sun             demand          # appelle « sun » lorsqu'il y a du courrier à envoyer ;
 *               uux             # pour tous les autres, connexion à intervalles réguliers.

Relancer inetd

Pour lancer smail en tant que démon SMTP, ajoutez une des lignes suivantes dans votre /etc/inetd.conf :

 smtp stream tcp nowait  root  /usr/bin/smtpd smtpd
ou :
 smtp stream tcp nowait  root  /usr/sbin/tcpd  /usr/sbin/in.smtpd

Le courrier sortant sera alors envoyé automatiquement quand vous utiliserez elm.

Smail et SMTP

Généralement les FAI utilisent SMTP. Par conséquent, vous ne devriez pas avoir de problème pour envoyer votre courrier. Quand vous n'êtes pas connecté à Internet, lorsque vous envoyez un courrier électronique, il est stocké dans /var/spool/mail/input. Ensuite, quand vous vous connecterez, runq sera lancé et votre courrier envoyé. Cependant, le vrai problème est la réception de votre courrier puisque votre FAI doit s'occuper de plusieurs clients, et non pas uniquement de vous !

Généralement, vous pouvez récupérer votre courrier via le protocole POP (reportez-vous à la section POP plus bas).

6.3 Sendmail+IDA (attention, cette section n'est pas à jour)

Pour les gros sites, sendmail est un choix valable, grâce à son « incroyable facilité d'utilisation » (sentiment très relatif quand on connaît qmail), mais vous devrez choisir entre sendmail+IDA et sendmail 8.x :

  • Si vous utilisez un vieux noyau (1.0) : sendmail+IDA.
  • Si vous utilisez un noyau un peu moins vieux (1.2) : sendmail+IDA et la modification du code source
  • Ceux qui utilisent un noyau récent (2.0) choisirons sendmail 8.x .

Attention, les linuxiens débutants et les personnes préoccupées par la sécurité et la simplicité de configuration devraient plutôt essayer smail ou qmail, qui sont plus faciles à utiliser et plus sécurisés.

Installation à partir des sources

Si votre distribution n'est pas fournie avec un paquetage sendmail prêt-à-l'emploi (.rpm pour RedHat, Caldera et SuSE, .deb pour Debian) téléchargez les sources et lancez :

  • cd / ; tar -zxvf sendmail5.67b+IDA1.5.tgz
  • Placez vous dans le répertoire /usr/local/lib/mail/CF et concaténez les fichiers sample.m4 et local.m4 dans votre_nom_de_machine.m4.

Éditez hostname, aliases et smarthost et placez-y les informations correspondant à votre site. Le fichier par défaut est prévu pour un site utilisant uniquement UUCP (ce qui n'est plus le cas des versions 8.x), qui a des entêtes de domaine et qui dialogue avec une machine « de relais postal » (smarthost). Ensuite lancez make votre_nom_de_machine.cf et copiez le fichier créé dans /etc/sendmail.cf.

Si vous utilisez seulement UUCP, vous n'avez besoin de créer aucune des tables mentionnées dans le fichier README.linux. Vous n'aurez qu'à utiliser touch sur les fichiers pour que le Makefile marche. Éditez ensuite le fichier .m4, lancez make sendmail.cf et testez-le.

Si votre site utilise uniquement UUCP et que vous dialoguez avec des sites autres que votre machine-relais, vous devrez ajouter des entrées uupcpxtable pour chacun d'entre eux (sinon le courrier qui leur sera envoyé passera par la machine-relais) et lancer dbm sur la nouvelle uucpxtable.

Si vous utilisez la distribution binaire de Rich Braum de la version 5.67a, vous devrez lancer /usr/lib/sendmail -bz pour que les changements soient pris en compte.

Vous devriez également mettre à jour votre version vers au moins la 5.67b puisque qu'il y a un méchant trou de sécurité dans la version 5.67a et les précédentes. Un autre point sympathique est que si vous activez l'option mail.debug et que vous utilisez syslogd, la liste de vos courriers entrants et sortants sera enregistrée. Voyez le fichier /etc/syslogd.conf/ pour plus de détails.

Les sources de sendmail+IDA se trouve sur http://vixen.cso.uiuc.edu ; elles ne nécessitent aucun correctif pour tourner sous Linux si vous utilisez quelque-chose comme un noyau 1.00.

Si vous utilisez un noyau dont la version est supérieur à la 1.1.50, vous allez devoir vous amuser à enlever tous les correctifs spécifiques à Linux qui se trouvent dans les sources officielles. (Je vous avais prévenu que ce sendmail était seulement pour les vieux noyaux :-)

Il est extrêmement facile de repérer les endroits à corriger : lancez make et quand il vous hurle dessus, allez à la ligne du fichier qu'il vous indique et commentez le code spécifique à Linux qui s'y trouve.

Si vous avez opté pour sendmail+IDA, je vous recommande fortement d'utiliser la version sendmail5.67b+IDA1.5, car tous les correctifs spécifiques à Linux sont maintenant dans les sources officielles et plusieurs trous de sécurité qui étaient dans les anciennes versions que vous auriez récupérées ou compilées avant le 1er décembre 1993 ont été réparés.

Maintenant que l'on en est au noyau 2.0 (NDT : et même au 2.4 au moment où j'écris ces lignes) vous devriez utiliser sendmail 8.x à la place de sendmail+IDA, mais je vous ai déjà dit que vous devriez choisir sendmail 8.x :-)

Le fichier sendmail.m4

Sendmail+IDA se configure par l'intermédiaire du fichier sendmail.m4 et non directement via le fichier sendmail.cf. Ce qui rend cette façon de travailler intéressante est que grâce à elle, il est simple de mettre en place des configurations qui seraient extrêmement difficiles (voire totalement impossibles) à réaliser avec smail ou avec le sendmail traditionnel.

Le fichier sendmail.m4 qui correspond à la configuration smail que nous avons décrite au-dessus ressemble à ceci :

 dnl #------------------ EXEMPLE DE FICHIER SENDMAIL.M4 ------------------
 dnl #
 dnl # La chaîne « dnl » est utilisée comme en-tête d'une ligne de commentaires.
 dnl # (Enfin pas exactement, mais utilisez-la pour cela si vous en avez
 dnl #  besoin :-)
 dnl # En général, il est préférable d'éviter de remplacer les chemins par
 dnl # défaut dans LIBDIR
 dnl #define(LIBDIR,/usr/local/lib/mail)dnl   # dossier contenant tous les
 dnl                                          # fichiers de support~;
 define(LOCAL_MAILER_DEF, mailers.linux)dnl   # outil de distribution locale~;
 define(POSTMASTERBOUNCE)dnl                  # les messages retournés sont
 dnl                                          # envoyés au «~receveur principal~»
 dnl                                          # (postmaster)~;
 define(PSEUDODOMAINS, BITNET UUCP)dnl        # ne pas essayer le DNS sur ceux-ci.
 dnl #
 dnl #-------------------------------------------------------------
 dnl #
 dnl # noms par lesquels nous sommes connus
 define(PSEUDONYMS, machine.sousdomaine.domaine machine.UUCP)
 dnl #
 dnl # notre nom de machine
 define(HOSTNAME, machine.sousdomaine.domaine)
 dnl #
 dnl # notre nom UUCP
 define(UUCPNAME, machine)dnl
 dnl #
 dnl #-------------------------------------------------------------
 dnl #
 define(UUCPNODES, |uuname|sort|uniq)dnl       # nos voisins UUCP~;
 define(BANGIMPLIESUUCP)dnl                    # s'assure que le courrier
 define(BANGONLYUUCP)dnl                       # UUCP est correctement traité~;
 define(RELAY_HOST, mon_voisin_UUCP)dnl        # notre machine-relais~;
 define(RELAY_MAILER, UUCP-A)dnl               # on atteind notre machine-
 dnl                                           # relais par UUCP
 dnl #
 dnl #--------------------------------------------------------------------
 dnl #
 dnl # les diffentes tables dbm
 dnl #
 define(ALIASES, LIBDIR/aliases)dnl            # les alias système
 define(DOMAINTABLE, LIBDIR/domaintable)dnl    # machines du domaine
 define(PATHTABLE, LIBDIR/pathtable)dnl        # base de données des chemins
 define(GENERICFROM, LIBDIR/generics)dnl       # adresses sources génériques
 define(MAILERTABLE, LIBDIR/mailertable)dnl    # agents de courrier par machine
 dnl                                           # ou par domaine
 define(UUCPXTABLE, LIBDIR/uucpxtable)dnl      # chemin des machines que l'on
 dnl                                           # alimente
 define(UUCPRELAYS, LIBDIR/uucprelays)dnl      # chemins rapides
 dnl #
 dnl #--------------------------------------------------------------------
 dnl #
 dnl # inclut le «~véritable~» code qui fait tout marcher
 dnl # (fournit avec le code source)
 dnl #
 include(Sendmail.mc)dnl                         # entrée nécessaire !
 dnl #
 dnl #------------ FIN DE L'EXEMPLE DE FICHIER SENDMAIL.M4 ------- -------

Choisir un logiciel de distribution locale du courrier

À la différence de la plupart des distributions Unix, Linux n'est pas fourni avec un agent par défaut de distribution du courrier local.

La distribution Slackware est l'exception qui confirme la règle. Du moins, cette fonctionnalité est proposé par le script d'installation facile-à-utiliser-mais-de-longue-haleine. C'est procmail qui est utilisé.

Actuellement, deliver ou procmail sont en général installés, avec une configuration par défaut de sendmail adaptée à la distribution du courrier local. De sorte qu'aucune difficulté additionnelle ne vient pimenter une configuration déjà très complexe. Je recommande d'utiliser deliver ou procmail, qui sont très faciles à trouver, et qui peuvent être proposés sous la forme de paquetages optionnels dans quelques distributions Linux.

Dans ce but, vous aurez besoin de définir LOCAL_MAILER_DEF dans le fichier sendmail.m4 qui pointe vers un fichier de ce genre :

 # -- /usr/local/lib/mail/mailers.linux --
 #     (agents de distribution locaux pour Linux)
 Mlocal, P=/usr/bin/deliver, F=SlsmFDMP, S=10, R=25/10, A=deliver $u
 Mprog,  P=/bin/sh,       F=lsDFMeuP,   S=10, R=10, A=sh -c $u

Il y aussi une option par défaut d'utilisation de deliver incluse dans le fichier Sendmail.mc qui est importé par le fichier sendmail.cf. Pour vous en servir, n'utilisez pas le fichier mailers.linux mais incluez ce qui suit dans votre fichier sendmail.m4 :

 dnl --- (dans sendmail.m4) ---
 define(LOCAL_MAILER_DEF, DELIVER)dnl    # agent de distribution locale

Malheureusement, Sendmail.mc considère que deliver est installé dans /bin ce qui n'est pas le cas sur une Slackware1.1.1 (il est installé dans /usr/bin). Dans ce cas, vous aurez besoin soit de créer un lien, soit de reconstruire deliver à partir des sources pour qu'il réside dans /bin. À noter que procmail est généralement meilleur que deliver, par exemple pour le filtrage du courrier.

Tables dbm de sendmail+IDA

La mise en place de comportements spéciaux vers certains sites et domaines est réalisée via un certain nombre de tables dbm plutôt que par une modification directe du fichier sendmail.cf.

Consultez le numéro de juillet 1994 du Linux Journal (si vous pouvez encore le trouver :-) et référez-vous aux docs qui se trouvent dans les sources, ou au chapitre sendmail de la nouvelle version de Networking Administration Guide du Linux Documentation Project qui sera disponible incessamment sous peu.

  • mailertable : définit un comportement spécial pour les machines et les domaines distants.
  • uucpxtable : force la distribution de courrier via UUCP pour des machines qui sont au format DNS.
  • pathtable : définit le bang-paths UUCP utilisé vers les machines ou domaines distants.
  • uucprelays : court-circuite le chemin pathalias vers des machines distantes connues.
  • genericfrom : convertit les adresses internes en adresses génériques visibles par le monde extérieur.
  • xaliases : convertit les adresses génériques vers ou à partir des adresses internes.
  • decnetxtable : convertit les adresses RFC-822 en adresses DECnet.

Quelles sont les entrées réellement nécessaires ?

Quand il n'utilise aucune table dbm optionnelle, sendmail distribue le courrier via le RELAY_HOST (machine de relais) et le RELAY_MAILER (agent de relais) défini dans le fichier sendmail.m4 utilisé pour générer sendmail.cf. Il est facile de redéfinir ce comportement via des entées dans domaintable ou uucpxtable.

Un site générique qui est sur Internet et utilise DNS, ou qui n'utilise qu'UUCP et fait suivre le courrier via UUCP par une machine de relais postal, n'a probablement besoin d'aucune entrées dans ces tables.

Virtuellement, tous les systèmes devraient définir les macrosi DEFAULT_HOST et PSEUDODYMS , qui définissent le nom canonique du site et les alias par lesquels il est connu.

Si vous n'avez qu'une machine de relais et un agent relais de courrier vous n'avez pas besoin de définir ces macros puisque cela marche automagiquement. Les machines UUCP nécessiteront probablement de définir UUCPNAME comme leur nom officiel UUCP.

Vous devrez probablement également définir RELAY_MAILER et RELAY_HOST qui active le routage via une machine de relais postal.

Le type de transport du courrier utilisé doit être défini dans RELAY_MAILER. Il devrait être en général UUCP-A pour les sites UUCP sites. Si votre site n'utilise que SMTP et utilise un DNS, vous devrez changer RELAY_MAILER.

Si vous utilisez SLIP, la manière la plus simple de configurer votre site est de faire suivre tout votre courrier sortant vers votre fournisseur d'accès à Internet. Pour cela, définissez les macros ISOLATED_DOMAINS et VALIDATION_DOMAINS pour qu'elles correspondent à votre nom de domaine. Définissez également RELAY_HOST qui doit contenir le nom de la machine de votre fournisseur d'accès à Internet, et RELAY_MAILER qui doit contenir TCP. Bien sûr, vous devez obtenir la permission avant d'utiliser une machine en tant que machine de relais principale.

6.4 Sendmail 8.x

Sendmail 8.7.x de Berkeley a été la dernière version importante avant Sendmail5. Elle se compilait et se configurait très simplement sous Linux en tapant : make linux.

Vous feriez probablement mieux de vous procurer une des différentes distributions binaires sur un site d'archive dédié à Linux plutôt que des vous battre avec des choses comme Berkeley dbm.

Il existe une bonne distribution de sendmail 8.6.12 de Jason Haar (<j.haar at lazerjem.demon.co.uk>) sur sunsite.unc.edu qui contient les documentations d'origine et une petite documentation très sympa qui explique comment utiliser sendmail v8 sur les principales configurations.

L'idée principale de sendmail v8 est que l'on veut configurer le strict minimum pour que cela marche. Ce qui suit est un exemple qui devrait vous permettre de vous rapprocher de cela.

Un exemple de fichier mc 8.7.x

Exactement comme sendmail+IDA, sendmail v8 utilise m4 pour générer à partir d'un fichier de configuration le fichier sendmail.cf complet utilisé par sendmail. Voici le fichier mc que j'utilise pour mon site (ppp vers Internet pour le courrier sortant et UUCP pour le courrier rentrant).

 dnl divert(-1)
 #---------------------------------------------------------------------
 #
 # Voici le fichier .mc pour une machine linux configurée comme ceci :
 #
 #       - connecté via ppp pour le courrier sortant
 #       - connecté via UUCP pour le courrier entrant
 #       - en-tête avec domaine
 #       - aucun agent de courrier local (utilise deliver à la place)
 #       - sans DNS local et donc n'utilise pas le DNS pour transformer
 #         les adresses des courriers sortants en leurs formes canoniques
 #       - tous les courriers sortants qui ne sont pas locaux passent
 #         par la machine-relais (RELAY_HOST) via SMTP (on utilise ppp
 #         et on laisse notre FAI faire son boulot)
 #
 #                                       vds 3/31/95
 #
 #---------------------------------------------------------------------
 include(`../m4/cf.m4')
 VERSIONID(`machine Linux sans DNS transferant son courrier vers la'dnl
 `machine-relais d'un FAI via slip')dnl
 Cwmachine.mon.domaine machine.UUCP localhost
 OSTYPE(linux)
 FEATURE(nodns)dnl
 FEATURE(always_add_domain)dnl
 FEATURE(redirect)
 FEATURE(nocanonify)
 dnl MAILER(local)dnl
 MAILER(smtp)dnl
 MAILER(uucp)dnl
 define(`RELAY_HOST', smtp:relai.machine.domaine)
 define(`SMART_HOST', smtp:relai.machine.domaine)
 define(`UUCP_RELAY', smtp:relai.machine.domaine)
 define(`LOCAL_MAILER_PATH', `/bin/deliver')
 define(`LOCAL_MAILER_ARGS', `deliver $u')

Les bons morceaux de Sendmail v8

Il y a quelques différences, je suppose, pour les fanatiques d'IDA.

Jusqu'ici j'ai trouvé la suivante :

À la place de runq, tapez sendmail -q pour traiter la file d'attente.

6.5 Agents de distribution du courrier local (LDA)

À la différence de la plupart des systèmes d'exploitation, Linux ne gère pas le courrier lui-même : vous avez besoin d'un programme pour distribuer le courrier local comme par exemple lmail, procmail ou deliver.

Cependant, toutes les distributions récentes sont à présent fournies avec un agent de distribution local.

La documentation expliquant comment les utiliser pour la distribution locale du courrier est incluse dans la distribution binaire de sendmail5.67b+IDA1.5 (sur sunsite) mentionné ci-dessus.


Page suivante - Page précédente - Table des matières