GREY-X // NETWORK LAB
ETH0 → INTERNET
ETH1 → LAN
NAT → FORWARD → INTERNET
Dans un laboratoire de pentesting réseau, il est souvent nécessaire de construire une petite infrastructure permettant à plusieurs machines de communiquer avec Internet tout en restant derrière un réseau privé.
Une machine Linux peut parfaitement jouer ce rôle.
Dans cette configuration :
eth0est l’interface connectée à Internet ;eth1est l’interface connectée au réseau interne ;dnsmasqfournit les adresses DHCP aux clients ;iptablesassure le routage et le NAT.
L’objectif est d’obtenir :
INTERNET
│
eth0
│
┌─────────▼─────────┐
│ LINUX BOX │
│ │
│ DHCP dnsmasq │
│ NAT iptables │
│ ROUTING │
└─────────┬─────────┘
│
eth1
192.168.50.1
│
┌─────────┴─────────┐
│ │
192.168.50.100 192.168.50.101
Client 1 Client 2
01 // Vérifier les interfaces
Link to heading
Avant toute configuration, il faut identifier correctement les interfaces.
ip -br addr
On peut obtenir quelque chose comme :
eth0 UP 192.168.1.20/24
eth1 UP 192.168.50.1/24
Dans notre laboratoire :
eth0 → réseau externe
eth1 → réseau interne
Cette distinction est fondamentale.
Une erreur d’interface dans une règle NAT ou dans dnsmasq peut rapidement rendre le laboratoire inutilisable.
02 // Configurer l'interface LAN
Link to heading
L’interface eth1 doit posséder une adresse IP statique.
Exemple :
sudo ip addr flush dev eth1
sudo ip addr add 192.168.50.1/24 dev eth1
sudo ip link set eth1 up
Vérification :
ip addr show eth1
On doit retrouver :
inet 192.168.50.1/24
Cette adresse devient la passerelle du réseau interne.
03 // Configurer dnsmasq
Link to heading
Nous pouvons maintenant distribuer automatiquement des adresses IP aux clients connectés à eth1.
Exemple de configuration :
interface=eth1
bind-interfaces
dhcp-range=192.168.50.100,192.168.50.200,255.255.255.0,12h
dhcp-option=3,192.168.50.1
dhcp-option=6,192.168.50.1
La logique devient :
Client
│
├── DHCPDISCOVER
│
▼
dnsmasq
│
├── IP : 192.168.50.x
├── GW : 192.168.50.1
└── DNS : 192.168.50.1
Tester la configuration :
sudo dnsmasq --test
Puis redémarrer le service :
sudo systemctl restart dnsmasq
04 // Activer le forwarding IPv4
Link to heading
À ce stade, les clients peuvent communiquer avec la machine Linux.
Mais Linux ne transfère pas encore automatiquement leurs paquets entre eth1 et eth0.
Il faut activer le forwarding IPv4 :
sudo sysctl -w net.ipv4.ip_forward=1
Vérification :
sysctl net.ipv4.ip_forward
Résultat attendu :
net.ipv4.ip_forward = 1
C’est une étape essentielle.
Sans forwarding :
LAN ──X──> INTERNET
Avec forwarding :
LAN ───────────────> INTERNET
05 // Comprendre le NAT
Link to heading
Le réseau interne utilise des adresses privées :
192.168.50.0/24
Ces adresses ne sont généralement pas routables directement sur Internet.
Le NAT va permettre de traduire les connexions sortantes du réseau privé vers l’adresse IP de eth0.
Conceptuellement :
Client LAN
192.168.50.100:54321
│
▼
Linux Router
│
│ NAT
▼
192.168.1.20:54321
│
▼
INTERNET
Le serveur distant voit alors la connexion provenant de l’adresse de l’interface externe.
06 // La règle iptables MASQUERADE
Link to heading
Pour un réseau interne utilisant une adresse IP dynamique sur eth0, MASQUERADE est généralement pratique :
sudo iptables -t nat -A POSTROUTING \
-s 192.168.50.0/24 \
-o eth0 \
-j MASQUERADE
Décomposition :
-t nat
Utilise la table NAT.
-A POSTROUTING
Ajoute une règle à la chaîne POSTROUTING.
-s 192.168.50.0/24
Concerne les paquets provenant du réseau interne.
-o eth0
Concerne les paquets qui sortent par eth0.
-j MASQUERADE
Effectue la traduction d’adresse source.
07 // Autoriser le forwarding
Link to heading
Le NAT seul ne suffit pas.
Il faut également autoriser le transfert entre les interfaces :
sudo iptables -A FORWARD \
-i eth1 \
-o eth0 \
-s 192.168.50.0/24 \
-j ACCEPT
Puis autoriser le trafic de retour :
sudo iptables -A FORWARD \
-i eth0 \
-o eth1 \
-d 192.168.50.0/24 \
-m conntrack \
--ctstate ESTABLISHED,RELATED \
-j ACCEPT
Nous obtenons alors :
eth1 eth0
│ │
│ │
▼ ▼
┌───────────┐ ┌──────────┐
│ LAN │ │ INTERNET │
└─────┬─────┘ └────▲─────┘
│ │
│ FORWARD │
└───────────────────────┘
│
NAT
│
POSTROUTING
08 // Vérifier les règles
Link to heading
Afficher les règles de forwarding :
sudo iptables -L FORWARD -n -v
Afficher les règles NAT :
sudo iptables -t nat -L -n -v
Les compteurs sont particulièrement intéressants.
Si les paquets traversent réellement la machine, les compteurs devraient augmenter.
Cela permet de vérifier que le trafic passe bien par les règles attendues.
09 // Tester depuis le client
Link to heading
Sur un client connecté à eth1 :
ip addr
On doit obtenir une adresse similaire à :
192.168.50.100/24
Vérifier la route :
ip route
On devrait retrouver :
default via 192.168.50.1
Tester la passerelle :
ping 192.168.50.1
Puis tester une adresse IP externe :
ping 1.1.1.1
Si cela fonctionne mais que les noms de domaine ne fonctionnent pas :
ping google.com
alors le problème est probablement lié au DNS plutôt qu’au NAT.
10 // Observer le NAT en temps réel
Link to heading
Une des parties les plus intéressantes du laboratoire est d’observer les paquets.
Sur le routeur :
sudo tcpdump -ni eth1
Puis :
sudo tcpdump -ni eth0
On peut comparer les paquets entrant par eth1 avec ceux sortant par eth0.
Avant NAT :
SRC = 192.168.50.100
Après traduction :
SRC = IP_DE_ETH0
C’est ici que le fonctionnement du NAT devient réellement concret.
On ne regarde plus uniquement une règle iptables.
On observe la transformation du trafic.
11 // Vérifier les connexions suivies
Link to heading
Linux maintient également un état des connexions pour le suivi du trafic.
On peut inspecter les informations conntrack avec :
sudo conntrack -L
Cela permet notamment de comprendre comment Linux associe les connexions sortantes et leurs réponses.
Le mécanisme est particulièrement important lorsque l’on utilise :
ESTABLISHED
RELATED
dans les règles du firewall.
12 // Architecture finale
Link to heading
Notre laboratoire possède maintenant trois fonctions principales :
INTERNET
│
│
eth0
│
┌───────▼───────┐
│ LINUX BOX │
│ │
│ iptables │
│ NAT │
│ FORWARDING │
│ │
│ dnsmasq │
│ DHCP │
└───────┬───────┘
│
eth1
│
192.168.50.0/24
│
┌──────┴──────┐
│ │
Client Client
La chaîne logique est donc :
DHCP
↓
IP + Gateway + DNS
↓
Client → eth1
↓
FORWARD
↓
NAT / MASQUERADE
↓
eth0
↓
INTERNET
13 // Ce que ce laboratoire permet d'apprendre
Link to heading
Cette configuration paraît simple, mais elle permet d’étudier plusieurs concepts fondamentaux :
- DHCP ;
- routage IPv4 ;
- forwarding Linux ;
- NAT ;
- conntrack ;
- iptables ;
- DNS ;
- capture réseau ;
- architecture LAN/WAN.
C’est également une excellente base pour construire ensuite des laboratoires plus complexes : segmentation VLAN, firewalling, proxy, DNS personnalisé, IPv6, captive portal ou encore environnements de test pour l’analyse réseau.
L’intérêt n’est pas seulement de réussir à obtenir Internet sur un client.
L’intérêt est de comprendre chaque étape du chemin parcouru par le paquet.
┌──────────────────────────────────────┐
│ GREY-X │
│ │
│ DHCP → ROUTING → NAT → INTERNET │
│ │
│ UNDERSTAND THE PACKET │
└──────────────────────────────────────┘
On apprend. On teste. On observe. On documente.