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 port80. - Objectif : Mapper le port
9000du Serveur Relais vers le port80du 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.