<Chapter id="services">
<Title>Mise en place de SMTP, POP3, UCSPI et QMTP</Title>
  
<Para>
        
Sont présentées ici les installations des programmes implémentant
les protocoles SMTP, POP3 puis QMTP. Les installations sans
<Application>inetd</Application> 
se feront grâce à UCSPI.
</Para>

<Sect1>
<Title>SMTP par qmail-smtpd via inetd</Title>

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

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

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 <Application>inetd</Application> en faisant un

<ProgramListing>
root:bash$ kill -HUP $(pidof inetd)
</ProgramListing>

</Para>

<Para>
Vous lirez avec profit <XRef LinkEnd="rcpthosts">
sur le fichier de contrôle <FileName>rcpthosts</FileName> ainsi que
<XRef LinkEnd="relayage"> sur le contrôle 
de relayage.
</Para>

</Sect1>

<Sect1>
<Title>POP3 par qmail-pop3d via inetd</Title>

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

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

<ProgramListing>
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
</ProgramListing>

puis réinitialiser <Application>inetd</Application> par un

<ProgramListing>
root:bash$ kill -HUP $(pidof inetd)
</ProgramListing>

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

</Sect1>

<Sect1>
<Title>UCSPI-TCP et TCPcontrol</Title>

<Para>
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.
</Para>

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

<ItemizedList>
<ListItem>

<Para>
Un client UCSPI se connecte à un serveur à un certain port
et communique avec le programme qu'on lui spécifie via les
descripteurs 6 et 7. Le client n'établit aucune connexion
supplémentaire et meurt avec le programme.
</Para>
</ListItem>
<ListItem>

<Para>
Un serveur UCSPI attend les connexions des clients sur un
certain port et comunique avec le programme qu'on lui spécifie via les
descripteurs 0 et 1. Il permet d'avoir plusieurs connexions simultanées.
</Para>
</ListItem>

</ItemizedList>

</Para>

<Para>
Je vous conseille fortement la lecture du texte
<ULink URL="http://pobox.com/~djb/proto/ucspi.txt">
http://pobox.com/~djb/proto/ucspi.txt</ULink>
de Dan Bernstein dont je me suis largement inspiré.
</Para>

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

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

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

</Sect1>

<Sect1>
<Title>SMTP par qmail-smtpd via UCSPI-TCP</Title>

<Para>
Pour ce faire, se procurer <ProductName>UCSPI-TCP</ProductName> sur
<ULink URL="http://pobox.com/~djb/ucsp-tcp.html">
http://pobox.com/~djb/ucsp-tcp.html</ULink>,
compiler et installer les binaires dans <FileName>/usr/local/bin/</FileName>.
</Para>

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

<ProgramListing>
root:bash$ kill -HUP $(pidof inetd)
</ProgramListing>

</Para>

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

<ProgramListing>
/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
</ProgramListing>

(voir les pages de manuel pour les détails)
et ces deux-ci dans la section stop :

<ProgramListing>
kill `cat /var/lock/subsys/qmail-smtpd`
rm -f /var/lock/subsys/qmail-smtpd
</ProgramListing>

Voilà, il ne reste plus qu'à stopper puis relancer
<ProductName>qmail</ProductName>.
</Para>

</Sect1>

<Sect1>
<Title>POP3 par qmail-pop3d via UCSPI-TCP</Title>

<Para>
Il faut se procurer UCSPI-TPC sur
<ULink URL="http://pobox.com/~djb/ucsp-tcp.html">
http://pobox.com/~djb/ucsp-tcp.html</ULink>,
compiler puis installer les binaires dans
<FileName>/usr/local/bin/</FileName>. 
</Para>

<Para>
De même, récupérer <ProductName>checkpassword</ProductName> si besoin sur
<ULink URL="http://pobox.com/~djb/checkpwd.html">
http://pobox.com/~djb/checkpwd.html</ULink>,
le compiler puis l'installer dans <FileName>/usr/local/sbin/</FileName>.
Je signale au passage que pour compiler avec les shadows sous
<ProductName>Linux</ProductName>, 
vous serez sans doute amené à remplacer
<Literal>SHADOWLIBS=-lshadow</Literal>
par
<Literal>SHADOWLIBS= -lcrypt</Literal> dans le
<FileName>Makefile</FileName>.
</Para>

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

<ProgramListing>
root:bash$ kill -HUP $(pidof inetd)
</ProgramListing>

Il ne reste plus qu'à ajouter les deux lignes suivantes à la fin de la partie
start du fichier <FileName>/etc/rc.d/init.d/qmail</FileName> :

<ProgramListing>
/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   
</ProgramListing>

et ces deux-ci au début de la section stop :

<ProgramListing>
kill `cat /var/lock/subsys/qmail-pop3d`
rm -f /var/lock/subsys/qmail-pop3d
</ProgramListing>

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

</Sect1>

<Sect1>
<Title>QMTP, le petit dernier</Title>

<Para>
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 :
</Para>

<Para>
<Emphasis>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.</Emphasis>
</Para>

<Para>
<ProductName>qmail</ProductName> bien sûr le supporte à travers
le programme <Application>qmail-qmtpd</Application> qui se configure
exactement comme <Application>qmail-smtpd</Application>.
</Para>

</Sect1>

</Chapter>
