Configuration Sendmail

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 19

~1~

~2~

Table des matières


1. Historique du document...................................................................................................................... 3
2. Introduction ......................................................................................................................................... 3
3. Pourquoi sendmail............................................................................................................................... 4
4. Avant de commencer .......................................................................................................................... 4
5. Configuration de sendmail .................................................................................................................. 4
5.1 Fichiers de configuration ............................................................................................................... 4
5.2 Le fichier config.mc ....................................................................................................................... 5
5.3 Quelques explications ................................................................................................................... 5
6. Réécriture des adresses emails locals ................................................................................................. 7
7. Le "hack de Pablo" ............................................................................................................................... 7
8. Vérification de fichiers système .......................................................................................................... 8
8.1 Le fichier /etc/nsswitch.conf ....................................................................................................... 8
8.2 Le fichier /etc/hosts ...................................................................................................................... 8
8.3 Le fichier /etc/aliases ................................................................................................................... 9
8.4 Contruction de /etc/sendmail.cf .................................................................................................. 9
9. Rechargement de sendmail ................................................................................................................. 9
10. Principe de fonctionnement ............................................................................................................ 10
11. Masquage de domaine .................................................................................................................... 10
11.1 Principes ................................................................................................................................... 10
11.2 Pour corriger tout ça ............................................................................................................... 12
12. Attribution d'adresse dynamique.................................................................................................... 14
12.1 Principe..................................................................................................................................... 14
12.2 Au final ..................................................................................................................................... 16
13. Problèmes éventuels ....................................................................................................................... 17
13.1 Sendmail et timeout DNS ........................................................................................................ 17
13.2 Protection anti-spam ............................................................................................................... 18
~3~

1. Historique du document

 16 janvier 2000, V1.1 rajout d'une autre méthode pour déterminer le nom d'hôte
dynamique lors d'une connexion.
 27 décembre 1999 première version 1.0.

2. Introduction

L'objet de ce document est de présenter une configuration de sendmail sur un poste linux
servant de serveur de mail sortant pour les postes clients de votre réseau privé. Cette même
machine linux est connectée de façon intermittente à Internet par PPP, ADSL ou RNIS.

La machine cible tourne sous Linux Mandrake 6.1 basé sur une Red Hat 6.1 avec un noyau
2.2.13-7mdk, mais la configuration devrait s'appliquer aussi pour d'autres UNIX. Les chemins
et noms des commandes et autres fichiers sont ceux d'une Mandrake 6.1.

On suppose que sendmail est installé sur votre machine ainsi que les fichiers de configuration
et m4, voici les packages concernés:

sendmail-8.9.3-11mdk.i586.rpm
sendmail-cf-8.9.3-11mdk.i586.rpm
m4-1.4-13mdk.i586.rpm

Le présent document porte donc sur la version 8.9.3 de sendmail. On suppose par ailleurs que
votre réseau est configuré et opérationnel et que votre connexion fonctionne.

Dans la suite des opérations, on nommera:

 FAI le Fournisseur d'Accès Internet ou provider,


 mail.fai.fr le serveur SMTP de votre FAI,
 machine le nom de votre machine linux avec pour adresse IP 192.168.13.10,
 domaine.fr le nom de domaine de votre réseau privé, machine.domaine.fr étant le
nom complet de votre machine linux,
 windows le nom d'un poste client de votre réseau privé avec pour adresse IP
192.168.26.11,
[email protected] votre email chez votre FAI, toto votre nom d'utilisateur sur votre
réseau privé,
 tata un autre utilisateur de votre réseau privé, [email protected] étant son email chez le
FAI,
 le poste serveur, le poste linux se lequel tourner sendmail. Les postes clients, les
postes de votre réseau privé,
 on dira on-line quand le poste Linux est connecté au FAI, par opposition à off-line
(non connecté).

Sauf indications contraires, toutes les manipulations décrites dans le présent document sont à
réaliser sous root.
~4~

3. Pourquoi sendmail

Sur un poste Linux vous n'êtes pas obligé d'avoir à configurer sendmail, des outils comme
Netscape disposent de leur propre mécanisme qui permette d'envoyer du courrier, alors
pourquoi s'embêter à configurer sendmail, pour la gloire ? Certains disent que tant qu'on a pas
chercher à configurer sendmail, on n'est pas un vrai administrateur système. Certes ce n'est
pas une raison suffisante, l'intérêt de configurer sendmail est de pouvoir mettre en place un
serveur de mail sortant pour votre réseau privé et ainsi relayer les courriers venants des postes
clients du réseau privé, qu'ils soient sous Windows, MacOS ou autres.

Les autres avantages de sendmail sont multiples, il fait ainsi office de barrière anti spam, et
permet la réécriture de l'entête des emails pour cacher les noms des utilisateurs locaux ainsi
que le nom du domaine privé. Pourquoi cacher son nom de domaine privé ? Si votre email
arrive chez votre FAI ou ailleurs sur internet, il peut être irrémédiablement rejeté sous
prétexte de contenir un nom de domaine non reconnu, c'est une protection anti-spam. Qui plus
est dans l'hypothèse très improbable ou l'email arrive au destinataire, celui-ci ne pourra y
répondre car votre email est inconnu sur le net.

4. Avant de commencer

Avant de commencer je ne puis que vous conseillez la lecture du document d'Eric Jacoboni
"lire et envoyer du courrier off-line sur sa machine" que vous trouverez sur http://www.linux-
france.org/article/mail/sendmail. Ce document est une excellente introduction à sendmail, il
présente une configuration simple, dans le cadre d'un poste isolé connecté de façon
intermittente à Internet. Ce présent document n'a pas la prétention de se substituer au
document d'Eric Jacoboni, il se veut un complément, vous trouverez ainsi de nombreuses
références au document d'Eric.

Si vous avez déjà une configuration type Jacoboni, voilà ce que la présente configuration peut
vous apporter en plus :

 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,
 le serveur linux peut relayer le courrier des postes du domaine privé,
 si un utilisateur local envoie un mail à [email protected] (qui je le rappelle est aussi un
utilisateur local), le mail ne part pas chez le FAI avant de revenir sur le poste linux, il
est acheminé dirctement en local. Avec la config d'Eric le mail va d'abord chez le FAI.

5. Configuration de sendmail

5.1 Fichiers de configuration


Avec la version 8.9.3 de sendmail, nous avons deux niveaux de configuration, le premier avec
le fichier config.mc, qui est le fichier par lequel un utilisateur va configurer sendmail, et
ensuite /etc/sendmail.cf qui est le fichier de configuration lu effectivement par sendmail qui
est généré à partir de config.mc par le préprocesseur m4. Le fichier config.mc est rédigé dans
~5~

un format sensé être facile à comprendre, alors que sendmail.cf est écrit dans un langage
hautement "abscon". C'est ce dernier fichier qui était directement modifié avec les anciennes
versions de sendmail.

5.2 Le fichier config.mc


le fichier de configuration de sendmail se trouve sous /usr/lib/sendmail-cf/cf, vous y
trouverez un certain nombre de fichier de configuration type avec le préfixe .mc.

Le nom du fichier n'a pas d'importance, vous pouvez l'appeler simplement config.mc. Voici
son contenu:

include(`../m4/cf.m4')dnl
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(`confCF_VERSION', `Commentaire quelconque qui apparaitre dans
l'entete - 25/12/99')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

5.3 Quelques explications


Sont expliqués en détail, uniquement les lignes supplémentaires par rapport à la doc d'Eric
Jacoboni.
~6~

FEATURE(relay_entire_domain)

Permet à sendmail d'accepter les mails venants des postes appartenant à votre réseau privé,
sans cette ligne tre à l'envoie d'email, vous auriez sur les PC sous windows un message
d'erreur du style "Relaying denied".

FEATURE(accept_unresolvable_domains)

Sans ce feature si vous êtes off-line, vous n'arriverez pas à d'envoyer un mail d'un poste client,
par contre dès qu'on passe on-line ce paramètre devient parfaitement inutile. Cependant je
vous conseille de garder ce feature pour pouvoir stocker tous les mails dans la file d'attente de
sendmail.

Kpirateo hash -o /etc/mail/pirateo


LOCAL_RULE_0
R$+ < @ $+ > $* $: < $(pirateo $1 @ $2 $: $) > $1 < @ $2 >
$3
R< $+ > $+ < @ $+ > $* $@ $>97 $1
R<> $+ < @ $+ > $* $: $1 < @ $2 > $3

Permettent que le courrier destiné à [email protected] (utilisateur local toto) ne parte chez le
FAI pour finalement revenir vers toto. ce cas de figure se produit quand on répond à un
utilisateur local, son email ayant été récrit par les genericstable. 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 d'UUCP de Denis plus précisément au chapitre 7 de la
documentation UUCP de Denis sur http://www.linux-france.org/article/connex/UUCP/denis-
uucp.

define(`confDOMAIN_NAME',...)

Ce define a pour but de faire disparaître le nom de votre domaine privé dans l'entête de vos
emais partants sur internet (Champ Received et Message-Id). Reportez vous au chapitre
masquage du domaine pour plus d'informations.

define(`confRECEIVED_HEADER',...)

Ce define contribue aussi à masquer le nom de domaine privé. Reportez vous au paragraphe
masquage du domaine.


 Permet à sendmail d'accepter les mails venants des postes appartenant à votre réseau
privé, sans cette ligne tre à l'envoie d'email, vous auriez sur les PC sous windows un
message d'erreur du style "Relaying denied".
 FEATURE(accept_unresolvable_domains)

 Sans ce feature si vous êtes off-line, vous n'arriverez pas à d'envoyer un mail d'un
poste client, par contre dès qu'on passe on-line ce paramètre devient parfaitement
~7~

inutile. Cependant je vous conseille de garder ce feature pour pouvoir stocker tous les
mails dans la file d'attente de sendmail.
 Kpirateo hash -o /etc/mail/pirateo
 LOCAL_RULE_0
 R$+ < @ $+ > $* $: < $(pirateo $1 @ $2 $: $) > $1 < @
$2 > $3
 R< $+ > $+ < @ $+ > $* $@ $>97 $1
 R<> $+ < @ $+ > $* $: $1 < @ $2 > $3

 Permettent que le courrier destiné à [email protected] (utilisateur local toto) ne parte
chez le FAI pour finalement revenir vers toto. ce cas de figure se produit quand on
répond à un utilisateur local, son email ayant été récrit par les genericstable. 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 d'UUCP de Denis plus
précisément au chapitre 7 de la documentation UUCP de Denis sur http://www.linux-
france.org/article/connex/UUCP/denis-uucp.
 define(`confDOMAIN_NAME',...)

 Ce define a pour but de faire disparaître le nom de votre domaine privé dans l'entête de
vos emais partants sur internet (Champ Received et Message-Id). Reportez vous au
chapitre masquage du domaine pour plus d'informations.
 define(`confRECEIVED_HEADER',...)

 Ce define contribue aussi à masquer le nom de domaine privé. Reportez vous au
paragraphe masquage du domaine.

6. Réécriture des adresses emails locals

Les genericstables permettent de réécrire les emails locaux pour qu'ils correspondent aux
emails attribués par le FAI. Pour cela vous devez créer un fichier /etc/genericstable ,
contenant les lignes:

toto: [email protected]
tata: [email protected]

ATTENTION: il faut mettre une tabulation entre le : et l'adresse.

Pour faire prendre en compte la modif de ce fichier et pour le générer au format qui va bien, il
faut taper ensuite:

/usr/sbin/sendmail -bi -oA/etc/genericstable

7. Le "hack de Pablo"

Vous devez créer un fichier /etc/mail/pirateo, dans lequel vous mettrez, la liste des adresses
email attribués par le FAI et les noms locaux correspondants comme ceci:

[email protected] toto
~8~

[email protected] tata

Ce fichier produit l'effet inverse du fichier genericstable, il retransforme l'email si celui


apparaît dans un champ To ou Cc, pour éviter que le mail parte d'abord chez le FAI.

Ensuite pour générer le fichier au format qui va bien on tape :

makemap hash /etc/mail/pirateo < /etc/mail/pirateo

8. Vérification de fichiers système

8.1 Le fichier /etc/nsswitch.conf


Vous devez modifier votre fichier /etc/nsswitch.conf pour qu'il ressemble à ça:

# bla bla
# un tas de commentaires
#
passwd: files
shadow: files
group: files

hosts: files dns

services: files
networks: files
protocols: files
rpc: files
ethers: files
netmasks: files
bootparams: files

netgroup: files

publickey: files

automount: files
aliases: files

8.2 Le fichier /etc/hosts


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 machine

Je vous conseiller de ne pas le faire et de laisser la ligne par défaut, en l'occurence:

127.0.0.1 localhost localhost.localdomain


~9~

Pourquoi 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. Et cela
même si vous avez définit votre machine avec l'adresse qui va bien c'est à dire 192.168.13.10
machine machine.domaine.fr en plus de la ligne décrite plus haut.

Ne vous préoccupez pas des remarques alarmistes de Jacoboni, le fonctionnement de sendmail


sera identique.

Par contre n'oubliez pas de rajouter dans le fichier les postes de votre réseau privé avec le
FQDN (Fully Qualified Domain Name, nom complet), ça nous donne donc ça:

127.0.0.1 localhost localhost.localdomain


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. Ceci justifie donc les
remarques d'Eric Jacoboni.

8.3 Le fichier /etc/aliases


Ce fichier doit contenir au moins les deux lignes suivantes:

MAILER-DAEMON: postmaster
postmaster: root

8.4 Contruction de /etc/sendmail.cf


Pour rebatir le fichier de configuration de sendmail, on tape la commande:

m4 /usr/lib/sendmail-cf/cf/config.mc > /etc/sendmail.cf

Changer (éventuellement) les droits de ce fichier:

chmod 600 /etc/sendmail.cf

9. Rechargement de sendmail

Ca y est c'est fini, pour obliger sendmail à relire son fichier de configuration, il faut d'abord
préalablement tuer sendmail s'il tourne, pour cela faire:

kill 'head -1 /var/run/sendmail.pid'


/usr/sbin/sendmail -bd -os
~ 10 ~

Vous pouvez éventuellement rajouter -X /var/log/sendmail.log pour avoir le fichier de log


pour débuguer. 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: Sur une Mandrake 6.1 en tapant sendmail -bd -os on a parfois cette erreur

[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 (au niveau de
la ligne 51), pour que tout rentre dans l'ordre, tapez alors à nouveau la commande sendmail -
bd -os.

10. Principe de fonctionnement

Tous les emails partants se retrouvent en attente dans le répertoire /var/spool/mqueue, pour
les envoyer, une fois connecté vous devez tapez:

/usr/sbin/sendmail -q -v

L'option -v étant l'option "verbeuse".

Pour visualiser les messages dans la file d'attente, vous pouvez tapez:

mailq

Quand vous envoyez un courrier en local (de toto vers tata), le courrier ne va pas transiter par
mqueue, il va se retrouver directement dans la boîte aux lettres du destinataire sans avoir à
taper sendmail -q. En cas d'envoi vers un destinataire extérieur à votre domaine, le courrier
va se retrouver dans le répertoire d'attente de sendmail.

11. Masquage de domaine

11.1 Principes
~ 11 ~

Si on se contente d'appliquer la doc de Jacoboni brut de forme, on est confronté à un gros


problème qui est mis en évidence à la réception d'email de réflecteurs comme
mailto:[email protected] . Ces réflecteurs se contentent de vous renvoyer votre email, y compris
et surtout avec l'entête complète du mail d'origine, on peut y voir des informations indiscrètes
que vous ne voudriez pas forcément voir figurer.

Admettons que l'utilisateur toto envoie un mail en tapant la commande:

mail -v echo@cnam < mail.test

Avec mail.test un fichier texte contentant:

Subject: test
première ligne

Voici maintenant le mail retourné par le serveur écho du CNAM:

------ 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 [email protected] 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 <[email protected]>; Tue, 10 Aug 1999 22:25:27 +0200 (MET DST)
> From: [email protected]
> Return-Path: <[email protected]>
> Received: from machine.domaine.fr (IDENT:[email protected]
[210.205.98.22])
> by obelix.fai.fr (8.9.1/8.9.1/R&D&B-990119) with ESMTP id WAA26056
> for <[email protected]>; 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
apparaitra dans l'entete
- 15/08/99) id WAA00754
> for [email protected]; Tue, 10 Aug 1999 22:25:34 +0200
> Date: Tue, 10 Aug 1999 22:25:34 +0200
> Message-Id: <[email protected]>
> To: [email protected]
> Subject: test

------
>
> première ligne
>
------
Fin de votre message

Quelques commentaires:

On voit que l'adresse de l'utilisateur toto a bien été transformé en [email protected]. Par
ailleurs obelix.fai.fr (IP= 210.205.98.21) est le nom de la machine chez votre FAI qui a
~ 12 ~

"routé" votre email, ppptc22.fai.fr (IP=210.205.98.22) étant votre identité officielle sur le net
au moment de votre connexion.

Par contre vous voyez que d'une part le commentaire que vous avez défini dans le fichier de
config apparaît dans l'email, ce qui n'est pas vraiment génant, mais on y voit aussi le nom de
votre domaine privé dans les champs Received et Message-Id. Certains serveurs sur Internet
pourraient rejeter vos emails sous pretexte de contenir un nom de domaine inconnu.

Voyons maintenant un email envoyé d'un de vos postes client et renvoyé par un réflecteur.

------ 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 [email protected] 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 <[email protected]>; Tue, 10 Aug 1999 19:47:06 +0200 (MET DST)
> Return-Path: <[email protected]>
> Received: from machine.domaine.fr (IDENT:[email protected]
[210.205.98.23])
> by obelix.fai.fr (8.9.1/8.9.1/R&D&B-990119) with ESMTP id TAA23230
> for <[email protected]>; 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 <[email protected]>; Tue, 10 Aug 1999 19:38:54 +0200
> Message-Id: <[email protected]>
> From: "Toto Nom" <[email protected]>
> To: <[email protected]>
> 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 client, il va
d'abord sur machine puis part chez le FAI (sur obelix). On voit donc le nom de votre
domaine, le nom du poste Linux et du poste client d'où a été envoyé l'email, et même l'adresse
IP que vous lui avez attribué !

11.2 Pour corriger tout ça


Le problème est qu'on ne peut dans les paramètres de configuration de sendmail, supprimer
les champs Received, qui plus est FEATURE(masquerade_enveloppe) ne fait que masquer
les adresses emails.
~ 13 ~

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
FAI, 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.frqu'on peut voir en tapant ifconfig), pour cela reportez vous au chapitre 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 champ Received:

define(`confRECEIVED_HEADER', `from fai.fr


by fai.fr ($v/$Z)$?r with $r$.
id $i$?u
for $u; $|;
$.$b')

Après correction voici la réponse d'un mail envoyé d'un poste client renvoyé par le réflecteur:

------ 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 [email protected] 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 <[email protected]>; Sun, 22 Aug 1999 12:00:09 +0200 (MET DST)
> Return-Path: <[email protected]>
> Received: from fai.fr (IDENT:[email protected] [210.205.98.23])
> by obelix.fai.fr (8.9.1/8.9.1/R&D&B-990119) with ESMTP id LAA13384
> for <[email protected]>; 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 <[email protected]>; Sun, 22 Aug 1999 12:00:42 +0200
> Message-Id: <[email protected]>
> From: "Toto Nom" <[email protected]>
> To: <[email protected]>
> 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


~ 14 ~

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 [email protected] 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 <[email protected]>; Sun, 22 Aug 1999 12:13:40 +0200 (MET DST)
> From: [email protected]
> Return-Path: <[email protected]>
> Received: from fai.fr (IDENT:[email protected] [210.205.98.23])
> by obelix.fai.fr (8.9.1/8.9.1/R&D&B-990119) with ESMTP id MAA13627
> for <[email protected]>; 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 [email protected]; Sun, 22 Aug 1999 12:06:10 +0200
> Date: Sun, 22 Aug 1999 12:06:10 +0200
> Message-Id: <[email protected]>
> To: [email protected]

------

> 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.

12. Attribution d'adresse dynamique

12.1 Principe
Vous pouvez redéfinir le nom de votre machine, tel qu'il apparaîtra dans les headers, pour
qu'il corresponde exactement avec le nom que vous a attribué le FAI, pendant une connexion
et ceci même si ce nom change à chaque connexion. Je me sers d'un truc trouvé dans le guide
du rootard que j'ai très légèrement adapté ( http://www.linux-france.org/article/grl au chapitre
~ 15 ~

13.10 pour être précis). Le truc consiste à chaque connexion de lancer un petit programme
gethost qui va déterminer le nom attribué à notre poste linux, on modifie dans la foulée le
config.mc en conséquence, on regénère sendmail.cf, on kill sendmail et on le relance dans la
foulée.

Pour cela on créera un programme gethost.c dont voici le contenu:

#include <stdio.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <string.h>
int main(argc,argv)
char argc;
char *argv[];
{
struct hostent *host;
struct in_addr ia;
if (argc < 2) {
fprintf(stderr,"Usage: %s adresse_IP_locale \ 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);
}

On le compile tout simplement en tapant:

gcc gethost.c -o gethost

En tant que root, copiez l'exécutable gethost sous /usr/local/sbin (ou /usr/bin c'est vous qui
voyiez...). Maintenant on va modifier /etc/ppp/ip-up qui est lancé à chaque début de
connexion pour reconstruire le fichier de config de sendmail en fonction du nom déterminé
par gethost et relancer sendmail.

#!/bin/bash
# $4 correspond à l'adresse IP attribuée lors d'une connexion
ADRESSE=$4
# détermination du nom connaissant l'adresse IP
HOST=`/usr/local/sbin/gethost $ADRESSE`
# on modifie le fichier de config pour avoir le nom qui va bien (à noter
que config.mc n'est jamais touché)
if [ -n "$HOST" ] ; then
sed s/ppp.fai.fr/$HOST/ /usr/lib/sendmail-cf/cf/config.mc >
/usr/lib/sendmail-cf/cf/config.current.mc
# on regénère sendmail.cf
cd /usr/lib/sendmail-cf/cf
m4 config.current.mc > /etc/sendmail.cf
~ 16 ~

# on tue sendmail
kill -1 `head -1 /var/run/sendmail.pid`
# on relance sendmail
/usr/sbin/sendmail -bd -os
fi
exit 0

Autre solution beaucoup plus simple, si vous voulez pas vous embêter avec un programme C,
remplacer la ligne HOST par:

HOST=`(nslookup $ADRESSE|grep Name:|sed 's/Name:*//')`

A la prochaine connexion, vous aurez donc un sendmail avec une config tip-top.

12.2 Au final
Au final, en prenant en compte la modification d'adresse dynamique, Voici un mail envoyé de
mon poste linux:

------ Le serveur echo du domaine cnam.fr


------ a recu votre message le mer 1 déc 18:08:00 MET 1999

------ Ci-dessous les en-tetes et le corps de votre message

> From [email protected] Wed Dec 1 18:07:59 1999


> Received: from mailhub1.isdnet.net (mailhub1.isdnet.net [195.154.209.21])
> by fermi.cnam.fr (8.8.8/jpm-301097) with ESMTP id SAA27323
> for <[email protected]>; Wed, 1 Dec 1999 18:07:59 +0100 (MET)
> Return-Path: <[email protected]>
> Received: from ppp7-brest.isdnet.net (ppp7-brest.isdnet.net
[194.149.178.134])
> by mailhub1.isdnet.net (8.9.3/8.9.3) with ESMTP id SAA18750
> for <[email protected]>; Wed, 1 Dec 1999 18:07:57 +0100 (CET)
> Received: from fnac.net
> by fnac.net (8.9.3/8.9.3/Olivier Hoarau-992911) with ESMTP id
SAA00908
> for <[email protected]>; Wed, 1 Dec 1999 18:08:06 +0100
> Sender: [email protected]
> Message-ID: <[email protected]>
> Date: Wed, 01 Dec 1999 17:07:57 +0000
> From: Olivier Hoarau <[email protected]>
> 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: [email protected]
> Subject: de tavel netscape
> Content-Type: multipart/alternative;
> boundary="------------510B10AEB1791042330882C7"

------

>
mon texte

------ Fin de votre message


~ 17 ~

Envoyé d'un poste client sous Windows:

------ Le serveur echo du domaine cnam.fr


------ a recu votre message le mer 1 déc 18:08:00 MET 1999

------ Ci-dessous les en-tetes et le corps de votre message

> From [email protected] Wed Dec 1 18:07:58 1999


> Received: from mailhub1.isdnet.net (mailhub1.isdnet.net [195.154.209.21])
> by fermi.cnam.fr (8.8.8/jpm-301097) with ESMTP id SAA27306
> for <[email protected]>; Wed, 1 Dec 1999 18:07:58 +0100 (MET)
> Return-Path: <[email protected]>
> Received: from ppp7-brest.isdnet.net (ppp7-brest.isdnet.net
[194.149.178.134])
> by mailhub1.isdnet.net (8.9.3/8.9.3) with ESMTP id SAA18743
> for <[email protected]>; Wed, 1 Dec 1999 18:07:56 +0100 (CET)
> Received: from fnac.net
> by fnac.net (8.9.3/8.9.3/Olivier Hoarau-992911) with ESMTP id
SAA00910
> for <[email protected]>; Wed, 1 Dec 1999 18:08:31 +0100
> Message-ID: <[email protected]>
> Date: Wed, 01 Dec 1999 18:05:20 +0100
> From: Olivier Hoarau <[email protected]>
> Organization: FNAC net
> X-Mailer: Mozilla 4.61 [en] (Win95; I)
> X-Accept-Language: fr-FR,en
> MIME-Version: 1.0
> To: [email protected]
> Subject: shuttle
> 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 mes
adresses IP privées. A noter aussi que je n'ai pas eu à lancer mon script pour corriger le champ
Message-Id. J'avais le problème avec la précédente version de la Mandrake mais plus avec
celle-ci mais en ayant la même version de sendmail, va comprendre ! Je laissse néanmoins le
script au cas où.

NOTE: A noter que de temps à autre, il n'est pas possible de déterminer le nom d'hôte
dynamique de la machine attribué lors de la connexion, et cela quelque soit la manière utilisée
pour le faire (avec gethost ou nslookup). C'est pour ça que dans le script ip-up vous trouvez
un test sur la valeur de HOST (vide ou non vide).

13. Problèmes éventuels

13.1 Sendmail et timeout DNS


~ 18 ~

Si avec Microsoft Internet Mail, il est impossible d'envoyer des mails d'un poste Windows
vers le serveur Linux quand celui-ci est offline, avec l'erreur suivante dans les fichiers de log:

00762 >>> 220 machine.domaine.fr ESMTP Sendmail 8.9.3/8.9.3/Commentaire


quelconque qui apparaitra dans l'entete - 15/08/99; Sat, 21 Aug 1999
09:32:54 +0200
00762 <<< EHLO windows
00762 >>> 250-machine.domaine.fr Hello windows.domaine.fr [192.168.13.11],
pleased to meet you
00762 >>> 250-EXPN
00762 >>> 250-VERB
00762 >>> 250-8BITMIME
00762 >>> 250-SIZE
00762 >>> 250-DSN
00762 >>> 250-ONEX
00762 >>> 250-ETRN
00762 >>> 250-XUSR
00762 >>> 250 HELP
00762 <<< RSET
00762 >>> 250 Reset state
00762 <<< MAIL FROM:<[email protected]>
00763 >>> 250 <[email protected]>... Sender ok
00763 <<< RCPT TO:<[email protected]>
00763 >>> 250 <[email protected]>... Recipient ok
00763 <<< [EOF]
00763 >>> 421 machine.domaine.fr Lost input channel from windows.domaine.fr
[192.168.13.11]

Et que par contre il n'y a aucun problème quand le serveur est on-line. C'est que vous avez un
problème de DNS. A noter que le problème est similaire avec Outlook Express et d'une
manière générale avec les outils de mail de Microsoft .

Si avec Netscape l'envoi de mail en mode off-line vers la file d'attente (répertoire mqueue)
prend au moins 80s autant dire une éternité, que ce soit d'un poste client ou du poste serveur.
C'est que vous avez aussi un problème de DNS.

Pour résoudre ça, il faut installer un serveur DNS sur sa machine.

13.2 Protection anti-spam


De temps à autre en récupérant le courrier, vous pouvez avoir le message suivant:

fetchmail: reading message 31 of 38 (1725 octets) .fetchmail: SMTP error:


553
<frombase64to8bitbymailhub1.isdnet.netidNAA43439>... Domain name required

Certains de vos mails entrants sont tout bonnement rejetés, en jetant un coup d'oeil dans
/var/log/maillog et en activant l'option de débug de sendmail, on se rend compte que ce sont
les emails avec des noms de domaines non reconnu par le DNS du FAI qui sont rejetés, en
clair c'est une protection par défaut anti-spam de sendmail qu'il n'est pas judicieux de
désactiver.
~ 19 ~

Vous aimerez peut-être aussi