4. Configuration : la base

4.1 Les fichiers de contrôle

La configuration de qmail se fait presque entièrement via un ensemble de petits fichiers texte de «contrôle» tous situés dans le répertoire /var/qmail/control/ (ou son équivalent le cas échéant). Les différents programmes composant qmail lisent le contenu de ces fichiers et positionnent leurs variables en conséquence.

Des options par défaut sont prises pour chaque fichier inexistant. Par défaut, un seul de ces fichiers existe, il s'agit de me qui contient le nom qualifié de la machine. Un «man qmail-control» donne une liste complète de tous ces fichiers, des programmes qmail qui les utilisent ainsi que des options prises par défaut. C'est très pratique.

Vous pouvez utiliser la commande qmail-showctl pour obtenir un rapport sur les différents fichiers de contrôle présents sur votre système qmail ainsi que les valeurs par défaut utilisées.

Il ne faut surtout pas oublier de demander à qmail de relire ses fichiers de contrôle après la modification de l'un d'entre eux. Pour ce faire, il suffit de faire un


root$ kill -HUP pid_de_qmail-send

aliasempty

Le premier fichier de contrôle que vous serez amené à modifier est sans doute /var/qmail/control/aliasempty. Il contient le nom de la boite aux lettres dans laquelle le MDA qmail-local livre le courriel lorsqu'il n'y a pas de .qmail. Sa valeur par défaut est ./Mailbox.

Cette règle de livraison par défaut peut néanmoins être spécifiée en ligne de commande à qmail-start lors du lancement de qmail (voir la page de manuel). Elle sera transmise à qmail-lspawn.

Pour conserver la livraison par défaut dans /var/spool/mail, vous pouvez imiter le paquetage qmail de la Debian GNU/Linux Hamm : se servir du MDA procmail et lancer qmail par


 qmail-start |/usr/local/sbin/qmail-procmail

Le fichier /usr/local/sbin/qmail-procmail contenant
 #!/bin/sh

 /usr/bin/preline /usr/bin/procmail && exit 0

 # Erreur EX_TEMPFAIL ?
 [ $? = 75 ] && exit 111

 # Sinon on renvoie une «Permanent Error»
 exit 100

locals

Un autre fichier très important pour vous sera sans doute /var/qmail/control/locals, utilisé par qmail-send. Il contient les noms des hôtes considérés comme locaux, c'est à dire ceux pour lesquels les courriels que vous recevez et qui leurs sont destinés seront livrés sur votre machine. Par défaut, cette variable vaut la même valeur que le fichier de contrôle me (votre nom de machine). Un petit exemple valant mieux qu'un long discours, voici un exemple de locals


mondomaine.amoi            
mamachine            
mamachine.mondomaine.amoi
ftp
ftp.mondomaine.amoi
www
www.mondomaine.amoi

/var/qmail/control/me contenant
mamachine.mondomaine.amoi

Bien sûr, il faudra de plus que les champs MX dans le DNS de ftp.mondomaine.amoi et www.mondomaine.amoi pointent sur mamachine.mondomaine.amoi.

defaulthost et defaultdomain

Les deux fichiers de contrôle /var/qmail/control/defaulthost et /var/qmail/control/defaultdomain s'avèrent très utiles. Il permettent de spécifier la façon dont qmail-inject complète les adresses incomplètes. Ainsi, une adresse ne contenant pas de partie domaine sera complétée par defaulthost et une adresse dont la partie domaine ne contient pas de point sera complétée par defaultdomain. La valeur par défaut est la même que celle de me, ce qui ne correspond pas forcément à ce que vous souhaitez.

rcpthosts

Le fichier de contrôle /var/qmail/control/rcpthosts est utilisé par qmail-smtpd. Il permet de contrôler le relayage de courriel par la machine via SMTP.

Lorsque le fichier rcpthosts existe, qmail-smtpd refusera tout courriel dont la partie domaine de l'adresse destinataire ne figure pas dans rcpthosts. Par défaut, c'est à dire en l'abscence de rcpthosts, qmail-smtpd accepte tous les courriels.

Voici un exemple de rcpthosts:


.mondomaine.amoi
mondomaine.amoi                            

qmail-smtpd refusera ici tout courriel à destination d'une adresse extérieure au domaine mondomaine.amoi.

Il est bien entendu très important que rcpthosts autorise au moins les machines figurant dans le fichier de contrôle locals pour que vous puissiez recevoir les courriels qui leurs sont destinés par SMTP.

rcpthosts est ignoré si la variable d'environnement REPLAYCLIENT est positionnée. Auquel cas, qmail-smtpd ajoute son contenu à l'adresse de destination des courriels qui transitent par lui.

Lisez la page de manuel de qmail-smtpd pour en savoir plus.

Un autre fichier de contrôle utile pour le relayage est badmailfrom, il permet de spécifier les adresses d'expéditeurs interdits. qmail-smtpd refusera tout courriel provenant d'eux. Voici un exemple :


@polution.com
polueur@poubelle.com

qmail-smtpd refusera tout courriel provenant du domaine polution.com ou de l'adresse polueur@poubelle.com.

Le contrôle de relayage par rcpthosts est souvent associé à un contrôle au niveau TCP par un «wrapper» TCP. Voir la section contrôle de relayage.

smtproutes

Le fichier de contrôle /var/qmail/control/smtproutes permet de spécifier les relais SMTP que qmail-remote devra contacter pour router les courriels sortants. voir la page de manuel de smtp-routes pour plus de détails. Voici un exemple :


premier.domaine:mail.premier.domaine
second.domaine:mail.second.domaine:24
:mail.autre.domaine              

Les courriels à destination de premier.domaine seront transmis par SMTP au port TCP 25 de mail.premier.domaine, ceux à destination de second.domaine seront transmis par SMTP au port TCP 24 de mail.second.domaine. Quant aux autres courriles, ils seront transmis au port TCP 25 de mail.autre.domaine.

qmail-remote utilise aussi les fichiers de contrôle helohost, timeoutconnect et timeoutremote, voir la page de manuel de qmail-remote.

virtualdomains

Le fichier de contrôle /var/qmail/control/virtualdomains contient une liste de domaines virtuels, un par ligne. Un domaine virtuel est un domaine pour lequel la livraison se fera vers une seule adresse. Les domaines virtuels sont pris en compte par qmail-send. Par défaut, aucun domaine virtuel n'est défini. Voici un exemple de fichier virtualdomains :


             
mondomaine.amoi:
.mondomaine.amoi:
.uucp:alias-uucp
:alias-ppp

Dans cet exemple, les courriels à destination d'adresses dans le domaine mondomaine.amoi sont livrés normalement, pour celles se terminant par .uucp, la livraison a lieu à l'adresse alias-uucp, quant aux autres, ils sont livrés à l'adresse alias-ppp.

Allez voir la page de manuel de qmail-send pour plus de détails.

Et les autres ?

Je n'ai parlé que des principaux fichiers de contrôle, il y en a beaucoup d'autres. Je vous conseille de faire un «man qmail-control». Vous y trouverez une liste de tout les fichiers de configuration, les binaires qui les utilisent ainsi que les valeurs prises par défaut.

4.2 Les adresses et l'utilisateur alias

Dans le système qmail, un utilisateur nommé login contrôle toutes les adresses courriel de la forme login-* où l'étoile représente une chaîne quelconque formée de caractères valides pour une adresse.

Pour chaque adresse login-chaine, l'utilisateur peut décider de créer le fichier ~login/.qmail-chaine qui contiendra les instructions à suivre par qmail-local, le livreur de courriel (MDA) de qmail. Par convention, le fichier ~login/.qmail correspond à l'adresse login tout court. De plus, le fichier spécial ~login/.qmail-default lorsqu'il existe, joue le rôle de fichier par défaut.

En l'abscence des fichiers ~login/.qmail et ~login/.qmail-default, qmail-local livrera par défaut le courriel dans la boite aux lettres au format mbox ~login/Mailbox, à moins que l'administrateur n'ait positionné la variable /var/qmail/control/aliasempty (voir la section aliasempty).

Il en va tout autrement pour les courriels à destination de login-chaine. qmail-local ne livrera pas un courriel à destination de login-chaine s'il ne trouve ni ~login/.qmail-chaine ni ~login/.qmail-default au moment de livrer. En fait, ce courriel sera intercepté par l'utilisateur spécial alias si son fichier ~alias/.qmail-default existe et retournera à l'expéditeur sinon.

Les fichiers ~login/.qmail-* ont tous la même syntaxe.

Remarques sur qmail-local

Je rappelle qu'il faut faire très attention aux droits d'accès aux répertoires personnels des utilisateurs. En effet, le MDA qmail-local refusera de livrer le courrier à un utilisateur dont le répertoire personnel est autorisé en écriture pour le groupe ou pour tout le monde. Idem pour le bit «sticky». La même remarque s'applique aux fichiers .qmail. Voir la page de manuel dot-qmail.

Il faut aussi signaler que qmail-local convertit toutes les majuscules en minuscules dans les noms de fichiers .qmail-*. Il convertit aussi le caractère point en caractère deux points et réciproquement. Ainsi, pour que le courriel à destination de jojo.lapin soit livré à l'utilisateur jojo, il suffit que jojo possède un .qmail-jojo:lapin dans son répertoire personnel~jojo.

4.3 Syntaxe des .qmail

Plongeons-nous à présent dans le contenu de ces fameux fichiers .qmail. Ces fichiers contiennent les instructions que doit suivre le MDA qmail-local pour livrer le courriel. Çelà peut rappeler vaguement le mécanisme des fichiers .forward du monde de sendmail . Voici un exemple :


# mon .qmail à moi
# Un pipe 
|qbiff
# Un forward
&moi@ailleurs.laba
# Livraison dans une boite aux lettres maildir
./maildir/
# Livraison dans une boite aux lettres mbox
./mbox

On le voit, une seule instruction de livraison par ligne. Les lignes sont toutes interprétées à chaque courriel livré par qmail-local. Elles peuvent contenir des commentaires préfixés par une dièse. Dans cet exemple, chaque courriel sera «pipé» dans qbiff, «forwardé» vers moi@ailleurs.laba et livré dans les boites aux lettres ~/maildir/ et ~/mailbox.

qmail-local exécute les livraisons vers tubes de la forme


|commande

en écrivant le courriel dans l'entrée standard d'un
sh -c commande

exécuté dans le répertoire personnel du destinataire. L'entête du courriel ne contient alors pas les champs Return-Path et Delivered-To mais qmail-local passe beaucoup d'informations par variables d'environnement, par exemple SENDER et RECIPIENT (faire «man qmail-command». Pour les commandes qui ne ne prennent pas en compte ces variables, comme procmail ou formail par exemple, il suffit d'utiliser le binaire preline livré avec qmail qui insère les champs Return-Path et Delivered-To au message avant de l'écrire dans l'entrée standard de la commande. Par exemple :
|preline formail -A "Status: RO" | procmail

Je vous conseille fortement de faire un «man dot-qmail» pour en savoir plus sur la syntaxe et les subtilités du format des fichiers .qmail.

D'autres binaires peuvent vous être très utiles dans votre .qmail. Jetez un coup d'oeil par exemple à la page de manuel de condredirect et à celle de forward.

Pour effectuer une modification sûre de vos fichiers .qmail, Dan Bernstein recommande de positionner le bit sticky sur son répertoire personnel par un


chmod +t $HOME

pendant la durée de la modification. En effet, qmail-local refusera de livrer dans un répertoire dont le bit sticky est positionné. Une fois la modification effectuée, il vous suffit de désactiver le bit sticky de votre répertoire par un
chmod -t $HOME

Le plus simple est de se faire un alias pour son shell favori. Par exemple, pour bash, je rajoute la ligne :
alias edqm='chmod +t ~ && vi ~/.qmail && chmod -t ~'

à mon ~/.bash_profile.

4.4 Gestion de la queue (à compléter)

La queue de qmail est stockée dans /var/qmail/queue/. Elle est constituée de plusieurs répertoires. Les messages sont stockés dans des fichiers dont le nom est un numéro d'i-noeud, ce qui assure leur unicité. La structure de la queue est expliquée dans le fichier INTERNALS livré avec les sources.

Les deux binaires qmail-qstat et qmail-qread permettent d'en connaitre son contenu. Ils font partie de la distribution qmail et ont donc leur page de manuel respectives.

queue-fix est un programme écrit par Eric Huss e-huss@netmeridian.com qui permet de vérifier l'intégrité de la queue de qmail et de la réparer au besoin.

qmHandle est un script Perl écrit par Michele Beltrame mick@io.com. Il permet de lister (en couleurs !) le contenu de la queue de qmail ainsi que d'en supprimer des messages.

queue-fix et qmHandle ne font pas partie de la distribution qmail. Vous trouverez des pointeurs sur eux deux sur le site de qmail.

4.5 Listes de diffusion par qlist (à faire)