4. SMTP, QMTP, POP3 et UCSPI

Sont présentées ici les installations des programmes implémentant les protocoles SMTP, POP3 puis QMTP.

4.1 SMTP par qmail-smtpd via inetd

Il faut remplacer la ligne de SMTP dans /etc/inetd.conf par la ligne suivante (désactiver l'ancienne en la préfixant par une dièse):


smtp stream tcp nowait qmaild /var/qmail/bin/tcp-env \
tcp-env /var/qmail/bin/qmail-smtpd

Il est recommandé de désactiver (en la préfixant par une dièse si ce n'est pas déjà fait) la ligne COMSAT de ce même fichier. Relancer enfin inetd en faisant un
root$ kill -HUP pid_de_inetd

4.2 POP3 par qmail-pop3d via inetd

Récupérer checkpassword sur http://pobox.com/~djb/checkpwd.html , le compiler puis l'installer dans /usr/local/bin/.

Remplacer la ligne POP3 du fichier /etc/inetd.conf par celle-ci :


pop3 stream tcp nowait root /var/qmail/bin/qmail-popup qmail-popup \
votre.host.name /usr/local/bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir

puis relancer inetd par un
root$ kill -HUP pid_de_inetd

4.3 UCSPI-TCP et TCPcontrol

UCSPI signifie Unix Client-Server Program Interface. Un outil UCSPI est un programme qui sait communiquer avec un certain medium de communication (par exple TCP). Il fournit de plus deux descripteurs de fichiers, l'un pour lire et l'autre pour écrire sur le medium. On peut alors lui associer un programme qui lira et écrira sur ces descripteurs sans se soucier du medium. Celà permet de créer à partir d'un programme UNIX quelconque une application client/serveur sur le medium en question. L'avantage est que le programme ainsi enveloppé ne se soucie plus du medium qu'il utilise, c'est désormais le problème de l'enveloppe UCSPI.

Les outils UCSPI sont de deux types : les clients et les serveurs

Je vous conseille fortement la lecture du texte ucspi.txt de Dan Bernstein dont je me suis largement inspiré.

Un exemple est UCSPI-TCP écrit par Dan Bernstein qui est constitué de tcpclient et tcpserver. En gros, on peut dire qu'ils permettent de faire pour un port et un programme particulier ce que fait inetd à la différence qu'ils sont très performants et paramétrables. Voici l'url de UCSPI-TCP : http://pobox.com/~djb/ucspi-tcp.html.

UCSPI-TCP va se révéler très pratique dans le système Qmail. Il permétra de transformer les programmes qmail-smtpd, qmail-qmtpd et qmail-pop3d qui ne connaissent rien à TCP en de véritables serveurs sur certains ports TCP indépendament d'inetd. On gagnera ainsi en configurabilité et surtout en performances pures.

TCPcontrol quand à lui est un contrôleur d'accès écrit par Dan Bernstein destiné à être utilisé avec UCSPI-TCP. C'est ce que l'on appelle un «TCP wrapper». Voir http://pobox.com/~djb/tcpcontrol.html. Il est à tcpserver ce que tcpd est à inetd. Consultez sa documentation pour en savoir plus. Je n'ai pas utilisé tcpcontrol dans la suite. Vous pouvez lire avec profit la FAQ de Qmail qui explique comment s'en servir pour le port SMTP.

4.4 SMTP par qmail-smtpd via UCSPI-TCP

Pour ce faire, se procurer UCSPI-TCP sur http://pobox.com/~djb/ucspi-tcp.html, compiler et installer les binaires dans /usr/local/bin/.

Ensuite, il faut préfixer la ligne SMTP de /etc/inetd.conf par une dièse et relancer le daemon inetd par un


root$ kill -HUP pid_de_inetd

Puis il faut ajouter les deux lignes suivantes à la section start du script /etc/rc.d/init.d/qmail :


/usr/local/bin/tcpserver -v -u 7770 -g 2108 0 smtp /var/qmail/bin/qmail-smtpd \
   2>&1 | /var/qmail/bin/splogger smtpd 3 &
echo $! > /var/lock/subsys/qmail-smtpd

(voir les pages de manuel pour les détails) et ces deux-ci dans la section stop :
kill `cat /var/lock/subsys/qmail-smtpd`
rm -f /var/lock/subsys/qmail-smtpd

Voilà, il ne reste plus qu'à stopper puis relancer Qmail.

4.5 POP3 par qmail-pop3d via UCSPI-TCP

Il faut se procurer UCSPI-TPC sur http://pobox.com/~djb/ucspi-tcp.html , compiler puis installer les binaires dans /usr/local/bin/.

De même, récupérer checkpassword si besoin sur http://pobox.com/~djb/checkpwd.html , le compiler puis l'installer dans /usr/local/bin/.

Ensuite, commenter la ligne POP3 dans /etc/inetd.conf en la préfixant par une dièse et relancer inetd par un «kill -HUP pid_de_inetd». Il ne reste plus qu'à ajouter les deux lignes suivantes à la fin de la partie start du fichier /etc/rc.d/init.d/qmail :


/usr/local/bin/tcpserver 0 pop3 /var/qmail/bin/qmail-popup votre.host.name \
/usr/local/bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir &
echo $! > /var/lock/subsys/qmail-pop3d   

et ces deux-ci au début de la section stop :
kill `cat /var/lock/subsys/qmail-pop3d`
rm -f /var/lock/subsys/qmail-pop3d

Voilà, il ne reste plus qu'à stopper puis relancer Qmail.

4.6 QMTP, le petit dernier

C'est un nouveau protocole proposé par Dan Bernstein censé remplacer SMTP. Laissons à son auteur le soin de le présenter :

The Quick Mail Transfer Protocol (QMTP) is a replacement for the Simple Mail Transfer Protocol (SMTP). QMTP eliminates any need for end-of-line scanning between hosts with the same end-of-line convention. It features automatic pipelining and chunking, 8-bit transmission, prior declaration of the message size, and efficient batching. It is designed to be very easy to implement.

QMTP est associé au port TCP 209. Qmail bien sûr le supporte à travers le programme qmail-qmtpd qui se configure exactement comme qmail-smtpd.