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
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
/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
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
ftp.mondomaine.amoi et www.mondomaine.amoi
pointent sur mamachine.mondomaine.amoi.
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.
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
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
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.
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
qmail-remote utilise aussi les fichiers de contrôle
helohost, timeoutconnect et timeoutremote,
voir la page de manuel de qmail-remote.
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
Allez voir la page de manuel de qmail-send pour plus de détails.
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.
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.
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.
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
moi@ailleurs.laba et livré dans les boites aux lettres
~/maildir/ et ~/mailbox.
./).
Il se terminent toujours par une barre de répertoire
pour les boites au format maildir et jamais pour les boites au format
mbox. Les boites au format maildir doivent être créées avant d'être
utilisées au moyen de l'utilitaire maildirmake qui fait partie de la
distribution qmail;qmail-local exécute les livraisons vers tubes de la forme
|commande
sh -c commande
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
chmod -t $HOME
alias edqm='chmod +t ~ && vi ~/.qmail && chmod -t ~'
~/.bash_profile.
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.