Table of Contents
ASA: Partie 1 - syntaxe NAT
Ce tutoriel est traduit de l'artcle https://www.practicalnetworking.net/stand-alone/cisco-asa-nat, il comporte trois parties:
- La première partie, explore la syntaxe de configuration des objets, les termes Réel et Mappé, la syntaxe de NAT automatique et la syntaxe de NAT manuel.
- La deuxième partie, fournit des exemples de configuration sur un pare-feu Cisco ASA pour chaque type de traduction d'adresse: NAT statique, PAT statique, PAT dynamique, NAT dynamique.
- La troisième partie, explore les concepts avancés de la traduction d'adresses réseau sur un pare-feu Cisco ASA ou Cisco ASA-X.
Il existe deux ensembles de syntaxe disponibles pour configurer la traduction d'adresses sur un Cisco ASA. Ces deux méthodes sont appelées NAT automatique et NAT manuel. La syntaxe des deux utilise une construction connue sous le nom d'objet. La configuration des objets fait intervenir les mots-clés réels et mappés. Dans la partie 1 de cet article, aborde ces cinq termes.
Les Objets
Un objet est une construction qui représente n'importe quel élément unique d'un environnement réseau. Deux types d'objets peuvent être configurés:
- un objet réseau - représente une adresse IP, un sous-réseau IP ou une plage d'adresses IP
- un objet de service - représente un ensemble d'un protocole, d'un port source et/ou d'un port de destination
L’idée est de configurer et de définir un objet, puis de référencer cet élément dans la configuration par le nom de l’objet.
Objets réseau
Pour configurer un objet réseau, on utilise la syntaxe suivante pour créer l'objet:
object network <Object Name>
On définit ensuite le contenu de l'objet comme une seule adresse IP, ou un seul sous-réseau IP ou une seule plage d'adresses IP à l'aide de l'une des commandes ci-dessous:
host <Adresse IP> subnet <ID réseau> <masque de sous-réseau> range plage <Adresse IP de début> <Adresse IP de fin>
Voici des exemples de chacun des trois types d'objets réseau:
Pour créer un objet réseau représentant l’adresse IP d'un serveur Web, utiliser la syntaxe suivante:
object network WEB-SERVER host 172.16.30.15
Pour créer un objet réseau qui représente un réseau intérieur, utiliser la syntaxe suivante:
object network INSIDE-NETWORK subnet 172.16.30.0 255.255.255.0
Enfin, pour créer un objet réseau qui représente une plage d'adresses IP particulière, utiliser la syntaxe suivante. Cela définira une plage qui comprend les cinq adresses IP dans la plage inclusive de 72.6.6.10 à 72.6.6.14.
object network PUBLIC-IPs range 72.6.6.10 72.6.6.14
Objets de service
Pour configurer un objet de service, on utilise la syntaxe suivante pour créer l'objet:
object service <Object Name>
Le contenu de l'objet de service doit inclure au moins un protocole et peut également inclure un port source, un port de destination ou les deux. Voici des exemples des quatre possibilités:
object service PROTOCOL service esp object service PROT-DST service tcp destination eq 80 object service PROT-SRC service tcp source gt 1023 object service PROT-SRC-DST service udp source eq 53 destination eq 53
Le numéro de port spécifique représenté par l'objet peut être identifié à l'aide de certains opérateurs - l'exemple ci-dessus utilise eq et gt. Cinq opérateurs différents existent:
| eq <Port#> | Le port doit être égal à <Port#> |
| gt <Port#> | Le port doit être supérieur à <Port#> (égal à <Port#> ne correspondra pas) |
| lt <Port#> | Le port doit être inférieur à <Port#> (égal à <Port#> ne correspondra pas) |
| neq <Port#> | Le port ne doit pas être égal à <Port#> |
| range <Start#> <End#> | Le port doit être compris entre <Start#> et <End#> |
Affichage des objets
Deux commandes sont disponibles pour afficher les objets:
La commande show run object répertorie les objets essentiellement tels qu'ils ont été configurés ci-dessus:
asa98# show run object object service PROTOCOL service esp object service PROT-DST service tcp destination eq www object service PROT-SRC service tcp source gt 1023 object service PROT-SRC-DST service udp source eq domain destination eq domain object network WEB-SERVER host 172.16.30.15 object network INSIDE-NETWORK subnet 172.16.30.0 255.255.255.0 object network PUBLIC-IPs range 72.6.6.10 72.6.6.14
Et la commande en ligne show run object affiche la même chose que ci-dessus, sauf que chaque définition d'objet sera sur la même ligne que le nom de l'objet:
asa98# show run object in-line object service PROTOCOL service esp object service PROT-DST service tcp destination eq www object service PROT-SRC service tcp source gt 1023 object service PROT-SRC-DST service udp source eq domain destination eq domain object network WEB-SERVER host 172.16.30.15 object network INSIDE-NETWORK subnet 172.16.30.0 255.255.255.0 object network PUBLIC-IPs range 72.6.6.10 72.6.6.14
L'utilisation de l'option in-line facilite beaucoup le «pipe include» et la recherche d'un nom d'objet et/ou d'une définition spécifique:
asa98# show run object in-line %%|%% include WEB
object network WEB-SERVER host 172.16.30.15
Si on fait le “pipe include” sans l'option in-line, on aura simplement reçu le nom complet de l'objet, mais pas la définition de l'objet.
Les termes real et mapped
La configuration NAT sur Cisco ASA utilisera les mots-clés real et mapped. Ces termes peuvent être appliqués aux adresses IP ou aux interfaces. On va les définir avec l'exemple d'un NAT statique ci-dessous:
Le mot real indique ce qui est réellement configuré sur un serveur.
Par exemple, le serveur Web à l'adresse IP .15 est vraiment configuré avec l'adresse IP 172.16.30.15, ce qui signifie que la carte réseau réelle a vraiment l'adresse IP 172.16.30.15 configurée. Par conséquent, 172.16.30.15 est considérée comme la véritable IP publique.
De plus, la véritable adresse IP existe sur l’interface interne de l’ASA. Par conséquent, pour la traduction ci-dessus, l'interface Inside est considérée comme l'interface réelle.
Le mot mapped indique des attributs après une traduction.
Par exemple, l'adresse réelle 172.16.30.15 est en cours de traduction en 72.6.6.15. Ce qui fait de 72.6.6.15 l'adresse mappée. De plus, l’adresse mappée existe sur l’interface extérieure de l’ASA. Par conséquent, l'interface outside est considérée comme l'interface mappée.
Une autre façon de s'en souvenir est que les attributs mappés n'existent que parce que l'ASA les a créés, alors que les attributs réels existent malgré toute configuration sur l'ASA.
NAT Automatique et NAT manuel
NAT automatique
Le NAT automatique peut être utilisé chaque fois qu'on doit prendre une décision NAT basée uniquement sur la source du trafic. Ce qui signifie que chacun des quatre types de traductions (Static NAT, Static PAT, Dynamic PAT, Dynamic NAT) peut être configuré avec Auto NAT.
Syntaxe NAT automatique
Voici la syntaxe du NAT automatique (rappelez-vous que cela sera appliqué dans la définition d'objet):
nat (<REAL-INTERFACE>,<MAPPED-INTERFACE>) <static/dynamic> <MAPPED-IP>
| nat | La configuration pour Auto NAT commence par la commande nat dans une définition d'objet |
| <REAL-INTERFACE> | L'interface sur l'ASA qui fait face au <real-ip> (défini dans l'objet) |
| <MAPPED-INTERFACE> | L'interface sur l'ASA qui fait face au <mapped-ip> |
| <static/dynamic> | Utiliser static pour une Static NAT ou un Static PAT, utiliser dynamic pour un Dynamic NAT ou un Dynamic PAT |
| <MAPPED-IP> | L'adresse IP vers laquelle l'objet est traduit. Cela peut être spécifié comme adresse IP directement ou en utilisant le nom d'un autre objet. On a également la possibilité de spécifier le mot-clé interface pour utiliser l'adresse IP attribuée à l'interface mappée |
Les éléments de la syntaxe n'incluent pas la spécification d'un <real-ip> - il est hérité de la définition de l'objet. Par conséquent, Auto NAT ne peut être configuré que directement dans un objet.
Exemple complet de configuration d'un NAT statique pour le serveur Web à partir de l'image ci-dessus. L'IP réelle 172.16.30.15 est traduit en IP mappé 72.6.6.15 lorsque des paquets voyagent entre l'interface réelle à l'intérieur et l'interface mappée à l'extérieur (et vice versa).
object network WEB-SERVER host 172.16.30.15 nat (inside,outside) static 72.6.6.15
Exemple complet de configuration d'un PAT dynamique pour le segment intérieur de l'image ci-dessus. Les adresses IP réelles du réseau 172.16.30.0/24 partagent l'adresse IP de l'interface mappée à l'extérieur.
object network INSIDE-NETWORK subnet 172.16.30.0 255.255.255.0 nat (inside,outside) dynamic interface
NAT automatique avec une traduction de port
La syntaxe ci-dessus n'inclue pas les arguments nécessaires pour vous permettre de mapper un port à un autre - à savoir, pour configurer un PAT statique.
Pour traduire les ports, il fauyt ajouter la section service à la fin de la commande AutoNAT, avec la syntaxe comme suit (encore une fois, cela est configuré dans un objet):
nat (<REAL-INTF>, <MAPPED-INTF>) static <MAPPED-IP> [service <tcp/udp> <REAL-PORT> <MAPPED-PORT>]
| service | indique une traduction des numéros de port |
| <tcp/udp> | spécifiant si cette traduction affecte les ports TCP ou UDP |
| <REAL-PORT> | identifie le numéro de port associé à la véritable adresse IP |
| <MAPPED-PORT> | désigne le numéro de port associé à l'adresse IP mappée |
Il n'y a pas de traduction explicite «dynamique» entre les ports, donc une traduction PAT statique utilisera toujours la désignation statique.
Exemple complet de configuration d'un PAT statique pour le serveur Web. Le port SSH du serveur Web (TCP/22) est masqué derrière un port non standard à l’extérieur (TCP/2222):
object network WEB-SERVER-SSH host 172.16.30.15 nat (inside,outside) static 72.6.6.15 service tcp 22 2222
I a fallu créer un nouvel objet - chaque objet ne peut contenir qu'une seule traduction, et on utilise déjà l'objet WEB-SERVER pour l'exemple de NAT statique ci-dessus.
NAT manuel
Il existe deux principales différences entre le NAT manuel et le NAT automatique:
- Auto NAT peut uniquement prendre une décision NAT basée sur la source du trafic1).
- Auto NAT ne peut traduire que la source du trafic2).
- Manual NAT peut prendre une décision NAT basée sur la source, ou à la fois sur la source et la destination.
- Manual NAT peut traduire la source, la destination ou même à la fois la source et la destination en même temps.
En bref, Manual NAT peut faire tout ce que Auto NAT peut faire, et un peu plus - à savoir, Policy NAT et Twice NAT.
Bien entendu, cela ne rend pas Auto NAT obsolète. Au lieu de cela, Auto NAT «beaucoup plus simple à configurer» doit être utilisé chaque fois que les fonctionnalités supplémentaires de Manual NAT ne sont pas nécessaires.
De plus, les instructions Auto NAT se trient automatiquement dans un ordre (généralement) raisonnable. Alors que l'ordre des instructions Manual NAT doit être pris en compte manuellement.
La syntaxe du Manual NAT nécessite l'utilisation d'objets pour chaque référence aux adresses IP et aux ports. La configuration des objets a été abordée plus haut dans cet article. On peut également utiliser des groupes d'objets, qui sont des constructions qui combinent plusieurs objets ensemble.
Syntaxe Manual NAT - Source uniquement
La syntaxe des instructions Manual NAT qui n'affecte que la source du trafic est la suivante:
nat (<REAL-INTF>,<MAPPED-INTF>) source <static/dynamic> <REAL-SRC> <MAPPED-SRC>
La syntaxe est similaire à Auto NAT, à l'exception d'une différence clé: le Manual NAT n'est pas configuré dans un objet - il est configuré directement à partir du mode de configuration globale (configure terminal).
Voici la définition de chaque argument dans la syntaxe Manual NAT:
| nat | Toutes les instructions NAT manuelles commencent par la commande nat |
| <REAL-INTF> | L'interface qui fait face aux adresses contenues dans l'objet <REAL-SRC> |
| <MAPPED-INTF> | L'interface qui fait face aux adresses contenues dans l'objet <MAPPED-SRC> |
| source | Indique que les trois arguments suivants correspondent et traduisent la source du trafic sortant |
| <static/dynamic> | Utiliser static pour un Static NAT ou un Static PAT, utiliser dynamic pour un Dynamic NAT ou un Dynamic PAT |
| <REAL-SRC> | Un objet qui définit la ou les adresses IP de pré-traduction |
| <MAPPED-SRC> | Un objet qui définit la ou les adresses IP de post-traduction |
Les exemples ci-dessus d'un NAT statique et d'un PAT dynamique avec AutoNAT peuvent être réécrits à l'aide du NAT manuel comme suit:
object network WEB-SERVER host 172.16.30.15 object network WEB-SERVER_PUBLIC host 72.6.6.15 nat (inside,outside) source static WEB-SERVER WEB-SERVER_PUBLIC
object network INSIDE-NETWORK subnet 172.16.30.0 255.255.255.0 nat (inside,outside) source dynamic INSIDE-NETWORK interface
l'instruction Manual NAT est configurée en dehors de la définition d'objet. De plus, non peut toujours utiliser le mot-clé interface pour désigner en utilisant l'adresse IP du <MAPPED-INTF> pour le <MAPPED-SRC>.
La déclaration Manual NAT ci-dessus est la forme la plus simple de la syntaxe Manual NAT. Plus tard, on ajoutera deux autres clauses à cette déclaration: une clause qui considère la destination et une clause qui considère les ports.
Cependant, pour bien comprendre comment lire l'instruction NAT manuelle dans sa forme la plus simple, on va utiliser cette technique pour transformer la syntaxe Manual NAT en un langage plus lisible par l'homme.
Explication du NAT
Chaque variation de l'instruction Manual NAT qui suit commencera par la syntaxe exacte ci-dessus. Dans chaque cas, on élargira également la lectuer pour simplifier la compréhension de ce qui est traduit et de la manière dont il est traduit.
Syntaxe manual NAT - Source uniquement
La syntaxe du Manual NAT qui prend en compte uniquement la source du trafic est la suivante:
nat (<REAL-INTF>,<MAPPED-INTF>) source <static/dynamic> <REAL-SRC> <MAPPED-SRC>
- Lorsque le trafic sur <REAL-INTERFACE> correspond:
- une source <REAL-SRC>
- Envoyer au <MAPPPED-INTERFACE> et traduire
- … la source en utilisant une traduction <static|dynamic> en <MAPPED-5PC>
Syntaxe manual NAT - Source et destination
La syntaxe du Manual NAT qui prend en compte à la fois la source et la destination du trafic est la suivante:
nat (<REAL-INTF>,<MAPPED-INTF>) source <static/dynamic> <REAL-SRC> <MAPPED-SRC> destination static <REAL-DST> <MAPPED-DST>
On remarquera que la syntaxe est identique à celle du Manual NAT “source uniquement” dans la section précédente. Le seul ajout est cette partie à la fin:
… destination static <REAL-DST> <MAPPED-DST>
| destination | Indique que les trois arguments suivants correspondent et/ou traduisent la destination du trafic sortant |
| static | La destination du trafic sortant ne peut être traduite que explicitement - dynamique n'est pas une option |
| <REAL-DST> | Un objet qui définit la ou les adresses IP de destination de la pré-traduction |
| <MAPPED-DST> | Un objet qui définit la ou les adresses IP de destination post-traduction |
Lorsqu'on décompose chaque clause de la commande nat ... sur une ligne distincte:
nat (REAL-INTERFACE> , <MAPPED-INTERFACE>)
source <static|dynamic> <REAL-SRC> <MAPPED-SRC>
[destination static <REAL-DST> <NAPPED-DST>
On peut traduire les actions ainsi :
- Lorsque le trafic sur le <REAL-INTERFACE> correspond:
- une source de <REAL-SRC>
- une destination de <RFAL-DST>
- Envoyer à <MAPPED-INTERFACE> et translater …
- … la source en utilisant une traduction <static/dynamic> vers MAPPED-SRC
- … la destination en utilisant une traduction static en MAPPED-DST.
La traduction ne se produira que si le trafic correspond à la fois à la source et à la destination désignées dans les objets <REAL-SRC> et <REAL-DST>.
Syntaxe manual NAT - Traductions de port
La syntaxe Manual NAT qui implique la traduction des ports TCP ou UDP ainsi que des adresses IP est la suivante:
nat (<REAL-INTF>,<MAPPED-INTF>) source <static/dynamic> <REAL-SRC> <MAPPED-SRC> [destination static <REAL-DST> <MAPPED-DST>] service <REAL-PORT> <MAPPED-PORT>
On remarquera que la syntaxe est identique à celle du Manual NAT «source et destination» dans la section précédente. Les seules différences sont que la clause de destination est facultative et la clause de service est ajoutée à la fin:
… service <REAL-PORT> <MAPPED-PORT>
| service | Indique que cette traduction traduira également les ports, c'est-à-dire que ce sera un PAT |
| <REAL-PORT> | Un objet de service qui définit les ports et protocoles de pré-traduction |
| <MAPPED-PORT> | Un objet de service qui définit les ports et protocoles de post-traduction |
Plus tôt, On a vu fourni un exemple de PAT statique utilisant Auto NAT. On peut créer une traduction identique en utilisant Manual NAT avec le code suivant:
object network WEB-SERVER host 172.16.30.15 object network WEB-SERVER_PUBLIC host 72.6.6.15 object service TCP22 service tcp source eq ssh object service TCP2222 service tcp source eq 2222 nat (inside,outside) source static WEB-SERVER WEB-SERVER_PUBLIC service TCP22 TCP2222
Chaque référence à des adresses IP ou à des ports dans une instruction NAT manuelle doit utiliser un objet.
De plus, les objets de service ont été définis en spécifiant un port source. Les déclarations NAT sont écrites du point de vue du trafic sortant (voyageant de l'intérieur vers l'extérieur).
Dans l'exemple de PAT statique, l'objectif était de traduire le port de destination TCP/2222 à l'extérieur en TCP/22 à l'intérieur pour le trafic entrant. Dans le paquet sortant, le port source passera de TCP/2222 à TCP/22. La déclaration NAT ci-dessus correspond simplement au trafic de réponse.
Lorsqu'on décompose chaque clause de la commande nat ... sur une ligne distincte:
nat (<REAL-INTERFACE>,<MAPPED-INTERFACE>)
source <static/dynamic> <REAL-SRC> <MAPPED-SRC>
[destination static <REAL-DST> <NAPPED-DST>]
[service <REAL-PORT> <MAPPED-PORT>]
On peut traduire les actions ainsi :
- Lorsque le trafic du <REAL-INTERFACE> correspondent:
- à une source de <REAL-SRC>
- à une destination de <REAL-DST>
- aux ports dans l'objet de service <REAL-PORT>
- L'envoyer à <MAPPED-INTERFACE> et traduire …
- … la source en utilisant la traduction <static/dynamic> vers <MAPPED-SRC>
- … la destination en utilisant une traduction static vers <MAPPED-DST>
- … les ports de l'objet de service <MAPPED-PORT>.
Encore une fois, le trafic ne sera traduit que si les trois désignations des attributs réels correspondent: <REAL-SRC>, <REAL-DST> et <REAL-PORT>.
