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.

aliasempty

Le premier fichier de contrôle que vous serez amené à modifier est sans doute 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 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 defaulthost et 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 rcpthosts est utilisé pas qmail-smtpd. Lorsqu'il existe, qmail-smtpd refusera toute connection SMTP provenant d'une machine dont le nom de figure pas dans rcpthosts. Par défaut, qmail-smtpd accepte toutes les connections SMTP. Voici un exemple :


.mondomaine.amoi
mondomaine.amoi                            

qmail-smtpd refusera toute connection SMTP ne provenant par du domaine mondomaine.amoi.

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.

smtproutes

Le fichier de contrôle 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 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.

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.

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.

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/.

Les deux binaires qmail-qstat et qmail-qread permettent d'en connaitre son contenu.

queue-fix

qmHandle.

4.5 Listes de diffusion par qlist (à faire)