Kali-linux distribution GNU/Linux spécialisée dans l'audit et le pentest.
Kali-linux.fr Communauté française de kali-linux
comment configurer sa machine kali linux en routeur

Bonjour à tous chères linuxiennes et chers linuxiens !

« Oh non encore lui… Il va encore nous retourner le cerveau avec ses blagues vaseuses… »

Quel accueil… Et si je vous dis qu’aujourd’hui je vais vous montrer comment faire en sorte que votre distribution Linux vous serve de routeur, par exemple pour pouvoir monter un petit écosystème simulant un réseaux pour vos tests et amusements personnels , ou pour pouvoir également lancer un ping (ou autre..) depuis une seconde machine connectée sur le même réseau que votre Linux alors que seul votre Linux a accès à un VPN (Cela peut être utile pour vos entrainement sur HackTheBox ou autres plateformes similaires).

« Mmmm mince il est fort ce c.. »

Vous êtes prêts ? C’est parti !

Pour ce tuto nous aurons besoin de :

  • D’une distribution Linux (pour ma part j’utiliserai 5.10.0-kali7-amd64 pour ce tuto)
  • (Non obligatoire mais préférable) D’une autre machine ou machine virtuelle(VM) (Linux ou Windows ou Mac peu importe) pour tester votre configuration. Pour ma part j’utiliserai un Windows 10 et une Ubuntu 20.04.1 pour l’exemple.

I) Théorie et présentation de l’exemple

Pour commencer en douceur et ne pas se perdre, je vous propose que nous utilisions le plan suivant pour nous servir d’exemple à suivre pour ce tuto ( les adresses affichées ne sont pas forcément les vrais , elles ne sont là qu’à titre d’exemple) :

Nous allons faire en sorte que l’Ordinateur 1 (ou machines virtuelle) puisse communiquer avec le VPN alors que seulement le routeur (notre machine Linux ici) est connecté à celui-ci. Nous partirons du principe pour cet exemple que l’Ordinateur 1 et le routeur sont déjà dans le même réseau (et peuvent donc communiquer entre eux), ce ne sera pas un cours de réseau ne vous inquiétez pas ! Dans la partie pratique je vous montrerai comment faire dans le cas où l’Ordinateur 1 est une machine Windows et dans le cas où l’Ordinateur 1 est une machine Linux.

Néanmoins nous allons aborder quelques aspects du réseaux de manière théorique pour comprendre ce que nous faisons !

« Ah la théorie… super… »

Ne vous inquiétez pas ce sera léger !

Comme vous pouvez le voir sur le plan ci-dessus, j’ai attribué des adresses fictives pour illustrer, dans les faits comme nous le verrons dans la partie pratique ci-après, les adresses seront différentes.

A) Table de routage

Commençons par la base de notre petit projet , à savoir la/les table(s) de routage.

Professeur Wikipédios ?

Une table de routage est une structure de données utilisée par un routeur ou un ordinateur en réseau et qui associe des préfixes à des moyens d’acheminer les trames vers leur destination. C’est un élément central du routage IP.

https://fr.wikipedia.org/wiki/Table_de_routage

Merci professeur, autrement dit, la table de routage va permettre à l’ordinateur de savoir où envoyer les paquets sur le réseaux pour qu’il arrive à la destination souhaitée.

Si un ordinateur doit communiquer avec plusieurs réseaux aux structures différentes , il est possible qu’il possède plusieurs tables de routage à la fois. Rassurez vous ce ne sera pas notre cas ici.

« Ouf… »

B) Le routage sous Linux

Vous devez vous en douter, Linux se sert des tables de routages. Pour afficher la table de routage effective il suffit de taper dans le terminal la commande :

route -n

Dans mon cas cela donne :

Vous remarquerez le titre de la table : Kernel IP routing table , c’est tout simplement car sous Linux c’est le kernel qui est en charge du routage des paquets , et il se sert des tables comme structure de routage.

Déchiffrons donc les champs de cette table ensemble :

  • Destination (Réseau) : C’est une adresse IP qui indique le réseau de destination vers lequel les paquets vont être envoyés.
  • Gateway (La passerelle) : C’est une adresse IP qui indique par où les paquets vont transiter pour arriver au réseau de destination. Ils seront envoyés à cette adresse.
  • Genmask (Le masque de sous-réseau) : C’est une suite de 4 octets (comme une adresse IP) qui permet d’indiquer quelle est la taille de chaque partie de l’adresse IP (partie réseau et partie hôte). Par exemple, 255.255.255.0 comme ci-dessus indique que les 3 premiers octets seront utilisés pour le réseau et le dernier pour les adresses d’hôtes (ici la première ligne correspond à toutes les adresses comprises entre10.0.2.1 et 10.0.2.254).
  • Flags (Drapeaux/Indicateurs) : Ils indiquent l’état actuel de la route, ici U signifie que la route est active (Up) et G que la route est une passerelle (Gateway). Il existe d’autres flags moins courants pour les curieux vous pouvez les consulter dans le man (man route)
  • Metric (Hops/Sauts) : C’est un nombre qui indique combien d’intermédiaires (de machines/routeurs) il reste avant d’arriver à la destination.
  • Ref (Références) : Un champ qui indique le nombre de références associées à la route. (C’est un champ qui n’est plus vraiment utilisé de nos jours)
  • Use (Utilisation) : C’est un compteur du nombre de fois où la route est utilisée.
  • Iface (Interface réseau) : C’est le nom de l’interface réseau qui sera utilisée pour cette route.

Ainsi ma table de routage montrée plus haut, peut se comprendre comme suit :

  1. Envoie à l’adresse 10.0.2.2 tous les paquets qui sont destinés au réseau 0.0.0.0 en passant par l’interface eth0.
  2. Envoie à l’adresse 0.0.0.0 tous les paquets qui sont destinés au réseau 10.0.2.0 ayant pour masque réseau 255.255.255.0 en passant par l’interface eth0.

C) Le routage sous Windows

Comme nous l’avons dit plus haut, nous allons dans la partie pratique connecter une machine Windows à notre routeur , il faut donc regarder comment se présente la table de routage sous Windows. Sous Windows la table de routage a une forme très similaire à celle utilisée sous Linux fort heureusement pour nous !

Pour afficher la table de routage sous Windows 10 (que j’utiliserai pour l’exemple) il suffit d’utiliser la commande suivante dans la console :

route print

Chez moi par exemple cela donne ça :

Déchiffrons donc les champs de la table de routage Windows ensemble :

  • Destination réseau : Il s’agit de l’adresse du réseau de destination, celui vers lequel nous allons envoyer nos paquets.
  • Masque réseau (ou Masque de sous-réseau) : C’est une suite de 4 octets (comme une adresse IP) qui permet d’indiquer quelle est la taille de chaque partie de l’adresse IP (partie réseau et partie hôte).
  • Adr. passerelle : C’est une adresse IP qui indique par où les paquets vont transiter pour arriver au réseau de destination. Ils seront envoyés à cette adresse.
  • Adr. Interface : Il s’agit de l’adresse IP associée à l’interface utilisée. Plus simplement, si vous avez une seule interface réseau, c’est votre adresse IP locale.
  • Métrique : C’est un nombre qui indique combien d’intermédiaires (de machines/routeurs) il reste avant d’arriver à la destination.

Vous voyez finalement c’est très similaire à ce que nous avons vu sous Linux précédemment, rien de bien compliqué !

Ne vous inquiétez pas la théorie c’est finie !

« Ouuuuuuuuuuaisssss !! « 

II) La pratique

Bon, nous y sommes, revoyons le plan une dernière fois. Nous avons à notre disposition un ordinateur (Ordinateur 1) et une machine sous Linux (Le routeur). Le but va être de faire en sorte que notre Ordinateur 1 puisse communiquer avec le VPN alors que le VPN est connecté à une interface du routeur. Le but de cette manœuvre peut par exemple être de pouvoir lancer une attaque depuis votre Ordinateur 1 sur une des machines du laboratoire de HackTheBox. C’est d’ailleurs avec cette idée en tête que je vais écrire cette partie pratique. Nous traiterons 2 cas pour ce tuto, à savoir le premier où on utilisera une machine Windows en tant qu’Ordinateur 1 et le second où on utilisera une machine Linux en tant qu’Ordinateur 1. Ainsi vous aurez à la fois la procédure pour Windows et pour Linux bien qu’elles soient très similaires.

J’utiliserai dans mon cas les OS suivants (libre à vous bien sur de les changer cela n’est qu’un exemple) :

  • Kali Linux (5.10.0-kali7-amd64) qui servira de routeur et qui sera donc connectée au VPN de HackTheBox pour l’exemple
  • Windows 10 qui servira d’Ordinateur 1 pour le cas n°1
  • Ubuntu 20.04.1 qui servira d’Ordinateur 1 pour le cas n°2

Nous allons commencer par configurer le routeur , cette partie sera commune pour les deux cas que nous aborderons.

A) Configuration du routeur

Premièrement nous devons connecter notre routeur au VPN, comme expliqué précédemment je vais me connecter au VPN de HackTheBox pour l’exemple, et ce à l’aide de OpenVPN. Dans mon cas j’obtiens une interface réseau nommée ‘tun0’ qui a pour adresse ‘10.10.14.6’ sur mon routeur.

Maintenant nous devons demander au kernel d’activer L’IP forwarding (la transmission de paquets IP), sachant que nous allons travailler uniquement avec de l’IPV4 il suffit de taper la commande suivante (il vous faudra être root ou utiliser sudo pour effectuer cette action) :

echo 1 > /proc/sys/net/ipv4/ip_forward

Le kernel est désormais en mesure d’effectuer le forwarding, mais il ne va pas se faire tout seul !

« Ah mince dommage… ça aurait été plus facile.. surtout que la je fais cuire mes pâtes en même temps du coup.. »

Ne vous inquiétez pas nous allons voir facilement comment on fait.

Voici rapidement ce que nous avons besoin de dire au kernel :

  • Transmettre tous les paquets en provenance de l’interface de notre réseau local sur lequel notre Ordinateur 1 sera également connecté (dans mon cas elle s’appelle ‘eth0’) vers l’interface connectée au VPN (‘tun0’ chez moi). Le tout si et seulement si la connexion est établie ou en relation avec une connexion établie
  • Faire le transfert dans le sens inverse (de ‘tun0’ vers ‘eth0’) mais cette fois ci dans tous les cas (question de facilité).

Disclaimer : Je ne vous recommande pas d’autoriser les relations avec une connexion établie (RELATED) dans le cas d’une connexion à un VPN car cela peut permettre à un attaquant d’ouvrir un port de manière non désirée. Néanmoins dans le cas présent cela est plus facile pour la configuration et comporte peu de risques car nous sommes sur HackTheBox.

De cette façon nous allons pouvoir permettre au paquets venants de notre Ordinateur 1 d’aller vers les machines du réseau de HackTheBox.

Pour donner les informations décrites précédemment au kernel nous procédons comme suit (Il vous faudra être root ou utiliser sudo pour effectuer ces actions) :

iptables -A FORWARD -i tun0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT

Nous avons bientôt fini, il ne reste plus qu’à faire le NAT (pour les pointilleux, cela sera du SNAT) . Pour les débutants, sachez que la table NAT permet de faire la translation d’adresse réseau (NAT) sur différents paquets. Dans notre cas nous allons faire en sorte de permettre de modifier uniquement l’adresse source mais de conserver l’adresse de destination. Une dernière chose à préciser et que nous allons également utiliser le principe de mascarade, ce principe consiste à utiliser une adresse IP publique source pour cacher derrière elle toutes les adresses IP du réseau privé.

Notre but va donc de faire en sorte que tous les paquets provenant du réseau local (et donc privé) 193.168.1.0 seront perçus comme provenant de l’IP publique de l’interface ‘tun0’ (dans les faits elle n’est pas publique bien sur , mais nous faisons comme si c’était le cas).

Pour ce faire nous allons utiliser la commande suivante :

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o tun0 -j MASQUERADE

Vérifions que tout est bien en place :

iptables -L

Tout semble bon du côté du routeur, passons maintenant à la configuration de l’Ordinateur 1.

B) Cas n°1 : L’ordinateur 1 est une machine Windows

« Pffffiou c’est compliqué toutes ces configurations.. »

Aucune crainte, pour l’Ordinateur 1 cela va être extrêmement plus simple et plus rapide, car nous allons simplement devoir dire une seule chose au système d’exploitation , à savoir :

  • Pour atteindre le réseau 10.10.10.0 (HackTheBox) il faut transmettre tes paquets au routeur Linux

Pour ce faire sous Windows il suffit de rentrer la commande suivante sur l’invite de commande (il vous faudra les droits d’administrateur pour effectuer cette opération) :

route add 10.10.10.0 mask 255.255.255.0 IP_DU_ROUTEUR

Dans mon cas cela donnera :

route add 10.10.10.0 mask 255.255.255.0 192.168.1.88

On vérifie que la commande a bien été enregistrée dans la table :

route print

Il ne reste plus qu’à tester en effectuant un ping depuis notre Ordinateur 1 vers une des machines du réseau de HackTheBox :

Tout semble fonctionner ! Facile non ?!

C) Cas n°2 : L’ordinateur 1 est une machine Linux

Finissons maintenant avec le cas ou l’Ordinateur 1 est une machine Linux. Et vous savez quoi , cela va être tout aussi facile que sous Windows !

Rappelons rapidement ce que nous avons besoin de dire au kernel de faire :

  • Pour atteindre le réseau 10.10.10.0 (HackTheBox) il faut transmettre tes paquets au routeur Linux

Pour cela rien de plus simple il suffit d’utiliser la commande suivante :

route add -net 10.10.10.0 netmask 255.255.255.0 gw IP_DU_ROUTEUR

Dans mon cas cela donnera :

route add -net 10.10.10.0 netmask 255.255.255.0 gw 192.168.1.88

On vérifie que tout est bien enregistré dans la table de routage :

route -n

Puis il nous reste qu’à effectuer un ping depuis notre Ordinateur 1 sous Linux vers une des machines du réseau de HackTheBox :

Et pouf magie (ou presque) tout fonctionne bien !

III) Conclusion et digression

Nous voilà enfin rendu à la fin de ce tuto ! Vous avez maintenant une solution pour pouvoir connecter une machine à une machine Linux servant de routeur, pour qu’elle puisse dialoguer avec un VPN alors que seule la machine servant de routeur est connectée à celui ci. À vous de voir comment cela va vous servir mais c’est bien pratique quand on est sur HackTheBox par exemple pour lancer des attaques depuis une machine Windows ou depuis une autre version de Linux 😉

Pour l’exemple je n’ai connecté qu’une seule machine au routeur, mais il est évident que vous pouvez connecter plusieurs machines à la fois , la configuration du routeur effectuée est générique et donc pourra rester la même quelque soit le nombre de machine que vous allez connecter. Il vous suffira de rajouter aux tables de routages des machines que vous souhaitez ajouter au réseau, les entrées nécessaires, comme vu dans la section II.A ou la section II.B.

J’ai pris l’exemple de HackTheBox mais il est évident que cela est valable pour la plupart des VPN (Si toute fois cela est autorisé).

Je vous remercie une fois de plus de votre lecture et j’espère que ce tuto vous a plu ! À très bientôt pour de nouveaux tutos !

ZeR0-@bSoLu

2 thoughts on “Changer Linux en routeur”
  1. Il serait plus intéressant en 2021 d’utiliser les commandes de iproute2 au lieu des commandes dépréciées qui sont indiquées ici. https://en.wikipedia.org/wiki/Iproute2. Éventuellement pourquoi pas utiliser nftables en remplacement d’iptables.

    N’oubliez pas également de préciser que les actions suivantes ne sont pas persistantes : sysctl, ajout des routes et des règles iptables.

    1. Bonjour avant tout 🙂
      Merci pour vos précisions 🙂
      Et c’est le but que cela ne soit pas persistant par défaut 🙂
      Bien cordialement,

      ZeR0-@bSoLu

Leave a Comment

Time limit is exhausted. Please reload CAPTCHA.