1. Préambule Ce document couvre seulement la mise en place d'un serveur de mails pour un réseau local. Il ne couvre en aucun cas la mise en place d'un serveur NFS, ni la configuration du réseau lui-même. 2. Problématique Je cherchais depuis plusieurs semaines à configurer mon réseau afin d'avoir un serveur de mail unique pour toutes les machines avec une configuration simple sur chacune d'elles et d'avoir quelques facilités. En effet, mon réseau local est connecté à internet via un modem branché sur la passerelle (gateway) du réseau. Cette passerelle fait office de serveur à plusieurs titres : - elle assure le routage (normal pour une passerelle) - elle est le serveur NFS de mon réseau En tant que serveur NFS j'ai eu l'envie, dès la conception de mon réseau, de n'utiliser qu'un seul répertoire /home pour toutes les machines ainsi qu'un seul /var/spool/mail. J'ai donc exporté à partir de ma passerelle ces 2 répertoires, ainsi, je me retrouve avec les mêmes fichiers et peux lire mes messages quelquesoit la machine sur laquelle je me connecte. Jusque là, j'avais un serveur mail par machine et cela ne me convenait pas. Je vais cependant estimer que vous avez correctement configuré votre réseau, que vous pouvez accéder à toutes les machines sans problème et que vous avez aussi configuré NFS de manière à avoir au moins les 2 répertoires /home et /var/spool/mail exportés du serveur NFS -- qui peut ne pas être le même que le serveur mails ni que la passerelle Internet. Il fallait donc que je transforme, en plus, ma passerelle en serveur de mails un peu particulier : un mail-hub. Ce type de configurations à plusieurs avantages pour un réseau connecté à Internet via un modem : - tout d'abord il suffit de ne modifier la configuration que d'une seule machine en cas de changement de fournisseur d'accès à Internet. - ne pas avoir à expédier les messages de toutes les machines à destination de l'extérieur du réseau local lors de la déconnection. - pas de problème de messages restés dans la file alors qu'une machine doit être éteinte. - cacher le nom des autres machines du réseau. Voici le réseau typique auquel s'applique ce document -- sans être limitatif car ce n'est qu'un concept mis en oeuvre : .-------. | C1 | RTC .-------. _____/`-------' FAI <--||-------| P |---| HUB | ... MODEM `-------' `-----'\.-------. | Cn | `-------' P : Passerelle C1 à Cn : Clients réseau FAI : Fournisseur d'Accès à Internet Pour me simplifier la tâche, j'ai décidé d'installer le serveur mail (mail-hub) sur la passerelle Internet puisque les scripts de connexion et de déconnexion se trouvent sur elle et que cela est plus facile à gérer pour automatiser l'envoi et la réception des mails. Afin de réaliser ce document, je me suis appuyé sur la documentation écrite par Jean Charles Delépine disponible dans le Guide du ROOTard Linux et à l'adresse http://w1.neuronnexion.fr/~delepine/linux/sendmail.rtc.html. Je ne m'étendrais donc pas sur la configuration de fetchmail -- qui est, de plus, ce qu'il y a de plus simple à faire -- ceci dit, vous trouverez ci-dessous un petit rappel afin de vous remettre en tête son utilisation... Vous devez avoir installé fechmail et configuré ainsi un .fetchmailrc pour root par exemple : ---8<--- COUPER ICI ---------------------------------------------------- poll mail.fai.fr protocol pop3 user login1, with password pass1, is user1 here user login2, with password pass2, is user2 here ---8<--- COUPER ICI ---------------------------------------------------- Sachant que vous pouvez utiliser plusieurs fournisseurs de comptes mails (qui peuvent ne pas être votre FAI mais de simples hébergeurs de sites et de mails). Vous pouvez aussi laisser vos utilisateurs spécifier eux même leurs comptes mails (mais vous devrez tout de même connaitre leurs adresses e-mail afin de poursuivre la configuration de votre serveur de mails, si vous ne prenez pas la même option que moi) et utiliser un script (que vous trouverez en annexe) qui ira automatiquement chercher leurs mails. 3. But du jeu Il est quasiment le même que celui énoncé par Jean Charles : - obtenir deux fichiers de configuration sendmail (souvent /etc/sendmail.cf) fonctionnant avec un sendmail quelconque fourni par une distribution (par exemple Red Hat) : un pour le mail-hub et un pour toutes les autres machines du réseau. - les adresses locales doivent être réécrites de façon à correspondre à l'adresse fournie par le fournisseur d'accès - le courrier doit être converti en 8 bits quoi qu'il arrive - utiliser m4 afin de générer automatiquement (et presque complètement) les fichiers sendmail.cf (fichier compliqué !) à partir d'un script .mc (simple, lui !). Il y a seulement quelques détails supplémentaires : - les messages locaux DOIVENT rester locaux afin de ne pas être envoyé au FAI puis rappatriés, ce qui évite une perte de temps et un gaspillage de la connexion Internet. - obtenir une configuration pour le mail-hub et les autres machines de telle manière que les messages locaux soient envoyés et reçus le plus rapidement possible. J'utilise, moi-même, une version de sendmail qui n'est pas toute récente et je parlerais donc d'une utilisation future à la fin de ce document. 4. Mise en oeuvre 4.1 Mise au point Vous devez trouver sur votre disque dur, un répertoire sendmail.cf/cf où se trouvent peut-être des exemples de fichiers .mc ou des explications sur la façon d'en créer sur votre distribution. Dans une Debian ce répertoire est généralement /usr/share/sendmail.cf/cf, ou, pour les versions plus récentes, /usr/share/sendmail/sendmail.cf/cf. Pensez toutefois à lire en détail la documentation de Jean Charles Delépine sus-citée ainsi que celles auxquelles elle fait référence. J'utiliserais cependant des termes légèrement différents de lui, mais tout aussi compréhensibles et qui ne vous dérouteront pas -- du moins j'espère. Vous devez connaître avant tout la liste des machines et utilisateurs de votre réseau local. Ensuite voici l'explication des termes utilisés : Domaine local non routable : mondomaine.tld (¹) Passerelle Internet (faisant office de mail-hub) : mailhub Serveur SMTP du FAI : smtp.fai.fr Login FAI d'un utilisateur : login Nom d'un utilisateur local : user Le nom «mailhub» est le nom de votre passerelle non complètement qualifié. Je pourrais y faire référence par mailhub ou mailhub.mondomaine.tld selon l'utilisation que l'on en aura -- ATTENTION : l'utilisation de l'un ou l'autre n'est pas fortuite ! Afin de permettre que les messages locaux restent locaux et ne soient pas envoyés vers les boites du FAI correspondantes puis rappatriés, il y a plusieurs solutions : 1. la première est simplement de faire une redirection de ces messages directement sur le compte de la personne concernée. 2. la deuxième est d'utiliser et de gérer un domaine virtuel (ce qui n'a pas été testé ici. 3. la troisième solution est de faire en sorte que le champ From: des messages provenant des utilisateurs locaux et destinés à d'autres utilisateurs locaux ne soit pas ré-écris. 4. la quatrième et dernière solution (pour l'instant) est de ré-écrire le champ From: des messages provenant des utilisateurs locaux et destinés à d'autres utilisateurs locaux. J'ai choisi personnellement la 3ème solution (car je trouve plus joli de voir thomas@mailhub.mondomaine.tld plutôt que login@fai.fr) dans les entêtes mais je vous laisse la possibilité de choisir la 1ère solution, n'ayant pas testé la seconde -- que vous pouvez expérimenter, toutefois, en lisant le kit M4 de sendmail, la documentation de sendmail ainsi que la FAQ de comp.mail.sendmail, sachant que l'option principale qui vous interesse est la virtusertable. La 4ème solution est celle que j'utilisais avant mais nécessitait de connaître -- tout comme la 1ère solution -- les adresses e-mail de tous vos utilisateurs. ¹ : tld == Top Level Domain. C'est une extension du type .fr, .org, .com, etc... 4.2 Le fichier linux-mailhub.rtc.mc ---8<--- COUPER ICI ---------------------------------------------------- divert(-1) # linux-mailhub.rtc.mc, version réseau derrière une connexion en dialup # Copyright (C) 2000 Thomas Nemeth. # # Thanks to Jean Charles Delépine, Cyril guibourg, Erwan David, Julien # Blache, Yves Potin and Neil W Rickert. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # divert(0) include(`../m4/cf.m4')dnl Macros globales dnl VERSIONID(`@(#)linux-mailhub.rtc.mc, 0.3 (Nemeth) 10.08.2000')dnl dnl dnl =================================================================== dnl dnl Définition d'un OSTYPE dnl dnl On tournera généralement sous Linux. dnl OSTYPE(linux)dnl dnl dnl =================================================================== dnl dnl Utilisation des fonctionnalités génériques habituelles. dnl dnl le domaine 'generic' défini le nom des .forward, la feature 'redirect' dnl et l'utilisation de sendmail.cw dnl DOMAIN(generic)dnl dnl dnl =================================================================== dnl dnl Domaine générique dnl dnl défini la classe des domaines influencés par les genericstables dnl utilisées plus bas. Y mettre tous les noms que votre serveur peut dnl prendre suivant les outils utilisés (pine, netscape, mail...) dnl GENERICS_DOMAIN(mailhub.mondomaine.tld mailhub)dnl dnl dnl =================================================================== dnl dnl Ajout du nom de domaine aux mails non qualitifés dnl pour l'émission des couriers avec user@machine.domaine.tld dnl FEATURE(always_add_domain)dnl dnl dnl =================================================================== dnl dnl Transformation des entêtes avec le nom du mail-hub dnl MASQUERADE_AS(mailhub.mondomaine.tld)dnl dnl dnl =================================================================== dnl dnl Listes des machines du réseau à relayer dnl dnl Noms des machines du réseau local pour lesquelles les entêtes seront dnl ré-écrites afin que le mail-hub puisse correctement les traiter. dnl Prévient aussi de montrer le nom de toutes les machines du réseau, mais dnl indispensable pour l'utilisation d'un mail-hub. dnl MASQUERADE_DOMAIN_FILE(/etc/machines)dnl dnl dnl =================================================================== dnl dnl Listes des machines du réseau à relayer dnl dnl Noms des machines du réseau local pour lesquelles le relai des dnl messages à l'extérieur sera effectué. Sans ça pas de messages dnl vers l'extérieur à partir des autres machines du réseau. dnl FEATURE(`access_db',`hash -o /etc/mail/access')dnl dnl dnl =================================================================== dnl dnl Listes des machines du réseau à relayer dnl dnl Traiter /etc/mail/access comme une liste de machines et non comme dnl une liste de domaines. dnl FEATURE(relay_hosts_only)dnl dnl dnl =================================================================== dnl dnl Ré-écriture de l'enveloppe dnl dnl pour que le from de l'enveloppe soit correct... nécessaire pour dnl pouvoir contacter certains domaines bien gérés. dnl FEATURE(masquerade_envelope)dnl dnl dnl =================================================================== dnl dnl Utilisation de procmail en local dnl dnl Par défaut le mailer local pour linux est mail.local, je lui préfère dnl procmail d'autant plus que mail.local n'est généralement pas dnl fourni avec les distributions actuelles de linux. Il peut être dnl trouvé dans le package sources de sendmail. dnl dnl ATTENTION, procmail est sensé être dans /usr/local/bin mais si vous ne dnl l'avez pas compilé vous même il est certainement dans /usr/bin... dnl FEATURE(local_procmail,``/usr/bin/procmail'')dnl dnl dnl =================================================================== dnl dnl Utilisation d'une table de ré-écriture de From: dnl dnl un FEATURE(genericstable) suffirait mais je veux rester cohérent dnl avec la solution "Kit de Jussieu" fournie par le Guide du Rootard, dnl je renomme donc /etc/genericstable en /etc/revaliases dnl C'est dans ce fichier que nous définierons les règles de dnl transcription d'adresse entre adresse locale -> adresse provider. dnl ex: user@machine.mondomaine.tld -> ftif681124@wanadoo.fr (login@fai.fr) dnl FEATURE(genericstable,``hash -N /etc/revaliases'')dnl dnl dnl =================================================================== dnl dnl Ne pas cannoniser les adresses des messages à envoyer dnl FEATURE(nocanonify)dnl dnl dnl =================================================================== dnl dnl Définition du charset pour qu'on puisse nous lire correctement dnl define(`confDEF_CHAR_SET', `ISO-8859-1')dnl dnl dnl =================================================================== dnl dnl Tout ce qui coûte cher doit attendre un sendmail -q (automatique dnl ou autoritaire) dnl define(`confCON_EXPENSIVE',`True')dnl dnl dnl =================================================================== dnl dnl Redirection des messages d'erreur dnl dnl Les messages d'erreur doivent être envoyés en copie au Postmaster dnl define(`confCOPY_ERRORS_TO', `Postmaster')dnl dnl dnl =================================================================== dnl dnl Pour que les messages envoyés à une liste locale soit aussi envoyés dnl à l'auteur dnl define(`confME_TOO', `True')dnl dnl dnl =================================================================== dnl dnl Reconstruction automatique de la base des alias dnl define(`confAUTO_REBUILD', `True')dnl dnl dnl =================================================================== dnl dnl Définition des temps avant l'envoi de messages d'erreur dnl define(`confTO_QUEUEWARN',`12h')dnl define(`confTO_QUEUEWARN_NORMAL',`12h')dnl define(`confTO_QUEUEWARN_URGENT',`6h')dnl define(`confTO_QUEUEWARN_NONURGENT',`18h')dnl dnl dnl =================================================================== dnl dnl Où doit-on envoyer les couriers externes dnl dnl Ce n'est pas à moi de négocier avec le bout du monde et de toute façon, dnl n'ayant pas de DNS, je ne saurais pas le faire... dnl On utilise smtp8 pour envoyer les accents en 8 bits sans passage dnl par le quoted unreadable. Attention, on considère ici que dnl mail.domaine.fr dispose d'un MTA correct acceptant les messages en dnl 8 bits (soit la plupart si ce n'est tout les fournisseurs d'accès) dnl define(`SMART_HOST', `smtp8:[smtp.fai.fr]')dnl dnl dnl =================================================================== dnl dnl Définition des drapeaux pour l'émission des couriers dnl dnl Le flag 'e' est là pour expensive : smtp coûte cher ! dnl Le flag 'A' est là pour aliases : l'envoi de messages vers dnl un utilisateur local nécessite une ré-écriture de From: dnl Pour cela il faut des entrées dans /etc/aliases du type dnl login@fai.fr: user dnl IMPORTANT : Voir la doc pour les explications (4.4.1). dnl define(`SMTP_MAILER_FLAGS', `e')dnl dnl dnl =================================================================== dnl dnl Définition des mailers qui seront utilisés dnl MAILER(local)dnl MAILER(smtp)dnl MAILER(procmail)dnl dnl dnl =================================================================== ---8<--- COUPER ICI ---------------------------------------------------- 4.3 Le fichier linux-netclient.rtc.mc ---8<--- COUPER ICI ---------------------------------------------------- divert(-1) # linux-netclient.rtc.mc, version réseau derrière une connexion en dialup # Copyright (C) 2000 Thomas Nemeth. # # Thanks to Jean Charles Delépine, Cyril guibourg, Erwan David, Julien # Blache, Yves Potin and Neil W Rickert. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # divert(0) include(`../m4/cf.m4')dnl Macros globales dnl VERSIONID(`@(#)linux-netclient.rtc.mc, 0.1 (Nemeth) 10.08.2000')dnl dnl dnl =================================================================== dnl dnl Définition d'un OSTYPE dnl dnl On tournera généralement sous Linux. dnl OSTYPE(`linux')dnl dnl dnl =================================================================== dnl dnl Redirection vers le mail-hub dnl dnl Cette machine va router tous ses mails vers le mail-hub donc dnl on lui dit vers quelle machine se tourner. dnl dnl Attention !! Ne pas utiliser `nullclient' sur une machine accessible dnl de l'extérieur : cette règle produit un serveur ouvert à tout dnl relais. On lui préfèrera dans ce cas l'association des macros dnl SMART_HOST et MAIL_HUB en décommentant la partie suivante et en dnl commentant celle-ci. dnl FEATURE(`nullclient',`mailhub.mondomaine.tld')dnl dnl dnl =================================================================== dnl dnl Configuration pour machines accessibles de l'extérieur. dnl dnl undefine(`ALIAS_FILE')dnl dnl FEATURE(always_add_domain)dnl dnl define(`MAIL_HUB', `mailhub.mondomaine.tld')dnl dnl define(`SMART_HOST', `mailhub.mondomaine.tld')dnl dnl define(`confFORWARD_PATH', `')dnl dnl MASQUERADE_AS(`mailhub')dnl dnl FEATURE(`masquerade_envelope')dnl dnl MAILER(smtp)dnl dnl dnl =================================================================== ---8<--- COUPER ICI ---------------------------------------------------- 4.4 Explications sur le fichier linux-mailhub.rtc.mc Vous devez préparer plusieurs fichiers supplémentaires pour votre mail-hub, contenant des informations sur vos utilisateurs et vos machines. Le fichier linux-netclient.rtc.mc étant fini, il n'y a rien à spécifier pour lui. Son installation est décrite dans le chapitre suivant. Les fichiers décrits dans cette section ne sont à mettre QUE sur le mailhub. 4.4.1 Le fichier /etc/aliases Ce fichier standard doit contenir le nom des alias de vos utilisateurs. Vous DEVEZ y avoir mis au moins les entrées suivantes : postmaster: root MAILER-DAEMON: postmaster root: votreloginlocal Vous pouvez y ajouter des alias afin de permettre d'envoyer des messages à tout un groupe à la fois ou à tout le monde : all: user1, user2, user3, ... staff: user2, user4, ... Cependant, si vous avez choisi la 1ère solution pour la redirection des messages locaux, vous devez faire la chose suivante : 1. rajouter le drapeau `A' dans la ligne define(`SMTP_MAILER_FLAGS', `e') du fichier de configuration pour qu'elle devienne : define(`SMTP_MAILER_FLAGS', `eA')dnl 2. rajouter dans le fichier /etc/aliases le login FAI de tous vos utilisateurs et leur nom d'utilisateur local de la façon suivante : login@fai.fr: user et ce pour chacun de vos utilisateurs. Cette modification permet de rediriger tous les messages des utilisateurs locaux à d'autres utilisateurs locaux vers leur boite locale et non vers celles de l'hébergeur de comptes mails. Il est en cela totalement différent du fichier suivant. 4.4.2 Le fichier /etc/revaliases Ce fichier contient la correspondance user -> login@fai.fr et permet de mettre dans les messages destinés à l'extérieur du réseau local l'adresse de réponse pour l'utilisateur qui à émis ces messages : l'adresse de l'hébergeur de comptes mails. Vous devez donc mettre dans ce fichier : user: login@fai.fr pour chacun des utilisateurs de votre réseau. 4.4.3 Le fichier /etc/machines Ce fichier contient la liste des noms des machines complètement qualifiés (FQDN : Fully Qualified Domain Name) donc de la forme mailhub.mondomaine.tld machine1.mondomaine.tld machine2.mondomaine.tld ... machinen.mondomaine.tld Ces noms, vous le remarquez, correspondent aux noms des machines du schéma montré dans le chapitre 2 : P, C1...Cn. C'est la liste des noms des machines qui auront leur nom masqué par celui du mailhub. Ce fichier est indispensable pour que l'émission des messages se fasse correctement. 4.4.4 Le fichier /etc/mail/access Ce fichier contient lui aussi la liste des machines mais avec une donnée supplémentaire : un mot-clef indiquant que le mail-hub est autorisé à transmettre les messages en provenance de ces machines. Pour chacune des machines vous devez donc y mettre une ligne : mailhub.mondomaine.tld RELAY machine1.mondomaine.tld RELAY ... machinen.mondomaine.tld RELAY 4.4.5 Le fichier /etc/nsswitch.conf Il doit contenir quelquechose du genre : # /etc/nsswitch.conf # # Name Service Switch configuration file. # passwd: files shadow: files group: files # On veut que le fichier /etc/hosts soit visité en # premier. # Attention de bien laisser une référence au service de noms (DNS) # ou vous ne pourrez plus utiliser d'outils réseaux compilés en libc6 ! hosts: files dns networks: files ethers: files protocols: files rpc: db files services: files Pour plus d'informations reportez-vous à la documentation de Jean Charles Delépine dans le Guide du ROOTard Linux sur la configuration de sendmail. 4.4.6 Le fichier /etc/hosts Vous devez rajouter l'adresse IP du serveur smtp de votre FAI : xxx.xxx.xxx.xxx mail.fai.fr mail Ainsi, quand sendmail cherchera le relai smtp, il ira directement voir dans /etc/hosts sans se soucier du DNS. Pour plus d'informations reportez-vous à la documentation de Jean Charles Delépine dans le Guide du ROOTard Linux sur la configuration de sendmail. 5. Installation des fichiers de configuration 5.1 Installation sur les machines clientes Vous devez avoir votre fichier linux-netclient.rtc.mc dans le répertoire sendmail.cf/cf de votre machine. Placez-vous dans ce répertoire et tapez les commandes : m4 linux-netclient.rtc.mc > sendmail.cf Copiez le fichier sendmail.cf ainsi obtenu dans /etc ou dans /etc/mail suivant votre distribution. 5.2 Installation sur le mail-hub Vous devez avoir préparé tous les fichiers de la section 4.4. 5.2.1 Le fichier sendmail.cf Vous devez avoir votre fichier linux-mailhub.rtc.mc dans le répertoire sendmail.cf/cf de votre machine. Placez-vous dans ce répertoire et tapez les commandes : m4 linux-mailhub.rtc.mc > sendmail.cf Copiez le fichier sendmail.cf ainsi obtenu dans /etc ou dans /etc/mail suivant votre distribution. Vous devez maintenant préparer certains fichiers de la section 4.4 pour leur utilisation dans sendmail... C'est à ce moment que vous devez modifier le fichier sendmail.cf si vous avez choisi, comme moi, la solution numéro 3 pour la redirection des messages locaux afin qu'ils restent locaux. Voici ce que j'ai fait sur mon fichier : Il faut éditer le fichier et chercher le paragraphe commençant par la ligne S10. La dernière ligne de ce paragraphe devant être R$* $: $>94 $1 do masquerading la transformer en #R$* $: $>94 $1 do masquerading Faites de même avec le paragraphe commençant par S30 et la ligne R$* $: $>93 $1 do masquerading à transformer en #R$* $: $>93 $1 do masquerading Ce sont de simples mises en commentaires. Si vous n'avez pas ces paragraphes dans le fichier sendmail.cf que vous avez obtenu, c'est que la version du kit m4 ou de sendmail que vous avez est différente. À ce moment, voici ce que vous devez faire : L'idée est de rechercher la ligne commençant par «Mlocal» et de noter les noms des ensembles de règles associés au «Sender». C'est quelquechose de la forme S=ruleset1/ruleset2 dans la ligne de Mlocal (Attention : elle peut être écrite sur plusieurs lignes) ex. : S=EnvFromL/HdrFromL ou S=10/30 Une fois ces ensembles de règles notés, il faut les retrouver dans le fichier (Les paragraphes correspondant à ces ensembles de règles commencent par S, ex. : S10 et S30 ou SEnvFromL et SHdrFromL) et commenter la ligne faisant le masquerading (en mettant un # devant) des 2 ensembles. Si vous ne trouvez pas, vous pouvez toujours me contacter (voir à la fin du document -- chapitre 7). 5.2.2 Le fichier /etc/revaliases Il faut en faire une base de données pour son intégration dans sendmail : /usr/sbin/sendmail -bi -oA/etc/revaliases Cette opération sera à refaire à chaque fois que vous rajoutez un utilisateur (²). 5.2.3 Le fichier /etc/mail/access De même que pour le fichier /etc/revaliases, vous devez en faire une base de données pour son intégration dans sendmail : makemap hash /etc/mail/access.db < /etc/mail/access Cette opération sera à refaire à chaque fois que vous rajouterez une machine sur votre réseau (²). 5.2.4 Modification des scripts de lancement de connexion Compilez le programme gethost.c donné en annexe : $ cc -o gethost gethost.c Et placez-le dans le répertoire /usr/local/bin. Copiez le fichier sendmail.cf (modifié, si vous avez fait comme moi) dans le fichier /etc/ppp/sendmail.cf.base, puis éditez votre fichier /etc/ppp/ip-up pour y ajouter les lignes suivantes : HOST=`/usr/local/bin/gethost $4` sed s/'#Dj.*'/"Dj$HOST"/ /etc/sendmail.cf.base >/etc/sendmail.cf kill -1 `head -1 /var/run/sendmail.pid` /usr/sbin/sendmail -q& Ensuite, éditez le fichier /etc/ppp/ip-down pour y rajouter les lignes : cp /etc/ppp/sendmail.cf.base /etc/sendmail.cf kill -1 `head -1 /var/run/sendmail.pid` Vous trouverez toutes les explications de ceci dans la documentation de Jean Charles. ² : pensez aussi à ces moments-là à relancer sendmail, que ce soit à la main ou en utilisant les scripts fournis par votre distribution, ex. sur une Debian : # /etc/init.d/sendmail restart 6. Remerciements Je tiens tout particulièrement à remercier Jean Charles Delépine pour son fichier de configuration si explicite et simple d'emploi :)), mais aussi Cyril Guibourg, pour son aide à modifier le fichier sendmail.cf et ses conseils pendant la phase de tests. Merci encore à Yves Potin qui m'a fourni un conseil très simple mais très efficace et qui lui-même tenait cette information de Stéphane Marchau. Merci aussi à Julien Blache et Erwan David qui m'ont conseillé, renseigné et aidé pour mes tests. Enfin un grand merci à Neil W Rickert pour son aide sur les options de sendmail... 7. Fin Pour toute remarque quant à ce document, corrections, louanges, insultes (mais moins), écrire à tnemeth@free.fr ! 8. Annexes 8.1 Ce que l'avenir nous réserve Après un mail dans la liste d'aide de sendmail à propos voici ce qu'il m'a été répondu concernant la modification via /etc/revaliases (FEATURE genericstable) des entêtes pour les messages sortant et la non modification des entêtes pour les messages locaux : From: Claus Assmann To: Thomas Nemeth Cc: sendmail-questions@sendmail.org Subject: Re: Specific Mail-Hub On Fri, Aug 11, 2000, Thomas Nemeth wrote: > I find it nice to see user@machine.domain.tld in the From: > header instead of login@isp.tld :) I'd love to have an option > to only use genericstable for outgoing mails... The next version (8.12) will probably have what you want: FEATURE(`local_no_masquerade') to avoid masquerading for the local mailer. Il est à noter que la Debian (potato) dispose déjà d'une telle option : FEATURE(dont_masquerade_local). 8.2 Le script pour fetchmail ---8<--- COUPER ICI ---------------------------------------------------- #!/bin/sh # # Script permettant de récupérer les messages de tous les utilisateurs d'un # système via fetchmail à partir du compte root et utilisant cron. # # Copyright (C) 2000 Thomas Nemeth # for UTILISATEUR in `ls /home -I lost+found`; do if [ -f /home/$UTILISATEUR/.fetchmailrc ]; then su - $UTILISATEUR -c "fetchmail -s" fi done ---8<--- COUPER ICI ---------------------------------------------------- 8.3 Le programme gethost.c ---8<--- COUPER ICI ---------------------------------------------------- /* gethost.c, récupère le nom canonique d'une machine à partir de son adresse IP. Copyright © 04/1998 Jean Charles Delépine This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. */ #include #include #include #include int main(argc,argv) char argc; char *argv[]; { struct hostent *host; struct in_addr ia; if (argc < 2) { fprintf(stderr,"Usage : %s addr\n",argv[0]); exit(1); } if (!inet_aton (argv[1],&ia)) { fprintf(stderr,"Erreur: adresse invalide\n"); exit(1); } host=gethostbyaddr((char *) &ia, sizeof(ia), AF_INET); if (!host) { fprintf(stderr,"Erreur: adresse non trouvée ou pas de DNS\n"); exit(1); } printf("%s\n",host->h_name); exit(0); } ---8<--- COUPER ICI ----------------------------------------------------