Mini-HOWTO qmail + MH

Christopher Richardson,(rdn@tara.n.eunet.de). Traduit par Di�go D'OLIVEIRA GRANJA (mortadel@free.fr)

v1.4, 5 Mars 1998
Dans ce document, je fais part de mes exp�riences d'installation afin d'aider les utilisateurs qui d�sirent utiliser la configuration ci-dessus pour la gestion de leur courrier �lectronique. v1.4: J'ai eu une nouvelle Linuxette, alors j'ai d�cid� de mettre � jour ce mini-HOWTO.

1. Introduction

Mes remerciements � tous les citoyens du net qui m'ont aid�, particuli�rement Tony Nugent ( tony@trishul.sci.edu.au), et David Summers ( david@summersoft.fay.ar.us), ainsi que l'�quipe de S.u.S.E GmBH ( http://www.suse.com) qui ont rendu l'installation de Linux tellement plus ais�e, et enfin les auteurs des excellents programmes cit�s plus haut.

Qu'est-ce que qmail et pourquoi devrions-nous l'utiliser ? Voici le "baratin publicitaire" de son auteur, Dan Bernstein :

qmail est un agent de transport du courrier (MTA, Mail Transporter Agent), s�curis�, s�r, efficace et simple. Il est con�u pour remplacer compl�tement le syst�me sendmail-binmail sur les stations UNIX connect�es � Internet.

S�curis� : La s�curit� n'est pas seulement un but � atteindre, c'est une exigence absolue. La distribution du courrier est d'une importance critique pour les utilisateurs : elle ne doit pas �tre interrompue, alors elle doit �tre compl�tement s�curis�e. (C'est la raison pour laquelle j'ai commenc� � �crire qmail : je ne pouvais plus supporter les trous de s�curit� de sendmail et des autres MTAs)

S�r : La philosophie de qmail garantit qu'un message, une fois accept� dans le syst�me, ne sera jamais perdu. De plus, qmail supporte maildir, un nouveau format de bo�te aux lettres utilisateur tr�s solide. Les maildirs, � la diff�rence des fichiers mbox ou des dossiers MH, ne seront pas corrompus si le syst�me plante pendant la distribution. Encore mieux, non seulement un utilisateur peut lire son courrier en s�curit� sur NFS (Network File System), mais en plus un nombre illimit� de clients NFS peuvent lui distribuer du courrier au m�me moment.

Efficace : Sur un Pentium sous BSD/OS, qmail peut facilement supporter 200000 messages locaux par jour -- il s'agit de messages distincts inject�s et distribu�s dans les bo�tes aux lettres dans un test r�el -- ! Malgr� le fait que les livraisons lointaines soient limit�es par la lenteur des DNS (Domain Name Services : serveurs de noms de domaine) et de SMTP (Simple Mail Transfer Protocol : protocole simple de transfert de courrier), qmail d�passe 20 envois simultan�s par d�faut, de sorte qu'il permet de g�rer tr�s rapidement des mailing-lists (C'est la raison pour laquelle j'ai fini qmail : je devais mettre en place une grosse liste de diffusion).

Simple : Qmail est beaucoup plus petit que n'importe quel autre MTA. Voici quelques raisons :

  1. Les autres MTAs ont des m�canismes s�par�s de forwarding, aliasing, et de gestion de mailing-lists. Qmail a UN simple m�canisme de forwarding qui permet aux utilisateurs de g�rer leurs propres listes de diffusion.
  2. Les autres MTAs offrent toute une gamme de modes d'envoi, allant de rapide (et peu s�r) � lent (et mis en attente). L'envoi sous qmail est instantan�ment d�clench� par la mise en attente de nouvelles entr�es, aussi l'on peut dire que le syst�me qmail n'a qu'un seul mode d'envoi : rapide ET avec mise en attente.
  3. Les autres MTAs incluent une version sp�cialis�e d'inetd qui surveille la moyenne de chargement. La conception de qmail limite de mani�re interne la charge de la machine, ainsi le d�mon SMTP de qmail (qmail-smtpd) peut s'ex�cuter en toute s�curit� avec l'inetd de votre syst�me.

Rempla�ant pour sendmail : qmail supporte le masquerading h�te et utilisateur, la dissimulation compl�te de l'h�te, les domaines virtuels, les null-clients, les commandes de relais, les enregistrements � double rebond, les programmateurs de relance de messages ind�pendants... En r�sum�, qmail n'est pas en reste c�t� modernit� des caract�ristiques. Qmail inclut �galement une fonction de "couverture", c'est-�-dire qu'il se fait passer pour sendmail, afin d'�tre utilis� de mani�re transparente par votre agent utilisateur courrier (MUA, Mail User Agent).

2. Ma configuration syst�me

3. Installation de qmail

Suivez exactement les instructions du fichier INSTALL.

Remarques :

Prenez le temps de lire compl�tement la documentation, s'il vous pla�t. Les num�ros suivants se r�f�rent aux �tapes d'installation du fichier INSTALL sus-cit�.


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

4. Maildir2smtp

Dan Bernstein a fourni un paquetage pour l'envoi d'e-mail en attente vers un FAI via dial-in. Ce paquetage est disponible sur son site sous le nom de serialmailxxx.

Installez ce paquetage comme d�crit dans la page de manuel (Merci � Rupert Mazzucco ( maz@pap.univie.ac.at), cela marche du tonnerre !


       maildir2smtp - transmet un maildir par SMTP

       maildir2smtp est con�u pour transf�rer des messages par le biais
       d'une connection SLIP ou PPP. Pour mettre cela en place en fin de
       d�connexion, cr�ez un nouveau maildir en alias :

          # maildirmake ~alias/pppdir chown -R alias ~alias/pppdir

       Mettez

          :alias-ppp

       dans control/virtualdomains et

          ./pppdir/

       dans ~alias/.qmail-ppp-default.  N'oubliez pas l'anti-slash dans
       pppdir/. Alors dans le script de d�marrage PPP, mettez

          maildir2smtp ~alias/pppdir alias-ppp- $IP `hostname`

       en rempla�ant $IP avec l'adresse IP distante.


Remarques :

5. Installation de MH

En addition � cela, j'ai �galement remplac� le fichier /mh-6.8.4/mts/sendmail/smail.c par le mh-qmail-smail.c de Dan Bernstein.

Voici � quoi ressemble mon fichier mh-6.8.4/conf/MH :

bin     /usr/bin/mh
etc     /usr/lib/mh
#mail   
#mandir /usr/man
#manuals        standard
chown   /bin/chown
#cp     cp
#ln     ln
#remove mv -f
cc      gcc
ccoptions -traditional -O2 -m486 -D_NFILE='getdtablesize()' 
          -DSIGEMT=SIGUSR1
curses  -lncurses
#ldoptions      -s
#ldoptlibs
lex     flex
#oldload        off
#ranlib on
mts     sendmail
#mf     off
#bboards        off
#bbdelivery     off
#bbhome /usr/spool/bboards
pop     on
popdir  /usr/lib/mh
sharedlib       sys5
slflags -fPIC
slibdir /usr/lib
mailgroup       mail
signal  void
sprintf int
#editor prompter
#debug  off
#regtest        off
options ATHENA
options BIND
options DPOP
options DUMB
options FCNTL
options MHE
options MHRC
options MIME
options MORE='"/usr/bin/less"'
options OVERHEAD
options POP2
options POPSERVICE='"pop3"'
options RENAME
options RPATHS
options RPOP
options SOCKETS
options SVR4
options SYS5
options SYS5DIR
options TERMINFO
options UNISTD
options VSPRINTF

Remarques :

5.1 Mtstailor

Comme qmail distribue le courrier dans le r�pertoire home (~/Mailbox), j'ai ajout� cela � mon mtstailor :

localname:      mickey
localdomain:    n.eunet.de
mmdfldir:       
mmdflfil:       Mailbox         
uucpldir:       
uucplfil:       
mmdelim1:       \001\001\001\001\n
mmdelim2:       \001\001\001\001\n
mmailid:        0
umincproc:
lockldir:
sendmail:       /usr/lib/sendmail

Remarques :


 servers: serveur_de_mail.compagnie.pays 

5.2 Mh_profile

Voici mon fichier .mh_profile :

Path: Mail
draft-folder: drafts
unseen-sequence: unseen
AliasFile: /home/rdn/.mh_aliases
send: -msgid
comp: -form /home/rdn/.mymh-components
MailDrop: /home/rdn/Mailbox

Remarques :

6. Fetchmail

J'ai d�cid� d'utiliser fetchmail parce que mon syst�me Linux est utilis� par plusieurs personnes diff�rentes (ma famille :-)) et fetchmail transmet le courrier sur le port SMTP, o� qmail le prend en charge.

L'installation se fait sans probl�mes, le d�p�t multiple (Multi-drop) fonctionne avec le fichier .fetchmailrc suivant :

poll PersonalMail.Germany.EU.net
protocol pop3
username myname
password mypassword
# Les deux lignes suivantes s'occupent du multidrop
localdomains mydomain.de
is * here
# T2 des �tats de la FAQ de fetchmail, dont qmail a besoin
forcecr

7. Exmh

C'est mon gestionnaire de mail pr�f�r�. Je l'adore.

Il y a un seul probl�me : la plupart des paquetages TCL/TK pr�-compil�s ont l'option security activ�e. Le fichier script .xserverrc.secure, qui �tait fourni avec la S.u.S.E r�sout ce probl�me :


#!/bin/sh

#
# D�placez ce fichier vers ~/.xserverrc, si vous
# ne voulez pas que tout le monde puisse acc�der � votre
# serveur X
#
if [ -x /usr/bin/keygen ]; then
    if [ ! -x /usr/bin/hostname -a ! -x /bin/hostname \
         -a ! -x /usr/bsd/hostname ];
    then
        echo "startx: can't get my hostname - exiting"
        exit 1
    else
        host=`hostname`
    fi

    xauth add $host:0 . `/usr/bin/keygen`
    sleep 2
    xauth add $host/"unix":0 . `/usr/bin/keygen`
    exec X :0 -auth .Xauthority $*
else
    exec X :0 $*
fi

8. Procmail

La FAQ de qmail donne cette commande :

Dans /.qmail, ajouter

 
| preline procmail 

La version 3.11pre7 a chang� la variable Boite aux Lettres d�finie par d�faut. Avant, cela se trouvait dans config.h; c'est maintenant dans src/authenticate.c :

#define MAILSPOOLHOME "/Mailbox"        /* regarde l'ent�te / */
                                        /* d�livre � $HOME/Mailbox */

J'ai r�uni quelques trucs, extraits des forums comp.mail.mh et comp.mail.misc, dans un fichier .procmailrc. Merci � tous !


# UN EXEMPLE DE FICHIER .PROCMAILRC POUR LES DEBUTANTS
# Ecrit par Catherine Hampton <ariel@best.com>
# Version 1.1
# Mis � jour le 25/01/98
#
# D�pos� dans le Domaine Public
#
#
# FIXER LES VARIABLES

# Variables internes
# Ce qui suit a �t� modifi� par rdn le 03/03/1998

# Tout le monde dit que la variable SHELL est essentielle
SHELL=/bin/sh               #Shell utilis� pour lancer procmail.  
                            #Soyez s�r que cela pointe vers la
                            #version de sh de votre syst�me. NE 
                            #LUI SUBSTITUEZ PAS un autre shell
                            #sauf si vous connaissez bien UNIX

LINEBUF=4096                #N�cessaire pour �viter � Procmail de 
                            #s'�touffer sur des longs champs "destinataires"
                            #ou sur des instructions concernant la mani�re de 
                            #traiter des e-mails particuliers

PATH=$HOME/bin:/bin:/usr/bin:/usr/local/bin:/usr/bin/mh:/usr/lib/mh:
                            #Path pour vos programmes -- il vaut mieux
                            #probablement le laisser ainsi.

VERBOSE=off                 #Mettez-le � "on" si vous essayez un nouveau
                            #champ "destinataire" afin que Procmail puisse 
                            #enregistrer litt�ralement chaque �tape. 
                            #NE LE LAISSEZ PAS INDEFINIMENT, sinon cela 
                            #cr�e d'�normes fichiers-journaux (logfiles)

# Programme par d�faut & situation des fichiers

MAILDIR=$HOME/Mail          #Vous devriez vous assurer de l'existence de
                            #cela.

DEFAULT=$HOME/Mailbox       #Boite de r�ception par d�faut pour les 
                            #utilisateurs de shell2-5 sur Internet
                            #Remplacez-la par la valeur correcte de 
                            #votre syst�me.


LOGFILE=$MAILDIR/procmail.log #L'emplacement des fichiers log. Recommand�,
                              #autrement les erreurs vous seront envoy�es
                              #par e-mail :/

FORMAIL=/usr/bin/formail        #Pratique pour les champs de r�ponse auto-
                                #matique (autoreply recipes). Si vous n'�tes
                                #pas sur Internet, modifiez cela avec le
                                #chemin de votre version de formail.

SENDMAIL=/usr/sbin/sendmail     #Pratique pour les champs de r�ponse auto-
                                #matique (autoreply recipes). Si vous n'�tes 
                                #pas sur Internet, modifiez cela avec le 
                                #chemin de votre version de sendmail.

Procmail est un logiciel excellemment bien document�. Lisez les pages de manuel afin de trouver des exemples pour cr�er votre fichier .procmailrc.

9. ISDN

J'inclus cela alors que cela n'a rien � voir avec qmail ou MH. Mais sans une connexion PPP vers un FAI, il n'y a pas de courrier �lectronique du tout. J'ai eu quelques probl�mes pour faire fonctionner ma connexion ISDN. La distribution S.u.S.E propose une configuration pour ISDN, mais je voulais quelque chose de plus simple. Ce qui est pr�sent� ici a �t� adapt� des scripts de Bernhard Hailer (Merci, vraiment, merci !)

Le fichier rc.config suivant charge les modules n�cessaires pendant l'initialisation :


#!/bin/bash
# Ceci est adapt� du vieux script de Bernhard Hailer

LOCAL_NUMBER="91311234"        # num�ro de t�l�phone local. 091311234
REMOTE_NUMBER="0911123456"     # num�ro de t�l�phone du FAI
LOCAL_IP="192.168.0.99"        # J'ai une adresse IP dynamique alors ce
REMOTE_IP="195.112.123.11"     # sera la passerelle de votre FAI
DEVICE="ippp0"

SYSPATH="/sbin"
ISDNCTRL="$SYSPATH/isdnctrl"

case "$1" in
start)
        # turn on isdn
        insmod /lib/modules/2.0.33/net/slhc.o
        insmod /lib/modules/2.0.33/misc/isdn.o
        sleep 1
        # load the hisax module
        insmod /lib/modules/2.0.33/misc/hisax.o 
                                   id=Tel0 type=5 protocol=2 irq=10 io=0x300 
        echo "starting isdn4linux"
        # global
        $ISDNCTRL verbose 0

        $ISDNCTRL addif $DEVICE         # cr�e une nouvelle interface
        $ISDNCTRL addphone $DEVICE in $REMOTE_NUMBER
        $ISDNCTRL addphone $DEVICE out $REMOTE_NUMBER
        $ISDNCTRL eaz $DEVICE $LOCAL_NUMBER
        $ISDNCTRL l2_prot $DEVICE hdlc
        $ISDNCTRL l3_prot $DEVICE trans
        $ISDNCTRL encap $DEVICE syncppp
        $ISDNCTRL huptimeout $DEVICE 300 
        $ISDNCTRL chargehup  $DEVICE off
        $ISDNCTRL secure $DEVICE on

        $SYSPATH/ifconfig $DEVICE $LOCAL_IP pointopoint $REMOTE_IP metric 1
        $SYSPATH/route add default $DEVICE
        $SYSPATH/ipppd /dev/ippp0 file /etc/ppp/options.ipppd &
        $SYSPATH/route del default
        
        ;;
stop)
        #turn off isdn
        rmmod hisax.o  
        sleep 1
        rmmod isdn.o
        rmmod slhc.o
        echo "Shutting down isdn4linux"
        $ISDNCTRL delif ippp0
        ;;
*)
        echo "Usage: $0 (start|stop)"
        exit 1
        ;;
esac

J'utilise le script suivant pour appeler l'ext�rieur, il est nomm� tout simplement isdn on|off.


#!/bin/bash
# Ceci est adapt� du vieux script de Bernhard Hailer

IP_ADDRESS="195.112.123.11"

case "$1" in
on)
        
        
        echo "Calling ippp0"
        /sbin/isdnctrl dial ippp0
# la pause est importante car cela donne � PPP le temps de s'installer
        echo "Sleep for 8s for PPP handshake"
        sleep 8s
        /sbin/route add default ippp0
        echo "line open - checking...."
      
# v�rifie si la n�gociation PPP est r�ussie :
        set `ping -qc3 -i1 $IP_ADDRESS 2>/dev/null | grep transmitted`
        if [ $4 -gt 0 ];
        then
                echo "succeeded."
                echo "Starting fetchmail daemon"
                /usr/bin/fetchmail -d 600 -k -v -a -L /var/log/fetchmail
                echo "Flushing mail queue...."
                /usr/local/bin/serialmail/maildir2smtp 
                            ~alias/pppdir alias-ppp- mail.server.ip.no `hostname`
        else
                echo "failed!"
                /sbin/isdnctrl hangup ippp0
        fi
        
;;

off)
                echo -n "Shutting down fetchmail daemon"
                /usr/bin/fetchmail --quit
                
                /sbin/isdnctrl hangup ippp0
                /sbin/route del default         # and delete route
                echo "You're off line"
;;

*)
        echo -e "\aUsage:"
        echo "isdn on"
        echo "isdn off"
;;

esac

La portion suivante est le fichier d'options du d�mon ipppd, /etc/ppp/options.ipppd :

# Bas� sur :
# Klaus Franken, kfr@suse.de
# Version: 27.08.97 (5.1)
# 
# Ce fichier est une copie par YaST du fichier /etc/ppp/ioptions.YaST 
# vers le fichier options.<device>

user "myuserid"

# le nom de mon syst�me (only for CHAP !)
# name my_system_name

# accepte les adresses IP transmises par son homologue
# utilis� avec les adresses IP dynamiques
ipcp-accept-local
ipcp-accept-remote
noipdefault

# essaie d'obtenir l'adresse IP de l'interface
# option sp�cifique � ipppd (contrairement � pppd)
# utilis� seulement avec des adresses IP statiques
#useifip

# d�sactive toutes les compressions d'en-t�tes
-vj
-vjccomp
-ac
-pc
-bsdcomp

# parfois, vous pouvez en avoir besoin
#noccp

# unit� de r�ception maximale (mru, max receive unit)
mru 1524
# unit� de transmission maximale (mtu, max transmit unit)
mtu 1500

# Si la machine est un serveur, forcez l'authentification en d�commentant
# l'une des lignes suivantes. Toutefois, si la machine est un client, faire
# cela emp�che la r�ussite de la connexion (message "peer refused to authenticate").
# Alors d�commentez SEULEMENT sur un serveur.
# "+pap" / "+chap" NUR AKTIVIEREN, WENN DIES EIN SERVER IST!!!
#+pap
#+chap

# Si vous avez des probl�mes avec la liaison (pas de r�ponse du premier
# paquet-lcp), essayez de diminuer le d�lai de r�-essai (retry-cycle). 
# Fix� par d�faut � 3 secondes, essayez par exemple 2 secondes
# lcp-restart 2

10. Sources

Paquetages requis :

Le net est toujours en perp�tuel mouvement, aussi est-il un peu utopique de donner des sources fiables � 100%. N�anmoins, cela ne mange pas de pain...

11. Avertissements

L'habituel sermon : "Pas de garanties, pas de remboursements ; utilisez � vos propres risques."

12. Post-Scriptum

Est-ce que quelq'un a fait fonctionner MH avec Maildi r? Je n'ai pas essay� -- le principe de ne pas bloquer un syst�me qui tourne bien. Si oui, �crivez-moi vos informations pour une inclusion dans la prochaine version de ce document.