Envoyer du courrier avec sendmail (page 1) |
![]() |
![]() |
|
6.1.00
J'ai corrigé un petit truc dans le script ip-up dans le chapitre
"si vous êtes inscrits à plusieurs FAI"
11.12.99
J'ai rajouté un script pour reconfigurer automatiquement sendmail
en fonction du FAI utilisé.
J'ai modifié un peu le paragraphe sendmail et timeout DNS concernant
les temps d'envoi des emails quand on est off-line.
4.12.99
Installation d'un serveur DNS pour résoudre le problème
d'envoi de mail en mode off-line qui prenait 80s qu'on soit sur un poste
client ou sur le poste linux.
24.11.99
J'ai encore apporté une modif à mon document (dernière
modification 24/11/99), en fait le fait de rajouter define(`confDOMAIN_NAME',`fai.fr')
efface
bien le nom du domaine privé dans les champs Received, mais ne permet
plus d'envoyer de mail à des destinataires du domaine fai.fr.
Les deux lignes,
FEATURE(virtusertable, hash /etc/mail/virtusertable)dnl
FEATURE(use_cw_file)dnl
qui ont pour but d'éviter que des mails avec comme destinataire
toto.nom@fai.fr
(avec
toto
utilisateur local) partent d'abord chez le fai avant de revenir, ont pour
effet aussi de ne pas pouvoir envoyer des mails à des destinataires
du domaine fai.fr.
Les modifications apportées corrigent tout ça.
Pour configurer sendmail je ne peux que vous conseillez la lecture du
document
d'Eric Jacoboni "lire et envoyer du courrier off-line sur sa
machine". Il est vraiment très clair, et il y a vraiment pas grand
chose à rajouter. Je m'en suis grandement inspiré pour configurer
mon poste Linux avec cependant quelques différences de taille que
je mentionnerai, je présente dans cette page uniquement les manips
que j'ai faite pour configurée sendmail, pour des explications se
reporter au document précédemment cité.
Pour résumer les différences avec la doc de Jacoboni
sont :
- le nom de domaine privé n'apparaît aucunement dans les
mails sortants, ce qui n'est pas le cas avec la doc d'Eric où apparaît
le nom de domaine privé dans les champs Received et Message-Id,
- avec ma config le serveur linux peut relayer le courrier des postes
du domaine privé,
- on peut mailer en local sans que le courrier ait à passer
par le FAI, par contre si un utilisateur local répond à un
mail d'un autre utilisateur local (fontion Reply), le mail ne passe pas
d'abord chez le FAI pour revenir sur le réseau, il est acheminé
en local. Avec la config d'Eric le mail va d'abord chez le FAI.
On suppose que machine est le nom de votre machine tel que vous
l'aurez défini avec netcfg ou linuxconf, domaine.fr est le
nom de votre domaine qui se limite à votre machine ou éventuellement
à votre réseau local, mail.fai.fr est le serveur de
mail de votre provider. toto et tata sont les deux noms d'utilisateur
que vous avez déclarés sur la machine. Vous ne disposez que
d'un seul compte chez votre provider, mais par contre vous avez plusieurs
emails, du style toto.nom@fai.fr
et tata.nom@fai.fr.
include(`../m4/cf.m4')dnlJ'ai une différence notable par rapport à la doc de Jacoboni, j'ai rajouté FEATURE(relay_entire_domain) ce qui permet à sendmail d'accepter les mails venants des postes de votre réseau privé appartenant à votre domaine privé, sans ce parametre à l'envoi d'email, vous auriez sur les PC sous windows un message d'erreur du style "Relaying denied".
OSTYPE(`linux')dnl
FEATURE(redirect)dnl
FEATURE(nocanonify)dnl
FEATURE(always_add_domain)dnl
FEATURE(local_procmail)dnl
GENERICS_DOMAIN(machine.domaine.fr machine localhost)
FEATURE(genericstable)
FEATURE(masquerade_envelope)dnl
FEATURE(relay_entire_domain)dnl
FEATURE(accept_unresolvable_domains)dnl
define(`confDOMAIN_NAME',`ppp.fai.fr')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(`SMART_HOST', `smtp8:[mail.fai.fr]')dnl
define(`confRECEIVED_HEADER', `from fai.fr
by fai.fr ($v/$Z)$?r with $r$. id $i$?u
for $u; $|;
$.$b')
define(`confTO_QUEUEWARN', `24h')dnl
MAILER(local)
MAILER(smtp)
Kpirateo hash -o /etc/mail/pirateo
LOCAL_RULE_0
R$+ < @ $+ > $* $: < $(pirateo $1 @ $2 $: $) > $1 < @ $2 > $3
R< $+ > $+ < @ $+ > $* $@ $>97 $1
R<> $+ < @ $+ > $* $: $1 < @ $2 > $3^^^^^^ tabulation unique à cet endroit, ailleurs un simple espace
Les dernières lignes (à partir de Kpirateo) permet
que le courrier ne part chez le FAI en cas de réponse à un
utilisateur du réseau local. Je m'explique, si un utilisateur local
toto
envoit un mail à un autre utilisateur local tata, l'email
de l'expéditeur va être réécrite (fonction genericstable)
toto.nom@fai.fr,
si tata répond au mail, la réponse partira vers toto.nom@fai.fr
et non pas simplement toto, en d'autres termes le courrier va d'abord
partir chez le fai avant de revenir en local ! Ces lignes permettent que
le courrier soit acheminé en local. Cette astuce m'a été
communiquée par Denis
Braussen d'après l'idée de Pablo
Saratxaga. Vous trouverez plus de détail sur la page de configuration
UUCP écrite par Denis au chapitre
7.
ATTENTION: à la tabulation unique dans les trois dernières
lignes.
J'ai rajouté aussi define(`confDOMAIN_NAME',...) et define(`confRECEIVED_HEADER',...) se reporter au paragraphe masquage des domaines.
Ensuite on crée un fichier /etc/genericstable , qui contient ces lignes:
toto: toto.nom@fai.frCe fichier fait la correspondance entre les adresses locales et les adresses "officielles".
tata: tata.nom@fai.fr
Pour faire prendre en compte la modif de ce fichier, il faut taper ensuite:
/usr/sbin/sendmail -bi -oA/etc/genericstable
On crée ensuite un fichier /etc/mail/pirateo, dans lequel vous mettrez :
toto.nom@fai.fr toto
tata.nom@fai.fr tata
Ensuite pour générer le fichier au format qui va bien on tape :
makemap hash /etc/mail/pirateo < /etc/mail/pirateo
Ce fichier aura le rôle inverse de /etc/generistable, il transforme l'adresse du destinataire toto.nom@fai.fr en toto si celui est un utilisateur local, pour éviter que le mail parte chez le fai.
Ensuite vous modifiez votre fichier /etc/nsswitch.conf pour qu'il
ressemble à ça:
# bla bla
# un tas de commentaires
#
passwd: files
shadow: files
group: fileshosts: files dns
services: files
networks: files
protocols: files
rpc: files
ethers: files
netmasks: files
bootparams: filesnetgroup: files
publickey: files
automount: files
aliases: files
La doc de Jacoboni demande de modifier /etc/hosts pour qu'elle
contienne au moins la ligne
127.0.0.1 machine.domaine.fr localhost machineEt bien je n'en ai rien fait, j'ai laissé:
127.0.0.1 localhost localhost.localdomainPourquoi donc? Parce que si on suit les conseils de Jacoboni, Samba ne marche plus, au lieu de travailler sur l'adresse IP de classe C de votre réseau privé que vous avez défini (192.168.13.X par exemple), Samba va travailler sur l'adresse de classe A 127.X.X.X, autant dire que rien ne fonctionnera.
127.0.0.1 localhost localhost.localdomainwindows et mac étant deux machines de votre réseau privé, les adresses IP sont données à titre indicatif.
192.168.13.10 machine.domaine.fr machine
192.168.13.11 windows.domaine.fr windows
192.168.13.12 mac.domaine.fr mac
ATTENTION: si sendmail bloque le boot de la machine, ça peut venir justement du fait qu'on n'a pas modifié la première ligne de /etc/hosts, sendmail n'arrive pas à trouver le nom de la machine et part dans une recherche qui par défaut dure 3 minutes, ceux-ci peut expliquer les remarque d'Eric Jacoboni. Par ailleurs ça peut engendrer des problèmes de résolution de nom sur la machine linux en mode off-line, pour résoudre ces problèmes tout en maintenant la ligne en question inchangée, reportez vous à la page installation d'un serveur DNS.
Pour rebatir le fichier de configuration de sendmail, on tape la commande:
m4 /usr/lib/sendmail-cf/cf/config.mc > /etc/sendmail.cfChanger (éventuellement) les droits de ce fichier:
chmod 600 /etc/sendmail.cfCa y est c'est fini
ps -A | grep sendmailSi vous voyez que ça (a priori c'est ce que vous aurez):
2345 p6 R 0:00 | \_ grep sendmail USERNAME= BROWSER=Vous avez rien à faire, par contre si vous avez:
2351 p6 R 0:00 | \_ grep sendmail USERNAME= BROWSER=
2371 p6 R 0:00 | \_sendmail
Vous devez faire kill -9 2371 pour tuer sendmail. Attention,
vous n'aurez pas forcément le même numéro de processus
(voir la doc UN IX pour plus d'infos).
Pour lancer sendmail avec relecture du fichier de configuration, tapez:
/usr/sbin/sendmail -bd -osVous pouvez éventuellement rajouter -X /var/log/sendmail.log pour avoir le fichier de log, si vous voulez avoir le fichier de log en permanence (y compris au reboot de la machine), modifiez le fichier de lancement de sendmail /etc/rc.d/init.d/sendmail à la ligne:
daemon /usr/sbin/sendmail $([ "$DAEMON" = yes ] && echo -bd) \Rajoutez:
daemon /usr/sbin/sendmail -X /var/log/sendmail.log $([ "$DAEMON" = yes ] && echo -bd) \ATTENTION: J'ai parfois l'erreur suivante après avoir tapé sendmail -bd -os:
[root@tavel cf]# sendmail -bd -os
554 /etc/sendmail.cf: line 51: unknown configuration line "
"
[root@tavel cf]#
En fait il suffit d'éditer /etc/sendmail.cf et de supprimer quelques lignes vides, pour que tout rentre dans l'ordre, tapez à nouveau la commande sendmail -bd -os.
/usr/sbin/sendmail -q -vL'option -v étant l'option "verbeuse". Pour visualiser les messages dans la file d'attente, vous pouvez tapez:
mailqQuand vous envoyez un courrier en local (de toto vers tata), le courrier ne va pas transiter par mqueue, de même qu'il est inutile de tapez "sendmail -q", il va se retrouver directement dans la boite aux lettres du destinataire local, avec dans le champ From toto@domaine.fr (c'est le but du paramêtre FEATURE(always_add_domain) qui va rajouter automatiquemetn le nom de domain privé).
mail -v echo@cnam < mail.testAvec mail.test un fichier texte contentant:
Subject: testContenu de l'email de réponse du serveur écho du cnam:
première ligne
------ Le serveur echo du domaine cnam.fr
------ a recu votre message le mar 10 aoû 22:25:28 MET DST
1999
------ Ci-dessous les en-tetes et le corps de votre message
> From toto.nom@fai.fr Tue Aug 10 22:25:27 1999
> Received: from obelix.fai.fr (obelix.fai.fr [210.205.98.21])
> by fermi.cnam.fr
(8.8.8/jpm-301097) with ESMTP id WAA11452
> for <echo@cnam.fr>;
Tue, 10 Aug 1999 22:25:27 +0200 (MET DST)
> From: toto.nom@fai.fr
> Return-Path: <toto.nom@fai.fr>
> Received: from machine.domaine.fr (IDENT:root@ppptc22.fai.fr [210.205.98.22])
> by obelix.fai.fr (8.9.1/8.9.1/R&D&B-990119)
with ESMTP id WAA26056
> for <echo@cnam.fr>; Tue,
10 Aug 1999 22:24:55 +0200
> Received: (from toto@localhost)
> by machine.domaine.fr (8.9.3/8.9.3/Commentaire
quelconque qui apparaitre dans l'entete - 15/08/99) id WAA00754
> for echo@cnam.fr; Tue, 10
Aug 1999 22:25:34 +0200
> Date: Tue, 10 Aug 1999 22:25:34 +0200
> Message-Id: <199908102025.WAA00754@machine.domaine.fr>
> To: echo@cnam.fr
> Subject: test
------
>
> première ligne
>
------ Fin de votre message
Quelques commentaires:
toto.nom@fai.fr est votre adresse email chez votre fournisseur
d'accès, obelix.fai.fr (IP= 210.205.98.21) est le nom de
la machine chez votre fai qui a "routé" votre email, ppptc22.fai.fr
(IP=210.205.98.22) c'est votre identité officielle sur le net
au moment de votre connexion.
Vous voyez que le nom de votre domaine apparait dans les champs Received,
et meme le commentaire que vous aurez défini dans le fichier de
config de sendmail. Certains gestionnaires d'email pourraient rejeter vos
emails sous pretexte de contenir un nom de domaine inconnu.
Voyons maintenant un email arrivant d'un de vos postes sous Windows et partant vers le net.
------ Le serveur echo du domaine cnam.fr
------ a recu votre message le mar 10 aoû 19:47:08 MET DST
1999
------ Ci-dessous les en-tetes et le corps de votre message
> From toto.nom@fai.fr Tue Aug 10 19:47:07 1999
> Received: from obelix.fai.fr (obelix.fai.fr [210.205.98.21])
> by fermi.cnam.fr
(8.8.8/jpm-301097) with ESMTP id TAA05598
> for <echo@cnam.fr>;
Tue, 10 Aug 1999 19:47:06 +0200 (MET DST)
> Return-Path: <toto.nom@fai.fr>
> Received: from machine.domaine.fr (IDENT:root@ppptc32.fai.fr [210.205.98.23])
> by obelix.fai.fr (8.9.1/8.9.1/R&D&B-990119)
with ESMTP id TAA23230
> for <echo@cnam.fr>; Tue,
10 Aug 1999 19:46:35 +0200
> Received: from windows (windows.domaine.fr [192.168.13.11])
> by machine.domaine.fr (8.9.3/8.9.3/Commentaire
quelconque qui apparaitre dans l'entete - 15/08/99) with ESMTP id TAA00863
> for <echo@cnam.fr>; Tue,
10 Aug 1999 19:38:54 +0200
> Message-Id: <199908101738.TAA00863@machine.domaine.fr>
> From: "Toto Nom" <toto.nom@fai.fr>
> To: <echo@cnam.fr>
> Subject: test de windows
> Date: Tue, 10 Aug 1999 19:37:08 +0200
> X-MSMail-Priority: Normal
> X-Priority: 3
> X-Mailer: Microsoft Internet Mail 4.70.1155
> MIME-Version: 1.0
> Content-Type: text/plain; charset=ISO-8859-1
> Content-Transfer-Encoding: 7bit
------
>
> première ligne
>
------ Fin de votre message
Dans Received, on voit en fait le cheminement que suit le mail envoyé du poste windows, va sur machine puis par chez votre fai (sur obelix), on voit donc le nom de votre domaine, les noms du poste Linux et du poste de votre réseau privé d'où a été envoyé l'email, et meme l'adresse IP que vous lui avez attribué !
Le problème est qu'on ne peut dans les paramètres de config de sendmail, virer les champs Received, FEATURE(masquerade_enveloppe) ne fait que masquer les adresses emails.
Pour corriger ça, on va d'abord rajouter define(`confDOMAIN_NAME',`ppp.fai.fr')
qui
permet de redéfinir la manière dont notre serveur Linux va
se présenter au serveur
SMTP du provider, en clair il va changer toutes les occurences de machine.domaine.fr
par
ppp.fai.fr
dans
les champs Received. Pourquoi mettre ppp.fai.fr
et ne pas mettre
tout simplement fai.fr, parce que dans ce cas on ne pourra pas envoyer
de mail à des utilisateurs du domaine fai.fr, sendmail croit
que ce sont des utilisateurs locaux ! Avec ppp.fai.fr pas de problème,
en toute rigueur on pourrait mettre ici le nom attribué lors d'une
connexion (du style ppp18-brest.fai.fr qu'on peut voir en tapant
ifconfig)
pour cela reporter vous au paragraphe
attribution
d'adresse dynamique.
Reste le problème des emails partant de postes sous Windows,
où apparait le nom et l'adresse IP, on va carrément redéfinir
le champs Received:
define(`confRECEIVED_HEADER', `from fai.fr
by fai.fr ($v/$Z)$?r
with $r$. id $i$?u
for $u; $|;
$.$b')
Ce qui nous donne pour un mail envoyé d'un PC sous windows:
------ Le serveur echo du domaine cnam.fr
------ a recu votre message le dim 22 aoû 12:00:10 MET DST
1999
------ Ci-dessous les en-tetes et le corps de votre message
> From toto.nom@fai.fr Sun Aug 22 12:00:09 1999
> Received: from obelix.fai.fr (obelix.fai.fr [212.205.98.21])
> by fermi.cnam.fr
(8.8.8/jpm-301097) with ESMTP id MAA19703
> for <echo@cnam.fr>;
Sun, 22 Aug 1999 12:00:09 +0200 (MET DST)
> Return-Path: <toto.nom@fai.fr>
> Received: from fai.fr (IDENT:root@ppptc19.fai.fr [210.205.98.23])
> by obelix.fai.fr (8.9.1/8.9.1/R&D&B-990119)
with ESMTP id LAA13384
> for <echo@cnam.fr>; Sun,
22 Aug 1999 11:59:36 +0200
> Received: from fai.fr
> by fai.fr (8.9.3/8.9.3/Commentaire
quelconque qui apparaitre dans l'entete - 15/08/99) with ESMTP id MAA01804
> for <echo@cnam.fr>;
Sun, 22 Aug 1999 12:00:42 +0200
> Message-Id: <199908221000.MAA01804@machine.domaine.fr>
> From: "Toto Nom" <toto.nom@fai.fr>
> To: <echo@cnam.fr>
> Subject: echop
> Date: Sun, 22 Aug 1999 11:58:16 +0200
> X-MSMail-Priority: Normal
> X-Priority: 3
> X-Mailer: Microsoft Internet Mail 4.70.1155
> MIME-Version: 1.0
> Content-Type: text/plain; charset=ISO-8859-1
> Content-Transfer-Encoding: 7bit
------
>
> Windows
>
------ Fin de votre message
On voit qu'il reste encore des traces du domaine dans l'identité du message. Voici l'email qui part de notre serveur Linux.
------ Le serveur echo du domaine cnam.fr
------ a recu votre message le dim 22 aoû 12:13:41 MET DST
1999
------ Ci-dessous les en-tetes et le corps de votre message
> From toto.nom@fai.fr Sun Aug 22 12:13:41 1999
> Received: from obelix.fai.fr (obelix.fai.fr [212.205.98.21])
> by fermi.cnam.fr
(8.8.8/jpm-301097) with ESMTP id MAA21292
> for <echo@cnam.fr>;
Sun, 22 Aug 1999 12:13:40 +0200 (MET DST)
> From: toto.nom@fai.fr
> Return-Path: <toto.nom@fai.fr>
> Received: from fai.fr (IDENT:root@ppptc19.fai.fr [210.205.98.23])
> by obelix.fai.fr (8.9.1/8.9.1/R&D&B-990119)
with ESMTP id MAA13627
> for <echo@cnam.fr>; Sun,
22 Aug 1999 12:13:09 +0200
> Received: from fai.fr
> by fai.fr (8.9.3/8.9.3/Commentaire
quelconque qui apparaitre dans l'entete - 15/08/99) id MAA01883
> for echo@cnam.fr;
Sun, 22 Aug 1999 12:06:10 +0200
> Date: Sun, 22 Aug 1999 12:06:10 +0200
> Message-Id: <199908221006.MAA01883@fai.fr>
> To: echo@cnam.fr
------
>
> Subject: test local
>
> première ligne
> de Machine
>
------ Fin de votre message
Pour régler le problème du Message-Id, on écrira un petit script :
#!/bin/bash
cd /var/spool/mqueue
for nom_mail in `ls | grep df*`
do
sed "s/machine.domaine.fr/fai.fr/g"
$nom_mail > /tmp/mail.tmp
cp /tmp/mail.tmp $nom_mail
done
Qu'on appelera avant sendmail -q et qui permettra de changer le Message-Id.
Voilà en final la tête mon mail envoyé de mon poste linux tel que l'a renvoyé le serveur écho du cnam:
------ Le serveur echo du domaine cnam.fr
------ a recu votre message le sam 20 nov 20:05:47 MET 1999
------ Ci-dessous les en-tetes et le corps de votre message
> From olivier.hoarau@fnac.net Sat Nov 20 20:05:46 1999
> Received: from mailhub2.isdnet.net (mailhub2.isdnet.net [195.154.209.22])
> by fermi.cnam.fr
(8.8.8/jpm-301097) with ESMTP id UAA22148
> for <echo@cnam.fr>;
Sat, 20 Nov 1999 20:05:46 +0100 (MET)
> Return-Path: <olivier.hoarau@fnac.net>
> Received: from fnac.net ([194.149.178.159])
> by mailhub2.isdnet.net (8.9.3/8.9.3)
with ESMTP id UAA38733
> for <echo@cnam.fr>; Sat,
20 Nov 1999 20:05:45 +0100 (CET)
> Received: from fnac.net
> by fnac.net (8.9.3/8.9.3/OH-990808)
with ESMTP id UAA01260
> for <echo@cnam.fr>;
Sat, 20 Nov 1999 20:05:12 +0100
> Sender: olivier.hoarau@fnac.net
> Message-ID: <3836F0D6.3CAD0A0E@fnac.net>
> Date: Sat, 20 Nov 1999 19:04:55 +0000
> From: Olivier Hoarau <olivier.hoarau@fnac.net>
> Organization: FNAC.net
> X-Mailer: Mozilla 4.61 [en] (X11; I; Linux 2.2.13-7mdk i586)
> X-Accept-Language: fr, en
> MIME-Version: 1.0
> To: echo@cnam.fr
> Subject: de tavel4
> Content-Type: text/plain; charset=us-ascii
> Content-Transfer-Encoding: 7bit
Texte
------ Fin de votre message
Voilà le message renvoyé d'un mail partant d'un poste client du réseau:
------ Le serveur echo du domaine cnam.fr
------ a recu votre message le sam 20 nov 20:05:45 MET 1999
------ Ci-dessous les en-tetes et le corps de votre message
> From olivier.hoarau@fnac.net Sat Nov 20 20:05:45 1999
> Received: from mailhub2.isdnet.net (mailhub2.isdnet.net [195.154.209.22])
> by fermi.cnam.fr
(8.8.8/jpm-301097) with ESMTP id UAA13330
> for <echo@cnam.fr>;
Sat, 20 Nov 1999 20:05:45 +0100 (MET)
> Return-Path: <olivier.hoarau@fnac.net>
> Received: from fnac.net ([194.149.178.159])
> by mailhub2.isdnet.net (8.9.3/8.9.3)
with ESMTP id UAA38728
> for <echo@cnam.fr>; Sat,
20 Nov 1999 20:05:43 +0100 (CET)
> Received: from fnac.net
> by fnac.net (8.9.3/8.9.3/OH-990808)
with ESMTP id UAA01245
> for <echo@cnam.fr>;
Sat, 20 Nov 1999 20:03:36 +0100
> Message-ID: <3836EFDC.10E8F47F@fnac.net>
> Date: Sat, 20 Nov 1999 20:00:44 +0100
> From: Olivier Hoarau <olivier.hoarau@fnac.net>
> Organization: FNAC net
> X-Mailer: Mozilla 4.61 [en] (Win95; I)
> X-Accept-Language: fr-FR,en
> MIME-Version: 1.0
> To: echo@cnam.fr
> Subject: de shuttle 4
> Content-Type: text/plain; charset=us-ascii
> Content-Transfer-Encoding: 7bit
Texte
------ Fin de votre message
Vous noterez que nulle part on voit la mention de mon domaine privé
et encore moins de mes adresses IP privées
![]() |