← retour aux snippets

iptables: rediriger un port (DNAT) proprement

Mettre en place un NAT de port en PREROUTING + MASQUERADE pour exposer un service interne.

bash security #iptables#nat#dnat

objectif

Rediriger le trafic entrant sur l’IP publique vers une machine interne en sécurité.

code minimal

# variables
PUB_IF=eth0
DST_IP=192.0.2.10
DST_PORT=8080
SRC_PORT=80

# activer le forward IP
sudo sysctl -w net.ipv4.ip_forward=1

# DNAT vers la cible interne
sudo iptables -t nat -A PREROUTING -i "$PUB_IF" -p tcp --dport "$SRC_PORT" -j DNAT --to-destination "$DST_IP:$DST_PORT"

# autoriser le forward et masquerade la sortie
sudo iptables -A FORWARD -p tcp -d "$DST_IP" --dport "$DST_PORT" -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o "$PUB_IF" -j MASQUERADE

utilisation

# tester depuis l'extérieur
curl -sS http://VOTRE_IP/ -I

variante(s) utile(s)

# restreindre à une source spécifique
sudo iptables -A FORWARD -p tcp -s 198.51.100.0/24 -d "$DST_IP" --dport "$DST_PORT" -j ACCEPT

notes

  • préférez nftables si disponible; iptables demeure répandu.
  • persistez vos règles via iptables-save/restore (voir snippet dédié).