1. Introduction

Voici comment Daniel J. Bernstein, l'auteur de qmail, nous présente son programme :

«qmail is a secure, reliable, efficient, simple message transfer agent. It is meant as a replacement for the entire sendmail-binmail system on typical Internet-connected UNIX hosts».

sendmail et encore moins son petit remplaçant smail ne brillent par leurs performances, sans parler des innombrables trous de sécurité (certes moins nombreux pour smail) dûs à la fois à leur structuration et à la complexité de leur tâche. Pour couronner le tout, la configuration de sendmail n'est pas des plus intuitives.

1.1 Organisation

À la différence de sendmail, qmail n'est pas monolithique. Le système qmail se compose de plusieurs programmes tournant sous des UID/GID différents et non nuls rendant difficile toute tentative d'intrusion. De plus, la gestion des chaînes de caractères dans qmail a été traitée avec beaucoup de soin pour éviter les problèmes de débordement, souvent à l'origine des trous de sécurité. Dan Bernstein offre d'ailleurs un prix de 1000$ à toute personne qui trouverait un trou de sécurité dans qmail, quelle confiance !-)

Aucun binaire ne porte le nom «qmail».

qmail est en fait un ensemble de binaires (tous situés par défaut dans /var/qmail/bin/) comprenant une partie MTA avec ses «facettes» SMTP avec qmail-smtpd et QMTP avec qmail-qmtpd, qmail-inject et mailsubj pour l'injection dans la queue et une partie MDA qmail-local ainsi qu'un petit wrapper pour sendmail.

Le POP3 est disponible via le triplet qmail-popup, checkpassword et qmail-pop3d. Il existe des patches pour les gestionnaires IMAP et POP3 habituels permettant de les utiliser avec qmail, voir la page de qmail www.qmail.org/ pour plus de détails. Les messages sont placés dans la queue par qmail-queue. La gestion de la queue est effectuée par differents programmes dont qmail-lspawn, qmail-clean et qmail-rspawn, tout trois fils du daemon qmail-send. Le traçage via syslog peut être fait par splogger. Voici un schéma montrant la structure de qmail lorsqu'il est chargé en mémoire :


UTILISATEUR  PROGRAMME                  FONCTION
qmails      qmail-send                  gère les messages placés dans la queue
qmaill       \_ splogger qmail          enregistrement des traces via syslog
qmailq       \_ qmail-clean             nettoyage de la queue
qmailr       \_ qmail-rspawn            gestionnaire des messages distants
root         \_ qmail-lspawn ./Mailbox  gestionnaire des messages locaux

La directive ./Mailbox passée en paramètre à qmail-lspawn est la directive de livraison par défaut. Elle peut très être un tube (pipe) vers un MDA classique comme procmail. C'est par exemple le cas pour la Debian GNU/Linux.

Voici un petit schéma explicatif emprunté au fichier INTERNALS livré avec les sources qui contient une présentation de la structure de la queue de qmail et sa gestion


 qmail-smtpd --- qmail-queue --- qmail-send --- qmail-rspawn --- qmail-remote
               /                     |      \
qmail-inject _/                 qmail-clean  \_ qmail-lspawn --- qmail-local

qmail-send gère les messages placés dans la queue par qmail-queue. Il fait appel à qmail-lspawn (lui même invoquant qmail-local) et qmail-rspawn (lui même invoquant qmail-remote). Voir leur page de manuel respectives pour les détails. Un «man qmail» donne une présentation globale de qmail.

Bien entendu, ces pages de manuel ne seront disponibles que lorsque qmail sera installé. Cependant, une version HTML de ces pages existe.

Avant de passer à la suite, voici la structure standard du répertoire qmail /var/qmail/


 REPERTOIRE            FONCTION
 /var/qmail            répertoire principal
  \_ alias/            utilisateur recevant les courriels «spéciaux» (root...)
  \_ bin/              binaires de la distribution qmail
  \_ control/          fichiers de configuration 
  \_ man/              pages de manuel
  \_ queue/            la queue elle même
  \_ users/            base de données des utilisateurs (un super-fichier d'alias)

Sur Debian GNU/linux, la structure est un peu différente et plus conventionnelle. Les binaires sont répartis entre /usr/sbin/ et /usr/bin/, les pages de manuel sont dans /usr/man/, le répertoire /var/qmail/control/ devient /etc/qmail/ et /var/qmail/queue/ devient /var/spool/qmail.

Pour finir cette section, je vous signale l'existence de la La «qmail big picture» qui donne une vue synthétique de l'achitecture de qmail.

1.2 Principales différences avec le système sendmail

Le mieux serait de lire les fichiers BLURB1, BLURB2 et surtout BLURB3 livrés avec les sources mais en voici un pâle résumé :

Avec qmail, nous dit Dan Bernstein, vous pouvez être sûr qu'un message entrant dans la queue ne sera jamais perdu.