VERSION des produits necessaires : package sendmail 8.9.x (Informations également pour les versions precedentes.) ainsi que fetchmail.
Notre configuration va grandement varier en fonction des cas. Nous savons en effet que puisque nous ne sommes pas présent de maniere permanente, nous devons deleguer la partie mail à quelqu'un. La meilleure des solutions pour ce genre de cas, reste d'utiliser UUCP. Malheureusement ce type de service tend à disparaitre. N'hesitez pas tout de meme à faire pression sur votre fournisseur cheri, qui sait si de plus en plus de gens le demande ... peut etre que. Sinon quelques fournisseurs commerciaux ou non assume ce type de service (teaser, frmug, fdn etc etc). Bref vous trouverez une legere introduction au cas uucp plus loin pour le cas ou.
Mais la plus part d'entre vous devrons faire un choix. Comment gerer ce probleme.
Mais avant tout de chose nous avons un travail préparatoire a faire.
Plusieurs fichiers entre en ligne de compte dans la configuration de sendmail. Ainsi que quelques répertoires.
-rw-r--r-- 1 root root 2215 jun 24 20:21 /etc/aliases drwxr-xr-x 2 root root 1024 jun 24 20:49 /etc/mail -rw-r--r-- 1 root root 14786 avr 15 07:51 /etc/mail/README -rw-r--r-- 1 root root 329 jun 24 20:29 /etc/mail/access -rw-r--r-- 1 root root 16384 jun 24 20:29 /etc/mail/access.db lrwxrwxrwx 1 root root 10 jun 23 12:59 /etc/mail/aliases -> ../aliases -rw-r--r-- 1 root root 85 avr 15 07:51 /etc/mail/interneuser -rw-r--r-- 1 root root 16384 jun 23 13:42 /etc/mail/interneuser.db -rw-r--r-- 1 root root 85 avr 15 07:51 /etc/mail/genericstable -rw-r--r-- 1 root root 16384 jun 23 13:42 /etc/mail/genericstable.db -rw-r--r-- 1 root root 1465 avr 15 07:51 /etc/mail/mailertable -rw-r--r-- 1 root root 16384 jun 23 13:42 /etc/mail/mailertable.db -rw-r--r-- 1 root root 92 jun 24 20:33 /etc/mail/sendmail.cw -rw-r--r-- 1 root root 267 avr 15 07:51 /etc/mail/userdb -rw-r--r-- 1 root root 0 jun 23 13:42 /etc/mail/userdb.db -rw-r--r-- 1 root root 73 avr 15 07:51 /etc/mail/virtusertable -rw-r--r-- 1 root root 16384 jun 23 13:42 /etc/mail/virtusertable.db drwxrwxrwt 2 root root 1024 jui 5 14:37 /var/spool/mail drwxr-xr-x 2 root root 1024 jui 5 14:47 /var/spool/mqueue drwxr-xr-x 11 root root 1024 jun 23 12:59 /usr/share/sendmail/ -r--r--r-- 1 root root 90792 fév 3 23:06 /usr/share/sendmail/README drwxr-xr-x 2 root root 1024 jui 3 23:48 /usr/share/sendmail/cf drwxr-xr-x 2 root root 1024 jun 23 12:59 /usr/share/sendmail/domain drwxr-xr-x 2 root root 1024 jun 23 12:59 /usr/share/sendmail/feature drwxr-xr-x 2 root root 1024 jun 23 12:59 /usr/share/sendmail/hack drwxr-xr-x 2 root root 1024 jun 23 12:59 /usr/share/sendmail/m4 drwxr-xr-x 2 root root 1024 jun 23 12:59 /usr/share/sendmail/mailer drwxr-xr-x 2 root root 1024 jun 23 12:59 /usr/share/sendmail/ostype drwxr-xr-x 2 root root 1024 jun 23 12:59 /usr/share/sendmail/sh drwxr-xr-x 2 root root 1024 jun 23 12:59 /usr/share/sendmail/siteconfig
Sous RH le repertoire /usr/share/sendmail doit etre si mes souvenirs sont bon dans : /usr/lib/sendmail-cf
Pas de panique je donne tout les fichiers / repertoires mais tous ne seront pas à decouvrir enfin vous verrez bien :)
ce fichier sert à creer des alias, des pseudos noms en quelque sorte. Par exemple si vous ecriviez à webmaster@sortilege.net ou stephane@sortilege.net cela ne changerait rien. Ma boite email s'appelle stephane@sortilege.net mais grace à aliases si un courrier arrive pour webmaster c'est moi qui vais le recevoir.
Ce fichier sert à indiquer à sendmail les noms des domaines dont il à la charge. Ne mettez jamais dedans le nom du domaine de votre fai. En effet dans ce cas la il n'expedirait plus le courrier au bon endroit et vous n'aurriez jamais de réponse. (Enfin cela ce serait le "moins pire" des problemes).
Ce fichier nous sera utile pour declarer qui à le droit de nous utiliser pour envoyer du courrier ou non.
Ces fichiers nous servirons à eviter que le courrier interne ne transite par internet.
Fichier qui nous servira à nous assurer que notre nom de boite local n'est pas envoyé par erreur à la place de notre nom de boite internet. C'est confus mais vous pourrez mieu comprendre tout à l'heure.
Fichier qui nous servira dans le cas d'uucp ou si notre réseau grandit un jour.
Fichier dont nous n'aurrons pas vraiment l'utilité, mais j'aime bien son nom.
Repertoire qui contient les courriers recus.
Repertoire qui contient les courriers en attente de depart.
Repertoires pour la configuration.
Voila nous savons maintenant ou nous devrons aller .. y a plus qu'a ...
Nous allons partir du principe que les boites emails de nos utilisateurs ont la forme :
login@dial.oleane.com Pour illustrer l'exemple nous allons faire comme si il y avait trois utilisateurs :
stephane@dial.oleane.com nathalie@dial.oleane.com antoine@dial.oleane.com
A partir de la nous devrons respecter certains imperatifs.
Je vous livre l'exemple, vous le lisez puis nous detaillons :
include(`../m4/cf.m4')dnl OSTYPE(`linux')dnl DOMAIN(generic)dnl GENERICS_DOMAIN(sortilege.net)dnl FEATURE(use_cw_file)dnl define(`confCW_FILE', `/etc/mail/sendmail.cw')dnl FEATURE(genericstable,`hash -o /etc/mail/genericstable')dnl FEATURE(virtusertable,`hash -o /etc/mail/virtusertable')dnl FEATURE(mailertable, `hash -o /etc/mail/mailertable')dnl FEATURE(accessdb,`hash -o /etc/mail/access')dnl FEATURE(nocanonify)dnl FEATURE(always_add_domain)dnl FEATURE(accept_unresolvable_domains)dnl FEATURE(masquerade_envelope)dnl MASQUERADE_AS(dial.oleane.com)dnl define(`STATUS_FILE', `/var/log/sendmail.st')dnl define(`confDEF_USER_ID', `daemon:daemon')dnl define(`confPRIVACY_FLAGS',`noreceipts,novrfy')dnl define(`confNO_RCPT_ACTION',`add-apparently-to')dnl define(`confCF_VERSION',` stephane marchau - 15/03/99')dnl define(`confSMTP_MAILER',`smtp8')dnl define(`SMTP_MAILER_FLAGS',`e9')dnl define(`confCON_EXPENSIVE',`True')dnl define(`confME_TOO',`True')dnl define(`confCOPY_ERRORS_TO',`PostMaster')dnl define(`confDEF_CHAR_SET',`ISO-8859-1')dnl define(`confMIME_FORMAT_ERRORS',`True')dnl define(`confTO_QUEUEWARN',`24h')dnl define(`SMART_HOST',`smtp:[smtp.dial.oleane.com]')dnl MAILER(`local') MAILER(`smtp') LOCAL_CONFIG Kinterneuser hash -o /etc/interneuser.db LOCAL_RULE_0 # # Auteur de la solution : from Pablo Saratxaga (pirateo) # R$+ < @ $+ . > $* $: < $(interneuser $1 @ $2 $: $) > $1 < @ $2 . > $3 R$+ < @ $+ $~. > $* $: < $(interneuser $1 @ $2 $3 $: $) > $1 < @ $2 $3 >$4 R< $+ > $+ < @ $+ > $* $@ $>97 $1 $4 R<> $+ < @ $+ > $* $: $1 < @ $2 > $3 # ATTENTION IL VOUS FAUT ABSOLUMENT METTRE UNE TABULATION ENTRE LES $* et les $: ou $@ # SINON SENDmAIL VA HURLER ET COMME GENERALEMENT IL EST TRRRRRRRES POINTILLEURS NOUS # N'AVONS PAS BESOIN D'EN RAJOUTER #
Bien allons y detaillons :
Ajouter des elements standard.
Nous utilisons linux.
Indiquer notre nom de domaine.
Utiliser un fichier cw pour gerer les domaines dont doit s'occuper notre sendmail.
Indiquer ou est le fichier sendmail.cw
Utiliser les regles genericstable (pour plus d'info reportez vous à la section Preparons les fichiers annexes.
Utiliser les regles virtusertable (pour plus d'info reportez vous à la section Preparons les fichiers annexes.
Utiliser les regles mailertable (pour plus d'info reportez vous à la section Preparons les fichiers annexes.
Utiliser la base acces (pour plus d'info reportez vous à la section Preparons les fichiers annexes. Attention à n'utiliser qu'avec les versions de sendmail > 8.9.X
Ne pas chercher a resoudre le nom de domaine du champ from. Il sagit d'une mesure antispam qui nous generait plus qu'autre chose. Attention ceci n'est a mettre que dans les versions de sendmail > 8.9.X )
Nous allons lui dire de cacher notre domaine dans les mails car il n'est pas reconnu sur internet).
Nous indiquons par quoi il devra remplacer. (Mettre le domaine de votre fournisseur de boite email.
Placer les stats de sendmail dans le fichier indiqué.
Nous indiquons à sendmail les droits qu'il utilisera
Le fait que nos boites soient sur notre propre domaine, va allerger notre fichier de configuration. C'est le seul avantage que nous allons en tirer. Mais il n'est pas negligeable vu le nombre de fichier que nous devons configurer pour mettre en route notre réseau.
Voyons maintenant les fichies annexe. Dans notre configuration nous avons demandé à sendmail d'aller chercher des informations dans un certain nombre de fichiers.
Il a pour objectif de permettre à sendmail de connaitre tout les noms de domaine qu'il devra gerer en interne.
sortilege.net polgara.sortilege.net merlin.sortilege.net gandalf.sortilege.net belgarath.sortilege.net <code> C'est un fichier texte tout bete. Nous listons dedans tout nos postes puisque dans la configuration dns nous avons placé un rr MX de chaque poste sur le serveur donc nous identifions chaque poste par principe. <descrip> <tag/genericstable/ Ce fichier à un objectif tres precis et particulierement utile pour nous. En effet il permet de modifier automatiquement le champ from d'un message. Cela permetra de mettre en "accord" un nom local de boite avec le nom utilisé sur internet. Exemple stephane@sortilege.net est mon nom de boite si vous m'envoyez un message; mais sur mon reseau interne je suis stef. Pourtant tout mes messages (qu'ils soient en interne ou extern) ont un champ from avec stephane. C'est grace à genericstable. La structure d'un fichier <code>
Bien tout est en place pour que nous essayons de maniere à verifier que nous avons bien travaillé. Une derniere chose reste a faire. Transformer le fichier MC que nous avons crée en fichier sendmail.cf mais comme nous sommes des gens prudents nous allons d'abord le transformer sans l'activé de maniere à faire quelques tests basiques.
J'adore cette partie car elle represente 2 avantages, simplicité pour vous, rapidité à ecrire pour moi :)
m4 /usr/share/sendmail/cf/sortilege.mc >/etc/sendmail.cf
Voila, voili, c'est rapide heinn :) et en plus si vous n'avez pas fait de faute de syntaxe cela marche.
vous trouverez sous /etc/rc.d./* un script au doux nom :
sendmail generalement il vous suffira de faire :
./sendmail stop ./sendmail start
Pour avoir votre sendmail en etat de marche et tenant compte des dernieres modificaitons que vous pourriez avoir fait.
Si vous avez l'avantage de pouvoir recuperer vos messages en etrn faites le.
Cette solution n'a d'interet que si vous avez besoin d'adresse email non permanente. Nous savons que comme nous ne sommes pas connectés de maniere permanente il nous faut 2 boites. Une sur internet (pour recevoir les messages qui viennent de n'importe ou) et une sur notre serveur pour les messages en interne.
Si la boite pour les messages en interne ne pose pas de probleme (nous verrons tout à l'heure comment en creer) les boites sur internet sont plus difficile à trouver. Cette solution permet donc de traiter avec une unique sur internet plusieurs utilisateurs locaux.
Nous configurerons sendmail et fetchmail pour qu'ils gerent ce cas au mieu. Mais attention cette solution ne peut convenir qu'a des cas tres particuliers (centre de formation, ecole bref tout type de structure qui à besoin d'adresse pour des personnes qui NE RESTERONT PAS LONGTEMPS).
Pourquoi ?? parceque cette solution peut poser des problemes dans des cas certes particuliers mais relativement habituel. Dans le cas ou quelqu'un envoie un message en BCC ( copie invisible) ou si l'utilisateur veut s'abonner à une Mailing liste. Je ne vais pas entrer dans les details mais sachez que dans ces cas la ce type de solution est à proscrire.
La technique du plussed user utilise une opportunité des programmes de transport de mail. En effet pour toute boite email (stephane@sortilege.net par exemple), vous pouvez ajouter un deuxieme nom.
stephane+CEQUEVOUSDESIREZ@sortilege.net est identique à stephane@sortilege.net
Un courrier destiné à l'un ou à l'autre sera traité de la meme maniere, c'est à dire qu'il sera envoyé dans votre boite tout simplement.
Donc pour un petit réseau si je reprends mes trois utilisateurs exemple, les adresses seraient :
une boite generique pour le réseau a ouvrir sur internet (sortilege@sortilege.net)
l'utilisateur local * aurrait pour adresse internet : sortilege+*@sortilege.net ce qui donnerait :
utilisateur local Adresse Email stephane (sortilege+stephane@sortilege.net) nathalie (sortilege+nathalie@sortilege.net) antoine (sortilege+antoine@sortilege.net)
Bien entendu nous ne communiquerions à l'utilisateur que l'adresse sous forme sortilege+* et configurerions sendmail et fetchmail pour faire tout le boulot de maniere transparente.
A ce niveau la cela ne change pas beaucoup. La configuration est en effet identique à ce que nous trouvons avec la solution (dial.oleane.com)
L'unique difference etant au niveau des fichiers genericstable et interneuser qui sont OBLIGATOIRE.
Le fichier genericstable se presentera ainsi :
stephane sortilege+stephane@sortilege.net romain sortilege+romain@sortilege.net antoine sortilege+antoine@sortilege.net
Le fichier interneuser lui se presentera ainsi :
sortilege+stephane@sortilege.net stephane sortilege+romain@sortilege.net romain sortilege+antoine@sortilege.net antoine
Voila c'est tout, vous penserez bien entendu à faire vos makemap pour creer les tables.
C'est fetchmail qui va subir la plus grosse modification. En effet il ne doit recuper qu'une boite (sortilege@sortilege.net) mais doit s'arranger pour passer les courriers aux bons destinataires.
Voyons comment cela va se presenter :
-rw------- 1 root root 725 Jul 6 23:06 .fetchmailrc poll pop.sortilege.net proto pop3: no dns localdomains dial.oleane.com: user sortilege with password "PLybK2Pq" is * here smtp polgara.sortilege.net
Attention de bien verifier que les droits d'utilisations ne soit qu'en Lecture Ecriture pour le proprietaire UNIQUEMENT.
Je ne reviens pas sur la structure du fichier .fetchmailrc puisque nous l'avons abordé juste un peu plus haut.
Ce qui differencie cette fois, c'est l'utilisation de "*" à la place du nom de destinataire. Cela veut dire qu'il doit laisser le programme sendmail se debrouiller. Comme nous disposons des regles de pablo qui permettent de convertir le destinataire cela passera sans trop de probleme.
Identique au cas dial.oleane.com sauf que .fetchmailrc n'est pas à modifier à chaque ajout d'un utilisateur.
Postfix est un programme identique dans la fonctionnalité à sendmail. L'on en parle beaucoup actuellement,ventant sa simplicité et son bon fonctionnement. Malheureusement je n'ai pas encore eut le temps de me plonger dedans. Donc peut etre pour une autre fois.