DNAT sur Palo Alto

Pourquoi la Security Policy utilise l'IP publique et non l'IP privée

📌 Le scénario

💻
User Internet
1.2.3.4
requête HTTP
🔥
Palo Alto FW
203.0.113.1 IP publique
après DNAT
🖥️
Serveur Web
192.168.1.50 IP privée interne
1
Forwarding Lookup
Route
📦 Paquet à ce stade
SRC :1.2.3.4
DST :203.0.113.1
Le firewall reçoit le paquet. Il cherche dans sa table de routage comment atteindre 203.0.113.1 — son IP publique sur l'interface untrust.
ℹ️ Le paquet n'est pas encore modifié. Le firewall sait juste par quelle interface il est arrivé.
2
NAT Policy Lookup
DNAT détecté
📦 Paquet à ce stade
SRC :1.2.3.4
DST :203.0.113.1
⬇ DNAT identifié mais PAS encore appliqué
futur DST :192.168.1.50(en attente)
Le firewall trouve une règle NAT : 203.0.113.1 → 192.168.1.50.

Il mémorise cette traduction mais ne l'applique pas encore.

192.168.1.50 c'est ton serveur web interne — l'utilisateur ne connaît que l'IP publique, mais derrière c'est ce serveur qui va répondre.
⚠️ Le paquet voyage toujours avec DST = 203.0.113.1 à cette étape !
3
Security Policy Lookup
Décision Allow/Deny
📦 Ce que voit la Security Policy
SRC :1.2.3.4
DST :203.0.113.1← IP publique !
La Security Policy vérifie le paquet avant que le DNAT soit appliqué.

Elle voit donc 203.0.113.1 comme destination — pas 192.168.1.50.
Comment écrire la règle ?
DST = 192.168.1.50← IP privée → NE MATCHERA PAS
DST = 203.0.113.1← IP publique → CORRECT
🔴 C'est l'erreur classique du débutant : écrire la règle avec l'IP privée du serveur. La règle ne matche jamais et le trafic est bloqué !
4
Session créée — NAT appliqué
Paquet transmis
📦 Paquet APRÈS la session
SRC :1.2.3.4
DST :192.168.1.50← DNAT appliqué !
La Security Policy a autorisé le trafic. La session est créée.

Maintenant le DNAT est réellement appliqué : la destination devient 192.168.1.50 et le paquet est envoyé au serveur web interne.
✅ Le serveur web 192.168.1.50 reçoit le paquet et peut répondre à l'utilisateur.

⚡ À retenir absolument

Sur Palo Alto, la Security Policy s'applique sur les adresses AVANT NAT.

Pour un serveur interne 192.168.1.50 exposé via l'IP publique 203.0.113.1, tu dois écrire ta règle avec DST = 203.0.113.1 (l'IP publique), pas l'IP privée.