Lorsque vous utilisez votre ordinateur en tant que routeur ou serveur qui implique le transfert de données, il est important de configurer le masquage NAT (masquerade NAT) dans votre machine Linux avec iptables.
Sans cela, les paquets ne seront pas en mesure de se rendre dans un sous-réseau/réseau différent.
Dans ce tutoriel, je vous montre comment configurer et utiliser masquerade d’iptables pour faire du NAT.

Table des matières
Principe du masquerade et NAT avec iptables
NAT (Network Address Translation) est une méthode de routage des adresses IP.
On peut l’utiliser pour communiquer entre deux réseaux ou encore partager une connexion internet (avec une adresse IP publique) depuis son réseau LAN.
Iptables permet de configurer cela à travers le masquerade.
Lorsque vous avez besoin de faire transiter tout le trafic d’une interface spécifique par votre ordinateur sans rien changer à l’intérieur des paquets, vous pouvez utiliser masquerade.
MASQUERADE est une cible iptables qui peut être utilisée à la place de la cible SNAT (NAT de source) lorsque l’adresse IP externe de l’interface inet n’est pas connue au moment de l’écriture de la règle (lorsque le serveur obtient l’IP externe dynamiquement).
Pour cela, la table NAT masquerade d’Iptables NAT dissimule la traduction d’adresse.
Cela s’effectue dans la chaîne POSTROUTING de la table NAT.
Pour que cela soit possible, il faut :
- Autoriser le forward des paquets entre les interfaces dans le noyau Linux et dans iptables (si vous filtrez)
- Configurer la règle masquerade dans la table POSTROUTING
Comment faire du NAT complet avec masquerade d’iptables
Créer les règles masquerade sur iptables
Commençons par autoriser le routage des paquets entre les interfaces réseaux.
Pour cela, vous pouvez utilisez cette commande à positionner en début de script iptables.
echo 1 > /proc/sys/net/ipv4/ip_forward
Sinon il est possible de modifier la configuration du noyau Linux via sysctl :
echo net.ipv4.ip_forward = 1 > /etc/sysctl.d/30-ip-forward.conf
Une fois cela autorisé, vous pouvez créer la règle MASQUERADE.
Voici la syntaxe pour utiliser masquerade sur une interface.
L’option -o n’est pas obligatoire, simplement cela permet de filtrer et réduire la règle pour cibler les bonnes interfaces réseaux.
iptables -t nat -A POSTROUTING -o <interface> -j MASQUERADE
Par exemple :
iptables -t nat -A POSTROUTING -o ens33 -j MASQUERADE
POSTROUTING n’affecte que le trafic sortant (et seulement le premier paquet d’une connexion). Si des réponses arrivent sur ens33, elles sont reconnues comme faisant partie de la connexion SNAT et leur adresse de destination (et leur port) sont automatiquement traduits à leurs valeurs originales (celles écrasées par la cible MASQUERADE).
Si besoin, il est possible de filtrer sur l’adresse ou les adresses IP source et sur l’interface réseau sortante : comme ceci :
iptables -t nat -A POSTROUTING -s <source_ip> -o <interface> -j MASQUERADE
Par exemple pour filtrer le masquerade sur un masque de sous réseau :
iptables -t nat -A POSTROUTING -s 192.168.99.0/24 -o ens33 -j MASQUERADE
Comme expliqué en introduction, il est possible d’utiliser la cible SNAT si vous utilisez une adresse IP fixe.
Dans ce cas là, MASQUERADE n’est pas nécessaire.
La syntaxe est alors la suivante pour utiliser l’adresse IP source 172.16.16.94 :
iptables -t nat -A POSTROUTING -s 192.168.99.0/24 -j SNAT --to-source 172.16.16.94
Sécuriser le NAT
Enfin pour affiner la configuration du masquerade et le rendre le plus sûr en filtrant via netfilter :
iptables -A FORWARD -i <interface réseau interne> -o <interface réseau externe> -j REJECT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW -i ! <interface réseau interne> -j ACCEPT
iptables -P INPUT DROP
- iptables -A FORWARD : pour filtrer au mieux les paquets qui transitent entre l’interface entrante et sortante
- iptables -P INPUT : on autorise les connexions existantes puis les nouvelles connections venant de notre réseau interne
- iptables -P INPUT DROP : On bloque tout le reste
Comment afficher la table NAT et les règles MASQUERADE
Pour consulter la table NAT et les règles de la chaîne POSTROUTING, utilisez la commande suivante :
sudo iptables -t nat -L
Le nombre de paquets et d’octets du trafic qui a traversé la règle est indiqué ici. Si ces chiffres sont supérieurs à 0, cela signifie que le trafic réseau passe par notre interface avec succès.
Comment consulter la table NAT (Conntrack)
L’utilitaire conntrack fournit une interface complète en espace utilisateur pour le système de suivi des connexions Netfilter, destinée à remplacer l’ancienne interface /proc/net/ip_conntrack. Cet outil peut être utilisé pour rechercher, lister, inspecter et maintenir le sous-système de suivi des connexions du noyau Linux.
Il faut installer le paquet pour votre distribution Linux avec APT ou DNF :
apt install conntrack # Debian / Ubuntu Mint
dnf install conntrack # Fedora
Puis utilisez l’option -L pour lister les connexions suivies :
conntrack -L
Vous pouvez filtrer sur un protocole (TCP, UDP, ICMP) ou un port source ou de destination :
conntrack -L -p tcp --dport 25