3. Mise en place de SMTP, POP3, UCSPI et QMTP

Sont présentées ici les installations des programmes implémentant les protocoles SMTP, POP3 puis QMTP. Les installations sans inetd se feront grâce à UCSPI.

3.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. Réinitialiser enfin inetd en faisant un
root$ kill -HUP pid_de_inetd

Vous lirez avec profit la section rcpthosts sur le fichier de contrôle rcpthosts ainsi que la section contrôle de relayage sur le contrôle de relayage.

3.2 POP3 par qmail-pop3d via inetd

Récupérer checkpassword sur pobox.com/~djb/checkpwd.html , le compiler puis l'installer dans /usr/local/sbin/. Je signale au passage que pour compiler avec les shadows sous Linux, vous serez sans doute amené à remplacer SHADOWLIBS=-lshadow par SHADOWLIBS= -lcrypt dans le Makefile.

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/sbin/checkpassword /var/qmail/bin/qmail-pop3d Maildir

puis réinitialiser inetd par un
root$ kill -HUP pid_de_inetd

Faites attention, le nom du service POP3 peut être pop-3 et non pop3, regardez dans votre /etc/services.

3.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 : 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 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.

3.4 SMTP par qmail-smtpd via UCSPI-TCP

Pour ce faire, se procurer UCSPI-TCP sur 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.

3.5 POP3 par qmail-pop3d via UCSPI-TCP

Il faut se procurer UCSPI-TPC sur 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 pobox.com/~djb/checkpwd.html , le compiler puis l'installer dans /usr/local/sbin/. Je signale au passage que pour compiler avec les shadows sous Linux, vous serez sans doute amené à remplacer SHADOWLIBS=-lshadow par SHADOWLIBS= -lcrypt dans le Makefile.

Ensuite, commenter la ligne POP3 dans /etc/inetd.conf en la préfixant par une dièse et réinitialiser inetd par un


root$ 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/sbin/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

Faites attention, le nom du service POP3 peut être pop-3 et non pop3, regardez dans votre /etc/services. Il ne reste plus qu'à stopper puis relancer qmail.

3.6 QMTP, le petit dernier

C'est un nouveau protocole proposé par Dan Bernstein censé remplacer SMTP, il est associé au port TCP 209. 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.

qmail bien sûr le supporte à travers le programme qmail-qmtpd qui se configure exactement comme qmail-smtpd.