Configuration du transfert de ports sous Linux avec iptables : Exposer un réseau privé

Le transfert de ports (Port Forwarding) est une technique réseau permettant de rediriger le flux de données entrant sur une adresse IP et un port spécifiques vers une autre destination. Dans un environnement Linux, cette méthode est couramment utilisée pour rendre accessible un service situé sur un réseau local (LAN) sans IP pubilque via une machine passerelle possédant, elle, un accès au réseau externe (WAN).

Architecture type

Imaginons le scénario suivant :

  • Serveur Relais (Host A) : Adresse IP publique 1.2.3.4. C'est le point d'entrée.
  • Serveur de Destination (Host B) : Adresse IP privée 10.0.0.5. Héberge un service Web sur le port 80.
  • Objectif : Mapper le port 9000 du Serveur Relais vers le port 80 du Serveur de Destination.

Étape 1 : Activation du routage au niveau du noyau

Par défaut, la plupart des distributions Linux désactivent le transfert de paquets entre les interfaces réseau. Il est impératif d'activer cette fonctionnalité dans le kernel.

# Activation immédiate via sysctl
sudo sysctl -w net.ipv4.ip_forward=1

# Pour rendre le changement permanent, éditez /etc/sysctl.conf et ajoutez :
# net.ipv4.ip_forward = 1

Étape 2 : Configuration des règles de redirection (NAT)

L'outil iptables utilise la table nat pour modifier les adresses source et destination des paquets. Nous devons configurer deux mécanismes : le DNAT (Destination NAT) pour l'entrée et le SNAT (Source NAT) ou MASQUERADE pour le retour des données.

# 1. Redirection du flux entrant (DNAT)
# On change la destination du paquet arrivant sur le port 9000 vers l'IP interne
iptables -t nat -A PREROUTING -p tcp --dport 9000 -j DNAT --to-destination 10.0.0.5:80

# 2. Masquage de l'adresse source (SNAT / MASQUERADE)
# On s'assure que le serveur de destination voit le paquet comme venant du relais
# Cela permet au paquet de retour de repasser par le relais
iptables -t nat -A POSTROUTING -p tcp -d 10.0.0.5 --dport 80 -j MASQUERADE

Étape 3 : Autorisation du transit dans la table Filter

Si votre pare-feu a une politique par défaut restrictive (DROP), vous devez explicitement autoriser le passage des paquets à travers la chaîne FORWARD.

# Autoriser le transfert des paquets vers la destination spécifique
iptables -A FORWARD -p tcp -d 10.0.0.5 --dport 80 -j ACCEPT

# Autoriser le trafic de retour (états établis)
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

Tableau récapitulatif des prérequis

Composant Condition requise
IP Publique La machine relais doit être joignable depuis l'Internet.
Connectivité Interne Le relais doit pouvoir pinguer/joindre l'IP privée de destination.
Ports Ouverts Le port d'écoute (ex: 9000) doit être ouvert dans le pare-feu externe.
Persistance Les règles iptables doivent être sauvegardées (ex: iptables-persistent).

Gestion de la persistance

Les commandes iptables sont volatiles et s'effacent au redémarrage. Selon votre distribution, utiliesz les outils suivants pour sauvegarder la configuration :

# Sur Debian/Ubuntu
sudo apt install iptables-persistent
sudo netfilter-persistent save

# Sur RHEL/CentOS
sudo service iptables save

Considérations sur la sécurité

Le transfert de ports expose directement un service interne à des menaces externes. Il est frotement recommandé de restreindre l'accès à certaines adresses IP sources si possible en ajoutant l'option -s [IP_SOURCE] dans la règle de PREROUTING. Pour des architectures plus complexes où le serveur relais ne peut pas atteindre directement le serveur interne, l'utilisation de tunnels SSH ou de solutions comme VPN/Reverse Proxy (frp) est préférable.

Étiquettes: iptables linux-networking dnat snat port-forwarding

Publié le 9 juillet à 09h00