Les relais ouverts

Notez cet article

Tester en ligne un serveur SMTP

Il existe un problème de sécurité mal connu sur l’Internet: celui des serveur relais-ouvert. Ce problème concerne les serveurs de messagerie sortante ou SMTP; normalement lorsque l’on envoie un e-mail, on utilise un serveur SMTP destiné à un usage exclusif. Les personnes autorisées sont généralement celles qui sont issues du même réseau (wanadoo.fr, skynet.be,…)En aucun cas, un serveur SMTP ne devrait pouvoir être utilisé par un utilisateur d’un autre réseau. La raison en est toute simple: quiconque sur Internet serait en mesure de l’utiliser.Le petit « axiome » suivant garantit l’intégrité d’un serveur SMTP:
– le serveur SMTP fait partie du même réseau IP que son utilisateur,
OU
– le serveur SMTP envoie du courrier uniquement vers un utilisateur appartenant à son réseau IP.Bien sûr, il peut exister des serveurs intermédiaires destinés à repartir la charge des transactions SMTP. Maintenant, du fait d’un mauvais paramétrage, un serveur SMTP peut très bien accepter du courrier de n’importe quel utilisateur d’Internet vers n’importe quel autre utilisateur: le serveur SMTP est alors placé en position de relais-ouvert.

Ceci est très dangereux car la plupart des personnes générant du courrier non sollicité (encore appelé spam) utilisent ce genre de relais. Ils ont moins de chance de se faire repérer en utilisant un serveur tiers plutôt que celui de leur FAI (Fournisseur d’Accès Internet).

Pour information, les spammeurs envoient généralement des milliers voire des dizaines de milliers d’emails; on voit clairement le risque encouru lorsqu’un serveur est relais ouvert.

Nous allons maintenant tester manuellement un serveur SMTP afin de voir si oui ou non, celui-ci est un relais ouvert.
La première chose à faire est d’extraire du DNS le MX (Mailer Exchanger), en fait le nom du serveur SMTP qui peut nous faire entrer sur un domaine de messagerie. Ceci se fait grâce à la commande NSLOOKUP:
nslookup -q=mx domaine.fr 194.2.0.20

Le « -q=mx » indique que l’on s’intéresse uniquement au champs MX du DNS, le domaine.fr représente le domaine de messagerie et l’adresse IP est tout simplement le DNS que l’on interroge, ici celui d’Oleane.
Le même résultat peut être obtenu avec la commande DIG:
dig mx domaine.fr

En retour, nous obtenons:
mail.domaine.fr

Nous pénétrons sur le serveur au moyen d’un simple telnet:
telnet mail.domaine.fr 25

Le 25 correspond au numéro du port SMTP. En réponse, nous obtenons quelque chose de semblable à ceci:
220 mail.domaine.fr Simple Mail Transfer Service Ready

Le 220 indique que la connexion a été acceptée et qu’un dialogue SMTP peut commencer.
Nous commençons par nous identifier:
helo mamachine.domaine.com
ou
ehlo mamachine.domaine.com

Nous lui donnons notre adresse SMTP, lui indiquant la source du message:
mail from: moi@mondomaine.com

Attention, le domaine doit exister car bien souvent le serveur SMTP fait une requête DNS pour vérifier que celui-ci n’est pas factice. Certains serveurs demandent également d’utiliser une syntaxe quelque peu différente:
mail from: <moi@mondomaine.com>

Nous lui donnons l’adresse SMTP correspondant au destinataire du message:
rcpt to: lui@sondomaine.com
ou
rcpt to: <lui@sondomaine.com>

Ici, il y a deux possibilités:
554 : Recipient address rejected: Relay access denied

Le code d’erreur 554 indique que le serveur SMTP n’accepte pas le relais.

250 OK

Le code de retour 250 autorise le relais: le serveur est donc un relais ouvert. On ne peut toutefois en être absolument sûr car certains serveurs peuvent rejeter le relayage après le dialogue SMTP.

Vous avez la possibilité de tester en ligne si un serveur est relais ouvert ou non en cliquant ici.
Le programme consiste à tester plusieurs formes de relayage possible. Le résultat est toutefois à prendre au conditionnel car certains serveurs SMTP feignent d’accepter du courrier mais l’effacent par la suite. Toutefois, le fait d’échouer sur le premier test indique tout de même une grosse faille potentielle.

Ce petit programme Perl effectue une dizaine de tests sur un serveur SMTP donné. Il faut, bien sûr, se trouver à l’extérieur du réseau sur lequel se trouve ce serveur.
Attention, suivant le serveur que vous utilisez, le programme peut vous indiquer qu’il est relais-ouvert mais en fait il n’en est rien, car le message est rejeté en interne après la clôture de la transaction SMTP.

Si vous voulez être absolument sûrs que le serveur est un relais ouvert, remplacez les deux variables $domaine et $test dans la fonction tst() respectivement par votre domaine de messagerie ainsi que par votre compte POP.

Exemple:
$domaine= »wanadoo.fr »;
$test= »jacques.vanpiperzen »;

Si le serveur est effectivement relais alors vous recevrez prochainement du courrier.
Le programme demande une adresse IP ou un nom de machine comme argument; il y aurait moyen de l’améliorer en y ajoutant des alarm() afin de pallier à d’éventuels dépassements de temps sur l’accès au serveur.

La meilleure façon de se protéger efficacement contre le relayage est bien évidement d’avoir un serveur SMTP bien configuré mais ce n’est pas forcément évident à mettre en oeuvre surtout sur des systèmes aussi complexes qu’Exchange Server ou Lotus Notes; ces deux serveurs demandent généralement une bonne pratique avant d’être parfaitement maîtrisés.

Aussi, je m’appuierai plus sur une sécurité à l’échelle d’IP; l’avantage est que l’on devient complètement indépendant de la configuration SMTP.
Une approche pourrait être que chaque fois que l’on découvre quelqu’un utilisant son serveur SMTP de façon illicite, alors on interdit à toute la classe IP de ce même utilisateur d’accéder au serveur. Cette approche (déjà rencontrée) est très mauvaise:
– elle pénalise autrui, à savoir les utilisateurs innocents,
– elle ne résout pas le problème,
– a ce rythme, des pans entiers d’Internet ne pourront bientôt plus communiquer avec le serveur.

La meilleure façon de procéder consiste à appliquer les étapes suivantes:
– Tout d’abord, on laisse gérer le courrier par le FAI; celui-ci dont le métier est l’Internet doit être capable de répondre à la problématique suivant:
« Je ne veux pas que mon serveur SMTP soit relais ouvert ».
Pour être plus précis, on va confier la gestion du MX du domaine au FAI; suite à l’extraction du MX, tout le courrier entrant arrivera donc directement chez le FAI.
– Le FAI ré-acheminera tout le courrier sur notre serveur SMTP.
– Le port 25 de notre serveur de messagerie ne sera accessible que par le(s) adresses IP du/des serveur(s) SMTP de notre FAI.

Ceci se fera grâce à un filtrage élémentaire sur le routeur (Exemple CISCO):
access-list 125 permit tcp host 10.0.0.10 host 192.168.0.10 eq smtp
access-list 125 deny tcp any any eq smtp log

où le 10.0.0.10 représente le serveur du FAI et le 192.168.0.10 le nôtre.
Toutes les autres tentatives d’utiliser le(s) serveur(s) SMTP sont enregistrées.

On peut faire la même chose grâce à un iptable sous Linux :
/sbin/iptables -A INPUT -j ACCEPT -p tcp -s 10.0.0.10 -d 192.168.0.10 –dport 25

Grâce à cette technique, on canalise le flux SMTP et on interdit ainsi à quiconque de l’utiliser, si ce n’est les personnes autorisées.

Laisser un commentaire