1. Introduction

Voici comment David S. 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.

À 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 qmail-popup, checkpassword et qmail-pop3d. 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

Voici un petit schéma explicatif emprunté au fichier INTERNALS livré avec les sources (que je vous recommande de lire) :


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

Le fichier INTERNALS contient une présentation de la structure de la queue de Qmail et sa gestion.

qmail-send gere 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 de du répertoire Qmail /var/qmail/


 REPERTOIRE            FONCTION
 /var/qmail            répertoire principal
  \_ alias/            utilisateur recevant les courriels «spéciaux», remplace le /etc/aliases de Sendmail
  \_ 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 pour utilisation avec NIS et/ou NFS