Présentation | InstallationConfiguration de sendmail | Principe de fonctionnement   | Utiliser sendmail en utilisant une connexion chiffrée par SSL/TLS   |   Sendmail et la lutte anti-spam   |  sécuriser sendmail | Quelques explications (   Masquage de domaine  |  Si vous avez un autre email que celui attribué par le Fai utilisé ) ]

Dernière modif 26 décembre 2019

Gérer le transport du courrier avec sendmail

Configuration Internet

Présentation

Des outils comme thunderbird disposent de leur propre mécanisme qui permette d'envoyer du courrier, pour faire plus "pro" on peut utiliser sendmail qui a été longtemps l'outil de référence pour gérer la réception et l'expédition de courrier dans le monde UNIX.
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... Disons que sendmail est un outil (MTA mail transport agent pour être précis) qui permet de gérer la réception et l'envoi des mails et d'y appliquer certains filtres antispam et antivirus de manière transparente et automatique. Pour résumer voici comment sendmail s'intègre dans une architecture d'envoi et de réception des mails.

Pour la réception des mails et l'installation des serveurs POP, IMAP et du webmail on consultera cette page, pour la lutte antispam et antivirus c'est par ici.

Il existe maintenant postfix qui paraît-il est plus simple et plus sécurisé, il est largement documenté sur le ne. Comme les configurations sous sendmail à l'heure actuelle sont plutôt rares, j'ai choisi d'être le dernier des mohicans.

Pour la bonne compréhension de cette page, 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.

 

[Retour haut de la page]

Installation

Tout d'abord pour installer sendmail on se contentera d'utiliser le package de la distribution.

urpmi sendmail

Si postfix cause des problèmes de conflit, forcer sa désinstallation ainsi

rpm -e --nodeps postfix

Puis retentez l'installation de sendmail. Vous aurez encore besoin des packages suivants

sendmail-cf
m4

Et éventuellement le package de documentation sendmail-doc. Sachez que vous pourrez toujours trouver la doc de référence sur le site de sendmail.

[Retour haut de la page]

Configuration

Pour une Mageia j'ai créé ensuite un fichier /usr/share/sendmail-cf/cf/config.mc qui a cette tête là :
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(`confCON_EXPENSIVE', `True')dnl
define(`confME_TOO', `True')dnl
define(`confCF_VERSION', `Commentaire quelconque')dnl
define(`confCOPY_ERRORS_TO', `Postmaster')dnl
define(`confDEF_CHAR_SET', `UTF-8')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

Le FEATURE(relay_entire_domain) permet à  sendmail d'accepter les mails venants des postes de votre réseau privé appartenant à  votre domaine privé, sans ce paramètre à  l'envoi d'email, vous auriez sur les PC sous windows un message d'erreur du style "Relaying denied".
J'ai rajouté aussi FEATURE(accept_unresolvable_domains) car sans quoi si le PC sous linux est off-line pas moyen d'envoyer un mail d'un PC sous Windows vers le PC sous Linux,  par contre dès qu'on passe on-line ce paramètre devient parfaitement inutile. Je ne comprends pas trop pourquoi mais je soupçonne une histoire de DNS la dessous.

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.

ATTENTION: à  la tabulation unique dans les trois dernières lignes.

NOTE Attention pour qu'un mail parte en local vers le compte toto vous devez taper comme email de destination toto (sans le domaine), toto@machine ou bien encore toto@machine.domaine.fr avec machine le nom de votre serveur sendmail et domaine.fr celui de votre domaine, si vous mettez toto@domaine.fr,  le mail partira vers le FAI avant de revenir sur le réseau local, même si domaine.fr est défini dans la variable GENERICSTABLE.

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/mail/genericstable , qui contient ces lignes:

toto:    toto.nom@fai.fr
tata:    tata.nom@fai.fr
Ce fichier fait la correspondance entre les adresses locales et les adresses "officielles".
Attention il faut mettre une tabulation entre le : et l'adresse.

La ligne define(`confCF_VERSION', `Commentaire quelconque') permet de rajouter un commentaire quelconque dans l'entête des mails (voir plus bas).

Pour faire prendre en compte la modif de ce fichier, il faut taper ensuite:

            sendmail -bi -oA/etc/mail/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 l'effet inverse de /etc/mail/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. Mon fichier /etc/hosts commence par la ligne suivante

127.0.0.1    localhost  localhost.localdomain
N'oubliez pas de rajouter vos 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

windows et mac étant deux machines de votre réseau privé, les adresses IP sont données à  titre indicatif. Les serveurs SMTP des FAI (ou autres) demandent maintenant généralement un mot de passe pour pouvoir y accéder dans ce cas on rajoutera dans le fichier config.mc la ligne suivante

FEATURE(`authinfo',`hash /etc/mail/auth/clientinfo.db')dnl

on créer le fichier /etc/mail/auth/clientinfo contenant

AuthInfo:smtp.fai.net "U:olivier.hoarau@funix.org" "I:olivier.hoarau@funix.org" "P:mon-password" "M:PLAIN"
AuthInfo: "U:olivier.hoarau@funix.org" "P:mon-password" "M:PLAIN"

on va créer le fichier au format qui va bien en tapant

makemap -r hash /etc/mail/auth/clientinfo.db < /etc/mail/auth/clientinfo

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. 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 rebâtir le fichier de configuration de sendmail , on tape la commande:

cd /usr/share/sendmail-cf/cf/
m4  config.mc > /etc/mail/sendmail.cf

Changer (éventuellement) les droits de ce fichier:

chmod 600 /etc/mail/sendmail.cf

Ça y est c'est fini

Pour relancer tout, il faut d'abord préalablement tuer sendmail s'il tourne, pour cela faire:

systemctl stop sendmail

Puis pour relire le fichier de configuration

sendmail -bd -os

si vous obtenez ces erreurs

554 /etc/sendmail.cf: line 51: unknown configuration line "
"

En fait il suffit d'éditer /etc/mail/sendmail.cf et de supprimer quelques lignes vides au niveau de la ligne 51, pour que tout rentre dans l'ordre, tapez à  nouveau la commande sendmail -bd -os.

Voilà  ce que donne  systemctl status sendmail

sendmail.service - Sendmail Mail Transport Agent
   Loaded: loaded (/usr/lib/systemd/system/sendmail.service; enabled)
   Active: active (running) since dim. 2015-10-04 20:59:56 CEST; 11min ago
  Process: 1665 ExecStart=/bin/sh -c exec /usr/sbin/sendmail.sendmail $DAEMONOPTIONS -bd $(if [ -n "$QUEUE" ]; then echo -q$QUEUE; fi) (code=exited, status=0/SUCCESS)
  Process: 1657 ExecStartPre=/usr/bin/make -C /etc/mail -s (code=exited, status=0/SUCCESS)
  Process: 1653 ExecStartPre=/usr/bin/newaliases (code=exited, status=0/SUCCESS)
 Main PID: 1667 (sendmail.sendma)
   CGroup: /system.slice/sendmail.service
           à½1667 sendmail: accepting connections

oct. 04 20:59:55 mana.kervao.fr sendmail[1653]: alias database /etc/aliases rebuilt by root
oct. 04 20:59:55 mana.kervao.fr newaliases[1653]: /etc/aliases: 14 aliases, longest 10 bytes, 152 bytes total
oct. 04 20:59:55 mana.kervao.fr sendmail[1653]: /etc/aliases: 14 aliases, longest 10 bytes, 152 bytes total
oct. 04 20:59:56 mana.kervao.fr sendmail[1667]: starting daemon (8.15.1): SMTP+queueing@01:00:00

[Retour haut de la page]

Principe de fonctionnement

Pour info tous les courriers partants se retrouvent en attente dans le répertoire /var/spool/mqueue, ceux en arrivée se trouvent dans /var/spool/mail avec pour nom le nom du destinataire sur la machine.

ATTENTION: /var/spool/mail doit avoir pour droit 01777 (drwxrwsr-x

sous /var/spool sous mageia voilà  ce que j'ai en tapant ll dans un shell

drwxrwx--- 2 mail mail   4096 oct.  15 04:02 clientmqueue/
drwxrwsr-x 5 root mail   4096 oct.  15 12:23 mail/
drwxr-x--- 2 root mail   4096 oct.  15 12:01 mqueue/

Pour envoyer le courrier, une fois connecté vous devez taper:

/usr/sbin/sendmail -q -v
L'option -v étant l'option "verbeuse". Pour visualiser les messages dans la file d'attente, vous pouvez taper:
mailq
Quand 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 boîte 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 automatiquement le nom de domain privé).
En cas d'envoi vers un destinataire extérieur à  votre domaine, le courrier va se retrouver dans le répertoire mqueue.
 
[Retour haut de la page]


Configurer sendmail pour utiliser une connexion chiffrée via SSL/TLS

Le problème avec la configuration présentée plus haut est que le mot de passe circule en clair entre vos clients et le serveur, on va les chiffrer en utilisant SSL/TLS. On commence d'abord à  créer une clé privée sendmail en tapant:

openssl genrsa -des3 -out /etc/ssl/private/sendmail.key 1024

voilà  le résultat

Generating RSA private key, 1024 bit long modulus
......................++++++
.......................++++++
e is 65537 (0x010001)
Enter pass phrase for /etc/ssl/private/sendmail.key:
Verifying - Enter pass phrase for /etc/ssl/private/sendmail.key:

on met les droits qui va bien

chmod 400 /etc/ssl/private/sendmail.key

on crée maintenant une clé publique sendmail

openssl rsa -in /etc/ssl/private/sendmail.key -out /etc/ssl/public/sendmail.key.pub

voilà  le résultat

Enter pass phrase for /etc/ssl/private/sendmail.key:
writing RSA key

on crée maintenant le certificat d'une durée de 3650 jours (!) sur la base de la clé publique de sendmail. Il est bien évident que ce certificat est perso et n'a aucune validité sur internet, il sera utile pour un usage strictement privé.

openssl req -new -x509 -days 3650 -key /etc/ssl/public/sendmail.key.pub -out /etc/ssl/certs/sendmail.crt

voilà  le résultat

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:FR
State or Province Name (full name) [Some-State]:Bzh
Locality Name (eg, city) []:Brest
Organization Name (eg, company) [Internet Widgits Pty Ltd]:none
Organizational Unit Name (eg, section) []:none
Common Name (e.g. server FQDN or YOUR name) []:mana
Email Address []:olivier.hoarau@funix.org

on lui donne les droits qui vont bien

chmod 400 /etc/ssl/certs/sendmail.crt

on modifie maintenant le fichier de configuration de sendmail /usr/share/sendmail/cf/config.mc et on rajoute à  la fin

define(`confCACERT_PATH', `/etc/ssl/certs')dnl
define(`confCACERT', `/etc/ssl/certs/sendmail.crt')dnl
define(`confSERVER_CERT', `/etc/ssl/certs/sendmail.crt')dnl
define(`confSERVER_KEY', `/etc/ssl/public/sendmail.key.pub')dnl
define(`confCLIENT_KEY', `/etc/ssl/certs/sendmail.crt')dnl
DAEMON_OPTIONS(`Port=smtps, Name=TLSMTA, M=s')dnl

Pour rebâtir le fichier de configuration de sendmail , on tape la commande:

cd /usr/share/sendmail-cf/cf/
m4  config.mc > /etc/mail/sendmail.cf

on arrête sendmail

systemctl stop sendmail.service

et on le relance

systemctl start sendmail.service

si vous avez un firewall sur votre serveur il faudra penser à  ouvrir le port SMTPS 465 et à  fermer le port 25.

Maintenant sur Thunderbird on configuera le serveur sortant en choisissant SSL/TLS et en mettant le port 465 comme ceci



la première fois qu'on enverra un mail il faudra accepter l'exception de sécurité (certificat non valide)




et voilà  ce qu'on peut voir dans les logs du serveur de mail

janv. 05 15:07:52 mana.kervao.fr sendmail[24577]: STARTTLS=server, relay=predator.kervao.fr [192.168.0.16], version=TLSv1.2, verify=NO, cipher=DHE-RSA-AES128-SHA, bits=128/128
janv. 05 15:07:52 mana.kervao.fr sendmail[24577]: v05E7qmr024577: from=<olivier.hoarau@funix.org>, size=591, class=0, nrcpts=1, msgid=<48077595-dd21-763b-44b1-b9d96e21aed3@funix.org>, bodytype=8BITMIME, proto=ESMTPS, daemon=TLSMTA, relay=predator.kervao.fr [192.168.0.16]
janv. 05 15:07:52 mana.kervao.fr sendmail[24577]: v05E7qmr024577: Milter add: header: X-Virus-Scanned: clamav-milter 0.98.7 at mana.kervao.fr
janv. 05 15:07:52 mana.kervao.fr sendmail[24577]: v05E7qmr024577: Milter add: header: X-Virus-Status: Clean
janv. 05 15:07:52 mana.kervao.fr spamd[22335]: spamd: connection from mana.kervao.fr [::1]:35296 to port 783, fd 5
janv. 05 15:07:52 mana.kervao.fr spamd[22335]: spamd: handle_user (userdir) unable to find user: 'veronique.hoarau'
janv. 05 15:07:52 mana.kervao.fr spamd[22335]: spamd: processing message <48077595-dd21-763b-44b1-b9d96e21aed3@funix.org> for veronique.hoarau:8
janv. 05 15:07:58 mana.kervao.fr spamd[22335]: spamd: clean message (-2.8/4.0) for veronique.hoarau:8 in 6.5 seconds, 1015 bytes.
janv. 05 15:07:58 mana.kervao.fr spamd[22335]: spamd: result: . -2 - ALL_TRUSTED,AWL,BAYES_00 scantime=6.5,size=1015,user=veronique.hoarau,uid=8,required_score=4.0,rhost=mana.kervao.fr,raddr=::1,rport=35296,mid=<48077595-dd21-763b-44b1-b9d96e21aed3@funix.org>,bayes=0.000000,autolearn=ham autolearn_force=no
janv. 05 15:07:58 mana.kervao.fr sendmail[24577]: v05E7qmr024577: Milter add: header: X-Spam-Status: No, score=-2.8 required=4.0 tests=ALL_TRUSTED,AWL,BAYES_00\n\tautolearn=ham autolearn_force=no version=3.4.1
janv. 05 15:07:58 mana.kervao.fr sendmail[24577]: v05E7qmr024577: Milter add: header: X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on mana.kervao.fr
janv. 05 15:07:58 mana.kervao.fr sendmail[24577]: v05E7qmr024577: to=<veronique.hoarau@funix.org>, delay=00:00:06, mailer=smtp8, pri=30591, stat=queued
janv. 05 15:07:58 mana.kervao.fr spamd[2197]: prefork: child states: II


dans thunderbird dans les préférences, on peut visualiser le certificat (on peut voir également celui de dovecot)


OK nous avons chiffré la connexion entre le serveur local et les clients locaux mais qu'en est-il quand les mails partent vers le serveur SMTP du fournisseur d'accès sur internet ?

A vrai dire il suffit de le tester, pour ma part je suis chez numericable, on va envoyer un mail puis forcer un envoi avec sendmail en mode verbeux comme ceci

sendmail -q -v

voilà  le résultat

Running /var/spool/mqueue/v06JL1vY031912 (sequence 1 of 1)
<veronique.hoarau@funix.org>... Connecting to smtp.numericable.fr. via smtp8...

réponse du serveur SMTP de numericable

220 smtp2.tech.numericable.fr ESMTP Postfix

mon serveur lui envoie un hello !

>>> EHLO ppp.numericable.fr

le serveur numericable lui envoie ses fonctionnalités
 
250-smtp2.tech.numericable.fr
250-PIPELINING
250-SIZE 10240000
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250 8BITMIME

la commande PIPELINING permet d'accélérer la connexion SMTP en envoyant les commandes d'un bloc et pas l'une après l'autre.
SIZE 102400000 indique que les mails sont limités à  10Mo
ETRN pour dire à  mon serveur stmp de lui envoyer tous ses messages
ENHANCEDSTATUSCODES c'est pour étoffer les codes de retour de commande
8BITMIME mode de transfert sous 8bits pour faire passer  tous les caractères de l'UTF-8
et enfin STARTTLS pour passer en mode chiffré avec TLS

mon serveur lance donc une connexion chiffrée

>>> STARTTLS

voilà  la réponse du serveur SMTP numericable

220 2.0.0 Ready to start TLS

mon serveur lui renvoie un hello

>>> EHLO ppp.numericable.fr

et le serveur SMTP de numericable renvoie à  nouveau les fonctionnalités

250-smtp2.tech.numericable.fr
250-PIPELINING
250-SIZE 10240000
250-ETRN
250-ENHANCEDSTATUSCODES
250 8BITMIME

le transfert de mail s'effectue ensuite avec un dialogue entre les 2 serveurs

>>> MAIL From:<olivier.hoarau@funix.org> SIZE=1064 BODY=7BIT
250 2.1.0 Ok
>>> RCPT To:<veronique.hoarau@funix.org>
>>> DATA
250 2.1.5 Ok
354 End data with <CR><LF>.<CR><LF>
>>> .
250 2.0.0 Ok: queued as C441561944
<veronique.hoarau@funix.org>... Sent (Ok: queued as C441561944)
Closing connection to smtp.numericable.fr.
>>> QUIT
221 2.0.0 Bye

voilà, voilà, comme quoi il n'y a rien à  configurer la connexion est chiffrée par défaut.

Sendmail et la lutte anti-spam

Vous pouvcz faire appel à des serveurs qui listent les serveursde 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 dele 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 - seehttp://www.mail-abuse.org/dul/')dnl
FEATURE(dnsbl, `relays.mail-abuse.org', `Open spam relay - seehttp://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]

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 emailsdé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 Sendmail8.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 tryfinger)

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

NOTE Pour sortir du telnet je n'ai pas trouvé mieux que defaire 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

Quelques explications

Les points ci-dessous sont à titre d'informations pour les curieux pour expliquer certaines options de configuration de sendmail.

Masquage de domaine

Si on envoie un courrier vers des adresses échos comme echo@univie.ac.at, elle se contente de vous renvoyer votre email 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.

Voici le mail qui part du serveur Linux, avec pour contenu :

Subject:    test
première ligne

Contenu de l'email de réponse du serveur écho :

--------------------------------------------------------

  Vienna University Computer Center - Echo Service
                 echo@univie.ac.at

  This message was generated upon your request by the
              automatic answering service.


  Answers are limited to _one_every_two_minutes_ to
                   prevent abuse!

  Attached you'll find the first 4 kByte of your mail.

--------------------------------------------------------

> 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) 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 même le commentaire que vous aurez défini dans le fichier de config de sendmail.
Certains gestionnaires d'email pourraient rejeter vos emails sous prétexte de contenir un nom de domaine inconnu.

Voyons maintenant un email arrivant d'un de vos postes sous Windows et partant vers le net. 

> 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) 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=UTF-8
> 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:

> From toto.nom@fai.fr@funix.org Sat Jun 01 17:08:31 2002
> Return-Path: <toto.nom@fai.fr>
> Delivered-To: echo@cnam.fr
> Received: (qmail 20719 invoked from network); 1 Jun 2002 17:08:31 -0000
> Received: from bougainville.cnam.fr (163.173.128.13)
>   by 0 with SMTP; 1 Jun 2002 17:08:31 -0000
> Received: from localhost (localhost [127.0.0.1])
>  by bougainville.cnam.fr (Postfix) with ESMTP id 132F82EFB4
>  for <echo@cnam.fr>; Sat,  1 Jun 2002 19:08:31 +0200 (CEST)
> Received: from smtp.fai.fr (mail.fai.fr [202.3.225.22])
>  by bougainville.cnam.fr (Postfix) with ESMTP id D31492EFAE
>  for <echo@cnam.fr>; Sat,  1 Jun 2002 19:08:27 +0200 (CEST)
> Received: from ppp.fai.fr (tc5-bis-014.dialup.fai.fr [202.3.239.14])
>  by smtp.fai.fr (Mirapoint Messaging Server MOS 3.1.0.36-EA)
>  with ESMTP id ADS19083
>  for <echo@cnam.fr>;
>  Sat, 1 Jun 2002 07:08:20 -1000 (TAHT)
> Received: from fai.fr
>         by fai.fr (8.12.1/8.12.1/Commentaire quelconque) with ESMTP id g51H7FAj002161
>         for <echo@cnam.fr>; Sat, 1 Jun 2002 07:07:15 -1000
> Message-ID: <3CF90D0A.5FF74480@fai.fr>
> Date: Sat, 01 Jun 2002 07:06:02 -1100
> From: Toto Nom <toto.nom@fai.fr>
> X-Mailer: Mozilla 4.7 [fr] (WinNT; I)
> X-Accept-Language: fr
> MIME-Version: 1.0
> To: echo@cnam.fr
> Subject: essai
> Content-Type: text/plain; charset=us-ascii
> Content-Transfer-Encoding: 7bit
> X-Virus-Scanned: by AMaViS perl-11
------

>
> première ligne
>

------ Fin de votre message 

Voici l'email qui part de notre serveur Linux.

> From toto.nom@fai.fr Sat Jun 01 05:51:15 2002
> Return-Path: <toto.nom@fai.fr>
> Delivered-To: echo@cnam.fr
> Received: (qmail 3855 invoked from network); 1 Jun 2002 05:51:14 -0000
> Received: from bougainville.cnam.fr (163.173.128.13)
>   by 0 with SMTP; 1 Jun 2002 05:51:14 -0000
> Received: from localhost (localhost [127.0.0.1])
>       by bougainville.cnam.fr (Postfix) with ESMTP id CB0A52EFAF
>       for <echo@cnam.fr>; Sat,  1 Jun 2002 07:51:14 +0200 (CEST)
> Received: from smtp.fai.fr (mail.fai.fr [202.3.225.22])
>       by bougainville.cnam.fr (Postfix) with ESMTP id 8EE6D2EFAE
>       for <echo@cnam.fr>; Sat,  1 Jun 2002 07:51:11 +0200 (CEST)
> Received: from ppp.fai.fr (tc5-bis-198.dialup.fai.fr [202.3.239.198])
>       by smtp.fai.fr (Mirapoint Messaging Server MOS 3.1.0.36-EA)
>       with ESMTP id ADS03894
>       for <echo@cnam.fr>;
>       Fri, 31 May 2002 19:50:40 -1000 (TAHT)
> Received: from fai.fr
>         by fai.fr (8.12.1/8.12.1/Commentaire quelconque) with ESMTP id g515nwFE002664
>         for <echo@cnam.fr>; Fri, 31 May 2002 19:49:58 -1000
> Sender: toto.nom@fai.fr
> Message-ID: <3CF86086.351F9560@fai.fr>
> Date: Fri, 31 May 2002 19:49:58 -1000
> From: Toto Nom <toto.nom@fai.fr>
> Organization: Tahiti Connection
> X-Mailer: Mozilla 4.78 [fr] (X11; U; Linux 2.4.18-6mdk i686)
> X-Accept-Language: en
> MIME-Version: 1.0
> To: echo@cnam.fr
> Subject: test
> Content-Type: text/plain; charset=us-ascii
> Content-Transfer-Encoding: 7bit
> X-Virus-Scanned: by AMaViS perl-11
------
>
> première ligne
>

------ Fin de votre message 
 

[Retour haut de la page]

Si vous avez un autre email que celui attribué par le Fai utilisé

Vous pouvez très bien utiliser un FAI du style fai.fr et ne pas utiliser une adresse email en @fai.fr.  Ainsi je me connecte avec free et mon adresse email est
olivier.hoarau@fnac.net , dans ce cas le Message-Id et le Sender n'ont pas une bonne tête.
Exemple avec cette entête renvoyée par le service d'echo.

> From olivier.hoarau@fnac.net  Sat Jul 15 08:19:16 2000
> Received: from postfix3.free.fr (postfix@postfix3.free.fr [212.27.32.22])
>         by fermi.cnam.fr (8.8.8/jpm-301097)  with ESMTP id IAA05796
>         for <echo@cnam.fr>; Sat, 15 Jul 2000 08:19:16 +0200 (MET DST)
> Return-Path: <olivier.hoarau@fnac.net>
> Received: from ppp.free.fr (massy-4-14-209.dial.proxad.net [213.228.14.209])
>       by postfix3.free.fr (Postfix) with ESMTP id 62B6286B67
>       for <echo@cnam.fr>; Sat, 15 Jul 2000 08:19:15 +0200 (CEST)
> Received: from free.fr
>         by free.fr (8.10.1/8.10.1/Olivier Hoarau-992911) with ESMTP id e6F68IJ01419
>         for <echo@cnam.fr>; Sat, 15 Jul 2000 08:08:18 +0200
> Sender: olivier@free.fr
> Message-ID: <396FFFD2.447D80E1@fnac.net>
> Date: Sat, 15 Jul 2000 08:08:18 +0200
> From: Olivier Hoarau <olivier.hoarau@fnac.net>
> Organization: Breizh Connection
> X-Mailer: Mozilla 4.73 [fr] (X11; I; Linux 2.2.15-4mdk i686)
> X-Accept-Language: en
> MIME-Version: 1.0
> To: echo@cnam.fr
> Subject: asterix
> Content-Type: text/plain; charset=us-ascii
> Content-Transfer-Encoding: 7bit

Vous voyez que le Message-Id a l'extension fnac.net alors qu'il devrait être en free.fr puisque j'utilise free, de même le Sender est olivier@free.fr qui ne correspond à  rien, vu que mon email chez free est ohoarau@free.fr
Pour régler le problème du Message-Id et du Sender, j'ai écrit ce petit script :

#!/bin/bash
cd /var/spool/mqueue
for nom_mail in $(ls qf*)
do
       awk 'BEGIN { FS=":" }
         $1!="H??Message-ID"   &&    $1!= "H??Sender" { print $0 }
         $1=="H??Sender" { sub("olivier","ohoarau",$2);print $1,":",$2 }
         $1=="H??Message-ID" {  sub("fnac.net","free.fr",$2); print $1,":",$2 }
       ' $nom_mail > /tmp/mail.tmp
       cp /tmp/mail.tmp $nom_mail
done

Vous pourrez très facilement adapter ce script à  votre situation, quelques commentaires sont peut être utiles:
- sub("olivier","ohoarau",$2) ici c'est pour avoir Sender: ohoarau@free.fr au lieu de Sender: olivier@free.fr
- sub("fnac.net","free.fr",$2) ici c'est pour avoir Message-ID: <396FFFD2.447D80E1@free.fr au lieu de Message-ID: <396FFFD2.447D80E1@fnac.net

Remplacez les chaînes de caractères adéquates pour que ça marche chez vous. Le proprio du script doit être root, avec des droits en 755, on l'appelera avant sendmail -q et qui permettra de changer le Message-Id et le Sender .
Si ce script s'appelle chg-message et se trouve dans /usr/sbin , vous devez le lancer avant chaque envoi de mail par sendmail, c'est éventuellement configurable via cron.

/usr/sbin/chg-message
/usr/sbin/sendmail -q

Voilà  en final la tête mon mail envoyé de mon poste linux tel que l'a renvoyé le serveur écho du cnam: 

> From olivier.hoarau@fnac.net  Sat Jul 15 09:23:09 2000
> 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 JAA10064
>         for <echo@cnam.fr>; Sat, 15 Jul 2000 09:23:09 +0200 (MET DST)
> Return-Path: <olivier.hoarau@fnac.net>
> Received: from ppp.free.fr (massy-2-11-231.dial.proxad.net [213.228.11.231])
>       by postfix1.free.fr (Postfix) with ESMTP id DA7D228043
>       for <echo@cnam.fr>; Sat, 15 Jul 2000 09:23:03 +0200 (MEST)
> Received: from free.fr
>         by free.fr (8.10.1/8.10.1/Olivier Hoarau-992911) with ESMTP id e6F72bP02146
>         for <echo@cnam.fr>; Sat, 15 Jul 2000 09:02:37 +0200
> Sender: ohoarau@free.fr
> Message-ID:  <39700C8D.3443567C@free.fr>
> Date: Sat, 15 Jul 2000 09:02:37 +0200
> From: Olivier Hoarau <olivier.hoarau@fnac.net>
> Organization: Breizh Connection
> X-Mailer: Mozilla 4.73 [fr] (X11; I; Linux 2.2.15-4mdk i686)
> X-Accept-Language: en
> MIME-Version: 1.0
> To: echo@cnam.fr
> Subject: essai
> Content-Type: text/plain; charset=us-ascii
> Content-Transfer-Encoding: 7bit

Le Message-Id et le Sender ont maintenant une bonne tête.

Voilà  le message renvoyé d'un mail partant d'un poste client windows du réseau:

> From olivier.hoarau@fnac.net  Sat Jul 15 09:46:21 2000
> Received: from postfix2.free.fr (postfix@postfix2.free.fr [212.27.32.74])
>         by fermi.cnam.fr (8.8.8/jpm-301097)  with ESMTP id JAA11374
>         for <echo@cnam.fr>; Sat, 15 Jul 2000 09:46:21 +0200 (MET DST)
> Return-Path: <olivier.hoarau@fnac.net>
> Received: from ppp.free.fr (massy-2-10-239.dial.proxad.net [213.228.10.239])
>       by postfix2.free.fr (Postfix) with ESMTP id 7FB1D740DB
>       for <echo@cnam.fr>; Sat, 15 Jul 2000 09:46:20 +0200 (MEST)
> Received: from free.fr
>         by free.fr (8.10.1/8.10.1/Olivier Hoarau-992911) with ESMTP id e6F7iTG02453
>         for <echo@cnam.fr>; Sat, 15 Jul 2000 09:44:30 +0200
> Message-ID:  <39701660.10A22F73@free.fr>
> Date: Sat, 15 Jul 2000 09:44:32 +0200
> From: Olivier Hoarau <olivier.hoarau@fnac.net>
> X-Mailer: Mozilla 4.6 [fr] (Win98; I)
> X-Accept-Language: fr
> MIME-Version: 1.0
> To: echo@cnam.fr
> Subject: tavel
> Content-Type: text/plain; charset=us-ascii
> Content-Transfer-Encoding: 7bit

------

Vous pouvez constater qu'il n'y a pas de champ Sender.


[Retour page d'accueil FUNIX]