[ Historique du document  |  Présentation  |   Configuration de sendmailOn relance tout   |  Principe de fonctionnement  |  Masquage de domaine  |   Si vous avez un autre email que celui attribué par le Fai utilisé  |  Attribution d'adresse dynamique  |  Si vous êtes inscrits à plusieurs FAI | Sendmail et timeout DNS  |  Sendmail et la lutte anti-spam  | Sendmail et fichiers de log | sécuriser sendmail ]

Dernière modification 7.12.03

Envoyer du courrier avec sendmail (page 2)

Configuration Internet


Attribution d'adresse dynamique

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é (au chapitre 13.10 pour être précis). Le truc c'est qu'à chaque connexion on lance un petit programme gethost qui détermine le nom attribué dynamiquement, 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 j'ai créé 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/share/sendmail-cf/cf/config.mc > /usrshare/sendmail-cf/cf/config.current.mc
      # on regénère sendmail.cf
     cd  /usr/share/sendmail-cf/cf
     m4 config.current.mc > /etc/sendmail.cf

     # on tue sendmail
     kill -1 `head -1 /var/run/sendmail.pid`

    # Si nécessaire on appelle le script chg-message
    # pour que le Message-Id et le Sender soit correct
    # /usr/sbin/chg-message

     # 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. Voilà 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 olivier.hoarau@fnac.net  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 <echo@cnam.fr>; Wed, 1 Dec 1999 18:07:59 +0100 (MET)
> Return-Path: <olivier.hoarau@fnac.net>
> 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 <echo@cnam.fr>; 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 <echo@cnam.fr>; Wed, 1 Dec 1999 18:08:06 +0100
> Sender: olivier.hoarau@fnac.net
> Message-ID: <384555EA.84111C99@fnac.net>
> Date: Wed, 01 Dec 1999 17:07:57 +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 tavel netscape
> Content-Type: multipart/alternative;
>  boundary="------------510B10AEB1791042330882C7"

mon texte

------ Fin de votre message

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 olivier.hoarau@fnac.net  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 <echo@cnam.fr>; Wed, 1 Dec 1999 18:07:58 +0100 (MET)
> Return-Path: <olivier.hoarau@fnac.net>
> 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 <echo@cnam.fr>; 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 <echo@cnam.fr>; Wed, 1 Dec 1999 18:08:31 +0100
> Message-ID: <3845554F.7814F4EB@fnac.net>
> Date: Wed, 01 Dec 1999 18:05:20 +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: shuttle
> Content-Type: text/plain; chars
et=us-ascii
> Content-Transfer-Encoding: 7bit

------

texte

------ Fin de votre message

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

[Retour haut de la page]

Si vous êtes inscrits à plusieurs FAI

Si vous êtes inscrits à plusieurs FAI comme moi, le problème avec qu'avec la configuration que je viens de présenter, vous ne pouvez envoyer du courrier qu'avec un FAI. Voici donc mon script qui permet de pouvoir renconfigurer sendmail à chaque connexion conformément au FAI utilisé.
Tout se passe dans le fichier /etc/ppp/ip-up voici le mien

#!/bin/bash

# This file should not be modified -- make local changes to
# /etc/ppp/ip-up.local instead
# l'argument 4 correspond à l'adresse IP attribuée par le FAI
# l'argument 6 correspond est passé en argument de la commande pppd juste
# après ipparam, voir /etc/ppp/ppp-on dans la page connexion à plusieurs FAI
ADRESSE=$4
CONNEXION=$6

# écriture des paramètres de connexion dans un fichier de log
echo " " >> /var/log/connex
echo "Connecté à $CONNEXION adresse $4 le " >> /var/log/connex
date >> /var/log/connex

# suivant le FAI, on définit le nom du serveur SMTP, de l'identité à apparaître
# dans les champs RECEIVED et les emails chez le FAI
case $CONNEXION in
        fnac)
                SERVEUR=smtp.fnac.net
                REC=fnac.net
                MAIL_O=olivier.hoarau@fnac.net
                MAIL_V=veronique.hoarau@fnac.net
                ;;
        liberty)
                SERVEUR=mail.libertysurf.fr
                REC=libertysurf.fr
                MAIL_O=olivier.hoarau2@libertysurf.fr
                MAIL_V=veronique.hoarau@libertysurf.fr
                ;;
        free)
                SERVEUR=smtp.free.fr
                REC=free.fr
                MAIL_O=ohoarau@free.fr
                MAIL_V=veronique.hoarau@free.fr
                ;;
        waika9)
                SERVEUR=smtp.waika9.com
                REC=waika9.com
                MAIL_O=olivier.hoarau@waika9.com
                MAIL_V=veronique.hoarau@waika9.com
                ;;
        *)
        echo "Nom de connexion inconnu $CONNEXION ??"
        exit 0
                ;;
esac

# on met à jour le serveur SMTP
sed s/smtp.fnac.net/$SERVEUR/ /usr/share/sendmail-cf/cf/config.mc >/tmp/config.mc

# maintenant on met à jour la variable confDOMAIN_NAME
HOST=`/usr/local/sbin/gethost $ADRESSE`
#ou si vous préférez
#HOST=`(nslookup $ADRESSE|grep Name:|sed 's/Name:*//')`

echo "Nom de l'hote $HOST" >> /var/log/connex
if [ -n "$HOST" ] ; then
        sed s/ppp.fnac.net/$HOST/ /tmp/config.mc >/tmp/config2.mc
else
        cat /tmp/config.mc > /tmp/config2.mc
fi

# on met à jour l'identité dans les champs RECEIVED
sed s/fnac.net/$REC/g /tmp/config2.mc >/usr/share/sendmail-cf/cf/config.current.mc

# on regénère sendmail.cf
cd /usr/share/sendmail-cf/cf
m4 config.current.mc > /etc/sendmail.cf

# on réécrit /etc/mail/genericstable
# ATTENTION tabulation après le :
cat <<END_OF-DATA > /etc/mail/genericstable
olivier:        $MAIL_O
veronique:      $MAIL_V
END_OF-DATA
# et on regénère genericstable.db
/usr/sbin/sendmail -bi -oA/etc/mail/genericstable

# on réécrit pirateo
cat <<END_OF-DATA > /etc/mail/pirateo
$MAIL_O olivier
$MAIL_V veronique
END_OF-DATA
# on regénère au format qui va bien
makemap hash /etc/mail/pirateo < /etc/mail/pirateo

# on relance sendmail
kill -1 `head -1 /var/run/sendmail.pid`
/usr/sbin/sendmail -bd -os -X /var/log/sendmail.log

echo "Expédition du courrier en attente" >> /var/log/connex
/usr/sbin/sendmail -q -v >> /var/log/connex

exit 0

ATTENTION Sur une Mandrake 8.0 remplacer /usr/lib/sendmail-cfpar/usr/share/sendmail-cf

Voilà donc la tête du message renvoyé par le service écho du CNAM et expédié de mon poste linux alors que j'étais connecté avec Free :

------ Le serveur echo du domaine cnam.fr
------ a recu votre message le sam 11 déc 14:25:23 MET 1999

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

> From ohoarau@free.fr  Sat Dec 11 14:25:22 1999
> Received: from postfix1.free.fr (postfix@postfix1.free.fr [212.27.32.21])
>         by fermi.cnam.fr (8.8.8/jpm-301097)  with ESMTP id OAA30761
>         for <echo@cnam.fr>; Sat, 11 Dec 1999 14:25:22 +0100 (MET)
> From: ohoarau@free.fr
> Return-Path: <ohoarau@free.fr>
> Received: from velizy-27-60.dial.proxad.net (velizy-27-60.dial.proxad.net [213.228.27.60])
>       by postfix1.free.fr (Postfix) with ESMTP id 8AAA3281B1
>       for <echo@cnam.fr>; Sat, 11 Dec 1999 14:23:21 +0100 (MET)
> Received: from free.fr
>         by free.fr (8.9.3/8.9.3/Olivier Hoarau-991112) id OAA01011
>         for echo@cnam.fr; Sat, 11 Dec 1999 14:26:15 +0100
> Date: Sat, 11 Dec 1999 14:26:15 +0100
> Message-Id: <199912111326.OAA01011@velizy-27-60.dial.proxad.net>
> To: echo@cnam.fr

------

>
> texte
>

------ Fin de votre message

Ze problème maintenant vient de Netscape Messenger, en effet avec ce dernier quand vous êtes logués sous un compte, vous définissez une adresse email unique, pas moyen d'avoir plusieurs configurations comme sous Windows. Chez moi dans Netscape, j'ai défini olivier.hoarau@fnac.net pourtant quand je me connecte chez Free, les mails sont parfaitement relayés, il n'y a aucune vérification du nom de domaine, c'est limite inquiétant pour les histoires de spam. Vous n'avez cependant pas intérêt à mettre un email du genre mickey.mouse@disneyworld.com, car personne ne pourra vous répondre.
Voici le contenu du mail envoyé d'un de mes postes clients

------ Le serveur echo du domaine cnam.fr
------ a recu votre message le sam 11 déc 14:56:43 MET 1999

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

> From olivier.hoarau@fnac.net  Sat Dec 11 14:56:42 1999
> Received: from postfix1.free.fr (postfix@postfix1.free.fr [212.27.32.21])
>         by fermi.cnam.fr (8.8.8/jpm-301097)  with ESMTP id OAA32210
>         for <echo@cnam.fr>; Sat, 11 Dec 1999 14:56:42 +0100 (MET)
> Return-Path: <olivier.hoarau@fnac.net>
> Received: from velizy-27-60.dial.proxad.net (unknown [213.228.40.12])
>       by postfix1.free.fr (Postfix) with ESMTP id 5A2AA28318
>       for <echo@cnam.fr>; Sat, 11 Dec 1999 14:54:40 +0100 (MET)
> Received: from free.fr
>         by free.fr (8.9.3/8.9.3/Olivier Hoarau-991112) with ESMTP id OAA01077
>         for <echo@cnam.fr>; Sat, 11 Dec 1999 14:52:42 +0100
> Message-ID: <38525657.C711C933@fnac.net>
> Date: Sat, 11 Dec 1999 14:49:12 +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: shuttle
> Content-Type: text/plain; charset=us-ascii
> Content-Transfer-Encoding: 7bit

------

>
> texte
>

------ Fin de votre message

Pour en avoir le coeur net je me suis envoyé d'un poste client un mail avec en destinataire mon compte chez libertysurf avec pour email déclaré dans Netscape mickey.mouse@disneyworld.comvoici le corps du mail reçu:

Return-Path: <mickey.mouse@disneyworld.com>
Received: from free.fr
        by free.fr (8.9.3/8.9.3/Olivier Hoarau-991112) with ESMTP id PAA01225
        for <olivier@localhost>; Sat, 11 Dec 1999 15:11:42 +0100
Received: from pop.libertysurf.fr
        by localhost with POP3 (fetchmail-5.0.3)
        for olivier@localhost (single-drop); Sat, 11 Dec 1999 15:11:42 +0100 (CET)
Received: by mailhub5.libertysurf.fr (mbox login-pop-chez-libertysurf)
 (with Cubic Circle's cucipop (v1.31 1998/05/13) Sat Dec 11 15:13:54 1999)
X-From_: mickey.mouse@disneyworld.com Sat Dec 11 15:13:07 1999
Received: from postfix1.free.fr (postfix1.free.fr [212.27.32.21])
        by mailhub5.libertysurf.fr (8.9.3/8.9.3) with ESMTP id PAA74338
        for <olivier.hoarau2@libertysurf.fr>; Sat, 11 Dec 1999 15:13:07 +0100 (CET)
Received: from velizy-27-60.dial.proxad.net (unknown [213.228.40.67])
        by postfix1.free.fr (Postfix) with ESMTP id C3E7C282BC
        for <olivier.hoarau2@libertysurf.fr>; Sat, 11 Dec 1999 15:07:51 +0100 (MET)
Received: from free.fr
        by free.fr (8.9.3/8.9.3/Olivier Hoarau-991112) with ESMTP id PAA01172
        for <olivier.hoarau2@libertysurf.fr>; Sat, 11 Dec 1999 15:07:16 +0100
Message-ID: <385259C3.5860B95@disneyworld.com>
Date: Sat, 11 Dec 1999 15:03:47 +0100
From: Mickey Mouse <mickey.mouse@disneyworld.com>
Organization: Disney World
X-Mailer: Mozilla 4.61 [en] (Win95; I)
X-Accept-Language: fr-FR,en
MIME-Version: 1.0
To: olivier.hoarau2@libertysurf.fr
Subject: de shuttle
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
X-Mozilla-Status: 8001
X-Mozilla-Status2: 00000000

essai

Gloups !! ça marche... Bon heureusement c'est pas du vrai spam, on voit l'origine velizy-27-60.dial.proxad.net avec adresse IP 213.228.40.67, mais ça permet de faire quelques bonnes blagues. A noter que c'est exactement pareil avec libertysurf.

ATTENTION: Y a un problème dans mon script dans un certain cas de figure, illustration :
- je me connecte avec free, sendmail est donc configuré pour free
- je me déconnecte, sendmail est toujours configuré pour free
- j'envoie un mail dans la liste d'attente, configuré donc pour free
- je me connecte avec libertysurf, le mail part bien mais est mal formaté (avec du free.fr de partout)

Il y a donc un problème au moment du switch entre deux FAI s'il y a du mail dans la file d'attente, je suis en train de rédiger un script pour corriger cela, à suivre

[Retour haut de la page]

Sendmail et timeout DNS

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 apparaitre 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:<toto.nom@fai.fr>
00763 >>> 250 <toto.nom@fai.fr>... Sender ok
00763 <<< RCPT TO:<echo@cnam.fr>
00763 >>> 250 <echo@cnam.fr>... 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 un é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.

[Retour haut de la page]

Sendmail et la lutte anti-spam

Vous pouvcz faire appel à des serveurs qui listent les serveurs de mails indélicats (Open Relay), bien souvent les spams viennent de ces domaines. sendmail ira d'abord vérifier si le mail ne vient pas de ces domaines avant de le délivrer localement. Voilà les lignes à rajouter dans votre fichier /usr/share/sendmail-cf/cf/config.mc

FEATURE(dnsbl, `blackholes.mail-abuse.org', `Rejected - see  http://www.mail-abuse.org/rbl/')dnl
FEATURE(dnsbl, `dialups.mail-abuse.org', `Dialup - see http://www.mail-abuse.org/dul/')dnl
FEATURE(dnsbl, `relays.mail-abuse.org', `Open spam relay - see http://www.mail-abuse.org/rss/')dnl
FEATURE(`dnsbl', `list.dsbl.org')dnl
FEATURE(`dnsbl', `bl.spamcop.net')dnl
FEATURE(`dnsbl', `sbl.spamhaus.org')dnl

Vous devez ensuite reconstuire /etc/mail/sendmail.cf avec m4 et relancer sendmail.

[Retour haut de la page]

Sendmail et fichiers de log

Sous une Mandrake les fichiers de logs sont sous /var/log/mail et sont décomposés en :

errors contenant les erreurs
info  contenant les informations diverses (récupération et expédition de mails)
warnings comme son nom l'indique

Sur les versions antérieurs le fichier de log étaient /var/log/maillog ou encore /var/log/mail.log, ce fichier rassemblait les erreurs, informations et warnings.

[Retour haut de la page]

Sécuriser Sendmail

 Les commandes vrfy et expn

Par défaut on peut effectuer un telnet sur le port utilisé par sendmail et l'interroger avec des commandes, cela permet notamment de connaître les emails déclarés sur le serveur et même les emails d'une liste ou d'un alias.
Démonstration, pour la connexion

olivier@zoulou olivier]$ telnet zoulou 25
Trying 192.168.13.11...
Connected to zoulou.kervao.fr.
Escape character is '^]'.
220 rennes-1-a7-7-251.dial.proxad.net ESMTP Sendmail 8.11.3/8.11.3/Olivier Hoarau-992911;
Sat, 16 Jun 2001 09:40:20 -0400

Vous disposer de vrfy (verify) pour vérifier l'existence d'une adresse sur le serveur

vrfy olivier
250 2.1.5 olivier@rennes-1-a7-7-251.dial.proxad.net

Quand l'utilisateur est inconnu

vrfy toto
550 5.1.1 toto... User unknown

Vous disposez de la commande expn (expand) qui est identique à vrfy mais qui permet aussi de lister les personnes d'une liste et autres alias.

expn olivier
250 2.1.5 olivier@rennes-1-a7-7-251.dial.proxad.net

Pour désactiver les commandes vfry et expn vous devez rajouter au fichier de config config.mc la ligne suivante:

define(`confPRIVACY_FLAGS', `novrfy noexpn')dnl

Voilà le résultat:

vrfy olivier
252 2.5.2 Cannot VRFY user; try RCPT to attempt delivery (or try finger)

Pour info la commande finger est désactivé sur sendmail de la Mandrake 8.X

NOTE Pour sortir du telnet je n'ai pas trouvé mieux que de faire un kill du process

Modifier l'invite de sendmail

En faisant un telnet on peut obtenir des renseignements sur le serveur sendmail, pour éviter cela, on peut rajouter la ligne suivante dans le fichier de config config.mc:

define(`confSMTP_LOGIN_MSG',`Serveur de mail; $b')dnl

Voilà ce que ça donne:

telnet zoulou 25
Trying 192.168.13.11...
Connected to zoulou.kervao.fr.
Escape character is '^]'.
220 Serveur ESMTP de mail; Sun, 17 Jun 2001 09:19:37 -0400
 
[Retour page d'accueil FUNIX]