Home » Comment ça marche, Internet, Sysadmin

Le mail, comment ca marche ?

14 septembre 2010 7 commentaires
tags : , ,
Download PDF

Crédit photo : __Olga__ (flickr)

Quand vous configurez un compte email, vous saisissez generalement un nom d’utilisateur, un mot de passe, et un ou deux noms de serveurs (entrant et sortant).

Lorsque vous allez envoyer votre premier email, que va-t-il se passer ? Votre machine va contacter le serveur d’émission (généralement dit « serveur SMTP ») que vous lui avez indiqué pour expédier l’email. Il ne va jamais contacter directement le serveur de courrier du (ou des) destinataires.

Votre mail, une fois arrivé sur le serveur, deux possibilités, soit le serveur en question est un simple relai, auquel cas il va se borner a renvoyer l’email a son petit copain qu’il connait de par sa configuration, soit il doit se charger lui même d’envoyer l’email aux serveurs destinataires et il va donc dupliquer l’email en autant de domaines destinataires différents. Par exemple, si vous envoyez un mail a toto@titi.pouet, tata@miaou.pouet et titi@titi.pouet, votre serveur de mail fera un premier groupe avec les deux emails @titi.pouet et un autre avec @miaou.pouet.

Une fois les tas d’emails constitués, il va rechercher à quels serveurs envoyer chaque tas d’email. Pour les trouver, on se base sur le système DNS qui contient, pour chaque domaine ou sous domaine, un champ « MX » (Mail eXchanger) indiquant le nom du ou des serveurs responsables des emails pour le domaine.

Il établi ensuite une connexion (également en SMTP, comme vous l’avez fait vous-même) à chacun de ces serveurs pour envoyer l’email à tous les destinataires qui sont joignables sur ces serveurs.

Bilan des courses, vous pouvez tout à fait, si votre FAI vous fourni du vrai internet et en cherchant vous même le nom du serveur MX d’un domaine, envoyer directement à ce serveur vos emails pour les destinataires qui sont dessus. Ça suppose de changer la configuration de votre logiciel de messagerie à chaque email que vous voulez envoyer.

Une fois arrivé sur le serveur de destination, votre mail passe dans différents filtres, probablement au moins un antispam et un antivirus puis est distribué dans une boite ou il attendra sagement que son propriétaire vienne le relever. On utilise majoritairement deux protocoles pour relever les mails :

  • POP3 qui n’a aucune notion de sous dossiers et qui se borne à lister tous les emails présents dans la boite, permettant de les récupérer, puis, éventuellement, de les effacer
  • IMAP4 qui, lui, conserve également une arborescence de sous dossier permettant de trier ses emails puis de retrouver cette arborescence ailleurs, à la maison, par exemple

Avant de pouvoir relever les mails, le logiciel fourni vos identifiant et mot de passe au serveur (ne serait-ce que pour qu’il sache quelle boite vous montrer, mais aussi pour qu’il puisse être sur de votre identité)

Le cas du webmail, très employé de nos jours, n’est pas différent de celui d’un logiciel de courrier comme Thunderbird ou Outlook. C’est simplement un logiciel accessible via le web qui va, lui aussi, parler avec le serveur de mail en POP3 ou en IMAP4 (a de rares exceptions près que nous ne détaillerons pas ici.

La ou ça devient drôle, si vous avez bien suivi la description ci dessus, c’est que vous pouvez envoyer des mails à peu près à n’importe qui sous n’importe quelle identité. En effet, le protocole SMTP n’a, à l’origine, aucune notion de vérification de l’émetteur. Une petite démonstration valant mieux qu’un long discours, je m’en vais de ce pas envoyer un email à notre président en me faisant passer pour Barack Obama.

Je commence par récupérer le serveur de mail traitant le courrier pour le domaine de Nicolas Sarkozy :

$ dig MX sarkozy.fr
[…]
;; ANSWER SECTION:
sarkozy.fr. 300 IN MX 10 berlioz.elysee.fr.
[…]

Je me connecte ensuite à la machine en question (berlioz.elysee.fr) sur le port 25 (celui réservé au SMTP, je ne pirate rien, c’est ce que font les logiciels de courrier) et je parle comme un logiciel de courrier qui envoie un mail, je commence par me présenter (HELO ) puis par donner les emails de l’émetteur et du destinataire (en italique) :

$ telnet berlioz.elysee.fr 25
Trying 84.233.174.57…
Connected to berlioz.elysee.fr.
Escape character is ‘^]’.
220 SMTP Welcome
helo blog.spyou.org
250
mail from: barack@whitehouse.gov
250 2.1.0 barack@whitehouse.gov… Sender ok
rcpt to: nicolas@sarkozy.fr
451 4.7.1 Greylisting in action, please come back in 00:05:00
quit
221 2.0.0 phobos.elysee.fr closing connection
Connection closed by foreign host.

Si vous avez bien lu, je me suis fais jeter comme un malpropre par un dispositif de greylisting qui me demande de revenir dans 5 minutes. C’est une technique de base de la lutte antispam qui consiste à refuser un email à la première tentative. Les serveurs de mail normalement constitués vont réessayer quelques minutes plus tard alors que le robot de spam, lui, ne réessaiera pas, prenant généralement ce refus comme un « la boite n’existe pas ». Bien sur, les spammeurs se sont adaptés depuis et réessaient autant de fois qu’il le faut. La méthode permet tout de même encore d’éviter l’arrivée de certains spams.

Je laisse donc passer les 5 minutes demandées par notre cher ami Berlioz (si vous notez bien, la machine elle même, lorsque j’ai demandé l’arrêt de la connexion, m’a dit qu’elle s’appelait Phobos … Ils ne doivent pas boire que de l’eau à l’Élysée) :

$ telnet berlioz.elysee.fr 25
Trying 84.233.174.57…
Connected to berlioz.elysee.fr.
Escape character is ‘^]’.
220 SMTP Welcome
helo blog.spyou.org
250
mail from: barack@whitehouse.gov
250 2.1.0 barack@whitehouse.gov… Sender ok
rcpt to: nicolas@sarkozy.fr
550 5.1.1 nicolas@sarkozy.fr… User unknown
quit
221 2.0.0 phobos.elysee.fr closing connection
Connection closed by foreign host.

Bon, j’ai vraiment pas de chance, cette adresse ne marche plus, il va falloir que je trouve un autre email pour joindre Nicolas.

Notez que la ligne que nous avons eu : 550 5.1.1 nicolas@sarkozy.fr… User unknown est celle qui, lorsque vous utilisez votre logiciel de courrier, va faire que le serveur de votre fournisseur d’accès vous renverra un email « Mailer Daemon » vous expliquant que votre mail n’a pas pu arriver à bon port.

Je ne trouve rien pour sauver ma démo, je vais donc être contraint de demander à un intermédiaire, le webmaster du site de l’Élysée (webmestre@elysee.fr) de transmettre mon faux mail de Barack à Nicolas. Ça tome bien, le serveur MX pour elysee.fr est le même que pour sarkozy.fr. Il faudra que je pense à revérifier ça après les prochaines élections.

Il faut bien sur attendre de nouveau 5 minutes pour le passage de la greylist, puis :

$ telnet berlioz.elysee.fr 25
Trying 84.233.174.57…
Connected to berlioz.elysee.fr.
Escape character is ‘^]’.
220 SMTP Welcome
helo blog.spyou.org
250
mail from: barack@whitehouse.gov
250 2.1.0 barack@whitehouse.gov… Sender ok
rcpt to: webmestre@elysee.fr
250 2.1.5 webmestre@elysee.fr… Recipient ok
data
354 Enter mail, end with « . » on a line by itself
subject: A l’attention de Nicolas
Un petit mail de demo pour un article sur http://blog.spyou.org/. L’expediteur est bien entendu faux :)

Merci.
.

250 2.0.0 o8BCCtp8003800 Message accepted for delivery
quit
221 2.0.0 phobos.elysee.fr closing connection
Connection closed by foreign host.

Et voila, comme une lettre à la poste, comme on dit. Il faudra que je pense à regarder les statistiques d’accès à mon blog, je pourrais éventuellement récupérer l’adresse IP depuis laquelle se connecte le webmaster du site de l’Élysée et apprendre, du coup, quel est leur fournisseur d’accès (voir mon billet sur le sujet). C’est un formidable début d’ingénierie sociale qui peut aider un vilain méchant pirate à entrer dans un système informatique.

On note au passage qu’on a obtenu un identifiant unique pour l’email envoyé (o8BCCtp8003800), ce qui est relativement pratique lorsqu’on chasse des mails qui n’arrivent pas ou mal à bon port.

Pourquoi mon faux email a très peu de chances d’arriver à destination ? Parce que même si le protocole SMTP n’a pas de notion de comment vérifier que l’expéditeur est bien qui il prétend être et que le serveur de l’élysée a accepté mon expédition (Message accepted for delivery), on a réussi à inventer tout un tas de choses diverses et variées pour contourner le problème. Les logiciels d’antispam sont à présent très doués, trop même, au point de refuser des emails légitimes. Par exemple, si Barack vient en vacances dans mon jardin picard, il est fort peu probable qu’il puisse envoyer un email au webmaster de Nicolas avec ma connexion internet sans qu’un antispam ne mette son veto avant la distribution.

Petit exercice pratique pour finir, essayez de déterminer, sans utiliser votre logiciel de courrier, si l’adresse barack@whitehouse.gov existe vraiment ou pas.

Pour aller plus loin, j’essaierai de vous parler de quelques principes des spams et des antispam dans de futurs articles.

7 Comments »

  • Fab said:

    Chouette article :) .

    Petite précision:
    Si un domaine n’a pas de champs MX, un MTA pas trop débile essaiera d’envoyer un mail destiné à toto@machin.ltd via le serveur toto.machin.ltd. Si toutefois le nom DNS de ce serveur existe.

    Il est donc en théorie possible d’avoir son propre serveur mail sans champs MX sur son, nom de domaine (pour les dyndns, par exemple).

  • Bruno (author) said:

    Plus exactement, si un mail est envoyé à pouet@toto.machin.tld, si la machine toto.machin.tld existe, elle a de bonnes chances de capter le mail. Je n’ai pas mémoire que toto@machin.tld puisse arriver tout seul sur une machine toto.machin.tld :)

  • Fab said:

    Ah oui, au temps pour moi :p .
    (pas assez de café encore :D)

  • ®om said:

    J’ai essayé avec mes collègues avec le SMTP de gmail, ça fonctionne très bien.

    Il faut penser à rajouter les lignes « From:  » et « To:  » dans les DATA, sinon gmail classe le mail en spam.

  • Bruno (author) said:

    Tout à fait. Il y a pas mal d’autres choses à inclure dans les DATA pour que le mail paraisse vrai et passe mieux aux antispams :)

  • clemclem said:

    Je ne trouve rien pour sauver ma démo, je vais donc être contraint de demander à un intermédiaire, le webmaster du site de l’Élysée (webmestre@elysee.fr) de transmettre mon faux mail de Barack à Nicolas. Ça tome bien, le serveur MX pour elysee.fr est le même que pour sarkozy.fr. Il faudra que je pense à revérifier ça après les prochaines élections.

    alors ? ^^

  • Bruno (author) said:

    Alors manifestement ça a été dissocié :)

Leave your response!

Add your comment below, or trackback from your own site. You can also subscribe to these comments via RSS.

Be nice. Keep it clean. Stay on topic. No spam.

You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

This is a Gravatar-enabled weblog. To get your own globally-recognized-avatar, please register at Gravatar.


six − = 4