Port mirroring sous Linux avec iptables

I. Introduction

Dans ce tutoriel, nous allons voir comment mettre en place un port mirroring sous Linux en utilisant l'outil de gestion du pare-feu netfilter : iptables.

Pour ma part, j'effectue ce tutoriel sur une Debian 7 avec la version 1.4.14 d'iptables.

II. Qu'est-ce que le port mirroring ?

Pour bien comprendre la procédure que nous allons effectuer, il est important de comprendre ce qu'est le port mirroring et comment il fonctionne.
Le port mirroring est simplement le fait d'envoyer à une machine tierce tout ou partie du trafic qui passe sur un ou plusieurs autres ports. En temps normal, il s'agit d'une tâche effectuée par les switchs, car elle nécessite une action au niveau deux du modèle OSI seulement. Le trafic réseau qui passe dans le port visé va donc être dupliqué et également envoyé à un autre port/une autre machine.

Note : il ne faut pas confondre redirection et port mirroring, la redirection va changer le destinataire final du paquet alors que le port mirroring va dupliquer le trafic pour qu'il soit reçu par d'autres hôtes et non pas que par le destinataire initial. En général le trafic dupliqué ne se limite qu'à une machine supplémentaire : un IDS/ IPS

Pour illustrer le fonctionne du port mirroring, prenons ce schéma :

port-mirroring-linux-01

Ici, le port 2 du switch sur lequel est le PC 2 est appelé le "port mirroré", cela signifie que tout ce qui arrive ou sort de ce port (donc qui va vers ou vient du PC 2) sera dupliqué vers le port 3 du switch donc vers le PC 3. Il existe plusieurs intérêts au port mirroring. Le plus souvent, il s'agit de port sur lequel on met un IDS (Intrusion Detection System) et qui doit donc avoir une copie de ce qui passe sur le réseau (ce qui n'est pas possible avec la gestion "intelligente" du trafic des switchs par rapport aux hubs). Il faut néanmoins noter que certains systèmes ont besoin également de l'activation du promiscious mode sur les ports de mirroring.

Le fait d'avoir besoin du port mirroring sous Linux peut être plus rare du fait que les switchs le font généralement très bien (voir ce tutoriel pour configurer le port mirroring sur un switch Cisco), pour ma part, j'ai voulu tester un IDS dans un petit environnement virtualisé et le port mirroring via iptables était la solution la plus simple pour dupliquer le trafic arrivant sur la cible des attaques vers mon IDS.

Note : Il est toutefois important de savoir que le fait de faire du port mirroring sur l'hôte cible directement ne permettra pas d’empêcher les paquets d'atteindre la cible, car ils ne pourront être redirigé vers l'IDS que s'ils sont déjà arrivés sur la cible. De plus, cela va également ajouter une charge supplémentaire à la carte réseau de la cible, c'est donc une information à prendre en compte.

III. Configurer iptables pour le port mirroring

La configuration du port mirroring sur un système Linux via iptables est très simple à mettre en place. Voici les IP que j'utilise lors de la mise en place de ma règle iptables

  • 192.168.1.40 : Machine IDs qui va recevoir le trafic dupliqué,
  • 192.168.1.41  : Machine externe qui va générer du trafic vers la cible lors du test du port mirroring,
  • 192.168.1.42  : Machine cible des communications externe, on peut l'assimiler à un serveur ou une machine standard.

Étant donné que nous sommes sous Linux et pas dans le cadre d'un switch, le schéma diffère légèrement :

port-mirroring-linux-02Je veux donc rediriger tout ce qui arrive et sort de ma cible (192.168.1.42) vers mon IDS (192.168.1.40), il faut donc saisir la ligne suivante pour configurer iptables :

iptables -t mangle -A PREROUTING -i eth0 -j TEE --gateway 192.168.1.40

Avec iptables, l'option "TEE" va donc "cloner" les paquets et les rediriger vers une autre machine du réseau local. C'est pourquoi on spécifie après "--gateway" la machine IDS vers laquelle dupliquer le trafic. On affecte notre règle à la chaine  PREROUTING pour que le trafic soit dupliqué et renvoyé vers l'IDS au plus vite dès son arrivée sur la cible. On précise également l'interface sur lequel se positionnera cette règle iptables qui est dans mon cas "eth0".

IV. Redirection

La règle iptables vu dans le point précédent va rediriger tout le trafic arrivant sur l'interface donnée vers une autre machine du réseau local. Dans certains contextes, il peut être intéressant de ne rediriger que certains protocoles ou certains paquets vers notre IDS ou notre poste de monitoring. Il suffit pour cela d'adapter la règle iptables vu plus haut. Voyons quelques exemples :

Ne rediriger vers l'IDS que les paquets avec le port 80 comme destination  sur l'interface donnée :

iptables -t mangle -A PREROUTING -i eth0 -p TCP --dport 80 -j TEE --gateway 192.168.1.41

Ne rediriger vers l'IDS que les paquets provenant d'un IP précise :

 iptables -t mangle -A PREROUTING -i eth0 ---src 192.168.1.41 -j TEE --gateway 192.168.1.41

Nous avons donc vu plusieurs contextes et cas d'utilisation du mirroring de port sous Linux avec iptables. Il est toujours intéressant d'avoir cette ligne de commande en tête, car elle permet une mise en place très rapide du port mirroring et permet de s'affranchir de la configuration à faire au niveau du switch si nous sommes dans l'impossibilité d'y accéder ou de le mangaer par exemple.

 

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Mickael Dorigny

Fondateur d'IT-Connect.fr et d'Information-security.fr. Auditeur sécurité chez Amossys.

    mickael has 478 posts and counting.See all posts by mickael

    2 pensées sur “Port mirroring sous Linux avec iptables

    • Bonjour,

      Votre tuto est vraiment intéressant et je les lis et mets en pratique régulièrement. Et je voulais savoir si il y’ pas une erreur sur l’adresse ip de gateway « iptables -t mangle -A PREROUTING -i eth0 -p TCP –dport 80 -j TEE –gateway 192.168.1.41 » .Le bon gateway est 192.168.1.40 il me semble.

      Et un grand merci pour vos tuto … qui sont enrichissant en termes de connaissances.

      Répondre
    • Bonjour,

      Vos tutos sont vraiment intéressants et je les lis et mets en pratique régulièrement. Et je me demandais au niveau de ce tuto si l’adresse ip de gateway « iptables -t mangle -A PREROUTING -i eth0 -p TCP –dport 80 -j TEE –gateway 192.168.1.41 » .Le bon gateway est 192.168.1.40 non?

      Et merci pour vos tuto … qui sont enrichissants en termes de connaissances.

      Répondre

    Laisser un commentaire

    Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

     

    Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.