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 * Distribution S.u.S.E Linux 5.1 avec un noyau 2.0.33 * Connection PPP à mon Fournisseur d'Accès Internet (FAI) 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é. * 2 - J'ai dû organiser les groupes et les utilisateurs manuellement par INSTALL.ids. * 7 - ./qmail-makectl ne fonctionne pas sur mon système. J'ai ajouté mon nom de domaine (mickey.n.eunet.de) manuellement dans /var/qmail/control/me. * 23 - Assurez-vous que qmail-smtpd est correctement écrit dans le fichier inetd.conf (Je l'avais mal écrit (exemple : qmail-smpt), ce qui m'a pris deux jours à trouver :() ). _________________________________________________________________ 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 : * Lisez complètement la page de manuel, s'il vous plaît. * Maildir2smtp nécessite l'adresse IP numérique de votre serveur de courrier. Si vous ne l'avez pas, faites un ping sur votre adresse e-mail. * Cette commande peut être incluse dans votre script login pour expédier tout le courrier en attente après vous être connecté à votre FAI. 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 : * J'ai seulement compilé mts sendmail ; j'ai lu quelque part dans le forum comp.mail.mh que SMTP peut poser des problèmes. Dominic Mitchell(hdm@demon.net) a écrit le 13 Juin 1997 : "Pas tout à fait. Avec cette option, MH converse toujours avec SMTP, mais juste au travers d'un pipe et non au travers d'un réseau. Vous devez _nécessairement_ avoir dans votre fichier /.mh_profile, une ligne qui dit : postproc:/usr/local/nmh/lib/spost ou l'endroit quel qu'il soit où il est conservé dans votre système. Cela transmettra directement ce message à sendmail de manière traditionnelle. Vous utilisez qmail bien entendu, alors sendmail sera en fait le script de couverture de qmail, mais c'est juste ce qu'il faut." Merci Dominic. * J'ai viré "mail" parce que je voulais contrôler avec mtstailor. 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 : * sendmail : /usr/lib/sendmail est un lien vers le script de couverture de qmail, dans /var/qmail/bin. * MH n'apprécie guère le caractère tilde (~/), utilisez /home/ à la place, ou laissez le champ vide, qui s'accorde par défaut selon la documentation à $HOME. * J'ai récemment installé MH et qmail sur ma machine au bureau, qui est connectée via Ethernet. J'ai ajouté la ligne suivante à mtstailor : _________________________________________________________________ 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 : * J'ai ajouté la ligne concernant MailDrop pour être tout à fait sûr. 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 # 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 `hostnam e` 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. 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 authentica te"). # 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... * Trouvez Qmail et setserial sur http://www.qmail.org/ * Trouvez MH sur http://www.ics.uci.edu/~mh/ * Trouvez glimpse sur http://glimpse.cs.arizona.edu/ * Trouvez Fetchmail sur http://sagan.earthspace.net/~esr/fetchmail * Trouvez Exmh sur http://www.beedub.com/exmh * Trouvez Procmail sur ftp://ftp.informatik.rwth-aachen.de/pub/packages/procmail 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.