• 15 heures
  • Difficile

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 14/09/2023

Utilisez votre serveur SMTP

Dans ce chapitre, nous allons utiliser le serveur SMTP fraîchement installé et paramétré pour envoyer des mails à l'extérieur.

Utilisez votre serveur SMTP

Comme nous l’avons vu dans les chapitres précédents, le protocole SMTP sert à envoyer et à recevoir des mails. Pour l’instant, nous avons surtout observé la capacité de Postfix à recevoir des mails pour nos boîtes aux lettres locales, mais nous pouvons essayer de voir si notre serveur est capable d’envoyer des mails à d’autres adresses.

Méthode n°1: envoyez en manuel un mail à une adresse extérieure

Nous allons simplement essayer de faire un envoi de mail à une adresse dont le domaine n’est pas géré par notre serveur. Essayons d’envoyer un mail à une adresse que je possède, mais que je modifierai ici pour des raisons de confidentialité. On dira que c’est montest@yahoo.fr.

echo "Salut Toto" | mail -s "Test01" montest@yahoo.fr

Jusqu’ici, tout semble OK. Allons voir dans les logs ce qui s’est passé :

root@Debian02 : ~# tail /var/log/mail.info
Jan 29 17:16:54 Debian02 postfix/pickup[31153]: 2A477C3D: uid=0 from=<root@Debian02>
Jan 29 17:16:54 Debian02 postfix/cleanup[31202]: 2A477C3D: message-id=<20180129161654.2A477C3D@Debian02.mondomaine.local>
Jan 29 17:16:54 Debian02 postfix/qmgr[24842]: 2A477C3D: from=<root@Debian02>, size=339, nrcpt=1 (queue active)
Jan 29 17:16:55 Debian02 postfix/smtp[31204]: 2A477C3D: to=<montest@yahoo.fr>, relay=in1-smtp.com[65.45.4.71] : 25, delay=1.6, delays=0.03/0.01/1.4/0.09, dsn=5.5.2, status=bounced (host in1-smtp.com[65.45.4.71] said: 504 5.5.2 <root@Debian02>: Sender address rejected: need fully-qualified address (in reply to RCPT TO command))

Ah, nous voyons que cela ne s’est pas bien passé, ce qui est confirmé en allant voir ma boîte mail qui n’a effectivement rien reçu.

Le message d’erreur nous dit Sender address rejected: need fully-qualified address, car l’adresse de l’émetteur du mail est root@Debian2, ce qui ne semble effectivement pas provenir d’un domaine correct.

Pourtant, nous avions bien indiqué dans le fichier main.cf que nous voulions que le domaine présent dans l’adresse source soit itinet.fr. Que s’est-il passé ?

En fait, le comportement n’est pas tout à fait le même quand un mail est envoyé depuis la ligne de commande. Nous n’aurons pas ce problème plus tard quand nous utiliserons des outils pour envoyer nos mails, mais en attendant, nous pourrons trouver des astuces pour corriger ce problème.

Nous connaissons déjà une façon de faire qui serait d’utiliser Telnet comme nous l’avons déjà fait, et donc de préciser l’adresse de l’émetteur du mail ; cela marcherait. En le faisant, voici ce que nous obtenons dans les logs :

Jan 29 18:02:05 Debian02 postfix/qmgr[31646]: B8CD0C3B: from=<toto@toto.com>, size=326, nrcpt=1 (queue active)
Jan 29 18:02:06 Debian02 postfix/smtpd[31717]: disconnect from localhost[::1] ehlo=1 mail=1 rcpt=1 data=1 quit=1 commands=5
Jan 29 18:02:07 Debian02 postfix/smtp[31725]: B8CD0C3B: host in1-smtp.com[65.45.4.71] said: 451 4.7.1 <montest@yahoo.fr>: Recipient address rejected: Temporary deferral, try again soon (in reply to RCPT TO command)
Jan 29 18:02:09 Debian02 postfix/smtp[31725]: B8CD0C3B: to=<montest@fyahoo.fr>, relay=in1-smtp.com[65.45.4.71]:25, delay=23, delays=20/0.01/3.4/0.19, dsn=4.7.1, status=deferred (host in1-smtp.com[65.45.4.71] said: 451 4.7.1 <montest@yahoo.fr>: Recipient address rejected: Still temporary deferral, try again soon, 48 seconds to go (in reply to RCPT TO command))
Jan 29 18:10:16 Debian02 postfix/qmgr[31646]: B8CD0C3B: from=<toto@toto.com>, size=326, nrcpt=1 (queue active)
Jan 29 18:10:19 Debian02 postfix/smtp[31732]: B8CD0C3B: to=<montest@yahoo.fr>, relay=in1-smtp.com[65.45.4.71]:25, delay=514, delays=510/0.02/1.4/1.7, dsn=2.0.0, status=sent (250 2.0.0 Queued as 9BB61B6C218)

Le mail a bien été reçu, ce qui est confirmé sur mon webmail :

Copie d'écran du mail reçu dans le webmail

Cependant, nous pouvons voir dans les logs qu’avant d’être reçu, le message a été rejeté.

Donc cela fonctionne avec Telnet, mais nous allons voir ensemble une seconde façon de choisir son adresse mail d’envoi en la réécrivant automatiquement.

Méthode n°2: envoyez en automatique un mail à une adresse extérieure

Pour cela, nous allons utiliser la directive smtp_generic_maps dans le fichier main.cf. Cette directive nous permet de remplacer une adresse mail d’expédition par une autre.

Nous allons donc ajouter dans notre fichier main.cf :

smtp_generic_maps = hash:/etc/postfix/generic

Puis nous allons éditer ce fichier /etc/postfix/generic pour lui dire de remplacer root@Debian02 par toto@mondomaine.local :

root@Debian02 toto@mondomaine.local

Il nous faut maintenant compiler ce fichier, vu que nous l’avons indiqué comme tel dans le main.cf, puis relancer Postfix pour que nos modifications soient prises en compte :

root@Debian02:/etc/postfix# postmap generic
root@Debian02:/etc/postfix# systemctl restart postfix

Et nous voyons bien qu’après le même système de greylisting, le mail a été reçu.

Jan 30 16:27:13 Debian02 postfix/qmgr[612]: 43177B8D: from=<root@Debian02>, size=339, nrcpt=1 (queue active)
Jan 30 16:27:14 Debian02 postfix/smtp[620]: 43177B8D: host in1-smtp.com[65.45.4.71] said: 451 4.7.1 <montest@yahoo.fr>: Recipient address rejected: Temporary deferral, try again soon (in reply to RCPT TO command)
Jan 30 16:27:16 Debian02 postfix/smtp[620]: 43177B8D: to=<montest@yahoo.fr>, relay=in1-smtp.com[65.45.4.71]:25, delay=3.4, delays=0.03/0.01/3.1/0.19, dsn=4.7.1, status=deferred (host in1-smtp.com[65.45.4.71] said: 451 4.7.1 <montest@yahoo.fr>: Recipient address rejected: Still temporary deferral, try again soon, 48 seconds to go (in reply to RCPT TO command))
Jan 30 16:37:02 Debian02 postfix/qmgr[612]: 43177B8D: from=<root@Debian02>, size=339, nrcpt=1 (queue active)
Jan 30 16:37:05 Debian02 postfix/smtp[632]: 43177B8D: to=<montest@yahoo.fr>, relay=in1-smtp.com[665.45.4.71]:25, delay=592, delays=590/0.03/1.5/1.2, dsn=2.0.0, status=sent (250 2.0.0 Queued as FE7D4C06794)
Jan 30 16:37:05 Debian02 postfix/qmgr[612]: 43177B8D: removed

Attention, les logs peuvent nous laisser penser que l’adresse source utilisée était toujours root@Debian2, mais elle a bien été remplacée lors de l’envoi par toto@mondomaine.local :

Maintenant que nous avons vu comment recevoir et envoyer des mails en local et vers l’extérieur, nous allons nous pencher brièvement sur l’évolution du protocole SMTP de nos jours.

Prenez en main le protocole SMTP d'aujourd’hui

Le protocole SMTP est de nos jours victime de son "fonctionnement libertaire originel".

C’est une jolie phrase, mais qu’est-ce que ça veut dire concrètement ?

En fait, à l’origine, le protocole SMTP a été créé pour s’envoyer des messages d’un ordinateur à un autre. Mais aujourd’hui, le mail a pris une dimension gigantesque dans le fonctionnement d’Internet qui fait que des milliards de mails sont échangés chaque jour. Le protocole des années 1970 n’avait pas été prévu pour répondre à une telle popularité. Pour utiliser SMTP aujourd'hui, vous allez donc avoir besoin de paramétrer le protocole pour qu'il soit un peu plus sécurisé et performant et qu'il réponde à vos besoins.

Le protocole SMTP d’origine fonctionne donc avec tout un ensemble de rustines, plus ou moins efficaces, qui vont souvent perturber le jeune administrateur réseau que vous êtes.

Conseil n°1 : vérifiez que les ports associés à SMTP sont bien ouverts

Afin de lutter contre le spam, certains opérateurs ont choisi la manière forte en coupant tout bonnement et simplement le protocole SMTP et le port 25 associé sur leur réseau. La seule façon d’envoyer des mails si jamais votre opérateur a fait ce choix sera alors d’utiliser ses propres serveurs SMTP mis à votre disposition. Si vous souhaitez mettre en place un serveur SMTP maison, il faudra le configurer pour que lui aussi utilise le serveur SMTP indiqué (cela pourra se faire grâce à la directive relayhost dans main.cf).

Comment savoir si votre opérateur bloque le port 25 ?

Vous devriez déjà être en mesure de répondre à cette question

Il vous suffit de faire un telnet vers le port 25 d’une machine sur laquelle il y a un serveur SMTP qui est en écoute.

Oui, mais comment connaître l’adresse d’un serveur SMTP ?

Là encore, vous devriez connaître les outils pour le faire.

La méthode la plus simple est de chercher sur Google le nom du serveur SMTP d’un opérateur (qui n’est pas le vôtre). Par exemple, si j’étais chez Free, je chercherais le nom du serveur SMTP d’Orange avec la recherche "orange smtp serveur".

Je trouve dès le premier résultat que le nom du serveur semble être smtp.orange.fr. Par contre, ce lien m’indique aussi que le port en écoute n’est pas 25, mais le port 465, ce qui indique souvent que le serveur utilise le protocole SSL pour chiffrer les échanges (comme pour HTTPS).

Cependant, nous allons tester quand même, car très souvent, le port 25 reste ouvert :

root@Debian02:/etc/postfix# telnet smtp.orange.fr 25
Trying 193.252.22.86...
Connected to smtp.orange.fr.
Escape character is '^]'.
220 mwinf5d45 ME ESMTP server ready

Bingo ! Le port est ouvert et le serveur répond. Cela nous confirme que mon opérateur ne bloque pas le port 25.

Si jamais vous faites le test et que le serveur ne répond pas, ne tirez pas de conclusion trop hâtive, il est possible que votre requête soit bloquée pour d’autres raisons. Faites différents tests pour vous assurer que le SMTP est bloqué ou non.

Vous aurez aussi un autre moyen de trouver des serveurs SMTP, en faisant exactement le même raisonnement que les serveurs SMTP eux-mêmes.

Imaginons que vous envoyiez un mail à toto@toto.com. Votre serveur SMTP va devoir trouver à quel serveur envoyer ce mail, et pour cela, il va utiliser le DNS !

Il va faire une requête DNS en demandant quelle est l’adresse IP du serveur SMTP du domaine toto.com (c’est un enregistrement MX, si vous vous rappelez bien le précédent ouvrage). Nous pouvons nous aussi effectuer cette requête DNS :

root@Debian02:/etc/postfix# dig toto.com MX

; <<>> DiG 9.10.3-P4-Debian <<>> toto.com MX
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37240
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION: ;toto.com. IN MX

;; ANSWER SECTION:
toto.com. 25 IN MX 10 ALT4.ASPMX.L.GOOGLE.com.
toto.com. 25 IN MX 5 ALT2.ASPMX.L.GOOGLE.com.
toto.com. 25 IN MX 1 ASPMX.L.GOOGLE.com.
toto.com. 25 IN MX 10 ALT3.ASPMX.L.GOOGLE.com.
toto.com. 25 IN MX 5 ALT1.ASPMX.L.GOOGLE.com.

;; Query time: 6 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Tue Jan 30 18:06:50 CET 2018
;; MSG SIZE rcvd: 152

Nous voyons ici qu’il existe apparemment 5 serveurs SMTP pour le domaine toto.com, et que le serveur à privilégier est ASPMX.L.GOOGLE.com, car il a un "poids" de 1, quand les autres ont des poids de 5 ou 10.

Il nous reste encore à obtenir son adresse IP :

root@Debian02:/etc/postfix# dig ASPMX.L.GOOGLE.com. A

; <<>> DiG 9.10.3-P4-Debian <<>> ASPMX.L.GOOGLE.com. A
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39985
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION: ;ASPMX.L.GOOGLE.com. IN A

;; ANSWER SECTION:
ASPMX.L.GOOGLE.com. 292 IN A 108.177.119.26

;; Query time: 9 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Tue Jan 30 18:20:52 CET 2018
;; MSG SIZE rcvd: 63

Et hop, l’adresse IP du serveur est 108.177.119.26 ; nous pouvons d’ailleurs essayer de l’interroger :

root@Debian02:/etc/postfix# telnet 108.177.119.26 25
Trying 108.177.119.26...
Connected to 108.177.119.26.
Escape character is '^]'.
220 mx.google.com ESMTP y9si3860487edh.349 - gsmtp

Il semblerait bien que les mails du domaine toto.com soient hébergés chez Google !

Nous venons de voir que les opérateurs pouvaient choisir de faire du blocage de port SMTP, mais il est aussi possible de filtrer ou de bloquer les spams de diverses manières...

Conseil n°2 : évitez d'être blacklisté

À force de recevoir du spam provenant de certaines adresses IP, certains se sont dit qu’il pourrait être malin de lister et de bloquer ces adresses. C’est là que sont nées les RBL, puis les XBL, SBL, et toute une ribambelle de blacklists.

Cela a clairement un effet bénéfique en bloquant les spammeurs et en les empêchant temporairement d’agir, mais la contrepartie peut être que les opérateurs ou serveurs SMTP un peu trop tatillons vont refuser les mails provenant d’adresses IP même si celles-ci sont tout à fait légitimes.

Imaginez que vous louiez un serveur dédié sur Internet dont l’adresse IP a malheureusement été blacklistée par le passé. Vous ne serez pas en mesure de joindre tous les serveurs SMTP qui feront confiance aux blacklists précédemment citées. Et patatras, il ne vous est plus possible de mettre en place votre serveur SMTP.

Heureusement pour vous, il existe des moyens pour sortir de ces blacklists, ou pour mettre en place des protections pour éviter d’y entrer. Le plus simple est déjà de bien configurer votre serveur SMTP afin qu’il ne se transforme pas en terrain de jeu pour les spammeurs (ce qui est le cas de la configuration simple que nous avons mise en place). Nous n’allons pas entrer dans ces détails, mais vous pourrez facilement trouver des informations sur ce sujet et trouver de l’aide si vous vous trouvez dans un cas similaire.

En résumé

  • Nous avons vérifié que notre serveur était capable d’envoyer des mails à d’autres adresses sur Internet.

  • Nous avons appris à obtenir l'adresse ip d'un autre serveur SMTP afin de contourner d'éventuels blocages.

  • Nous sommes au fait de l'existence de blacklists mises en place pour lutter contre les spammeurs.

Maintenant que notre serveur SMTP est opérationnel, nous allons pouvoir passer à l’étude du serveur IMAP dans le prochain chapitre de ce cours.

Exemple de certificat de réussite
Exemple de certificat de réussite