Fortinet – Diagnostique de la translation d’adresse (NAT) sur un Fortigate

Ce billet à pour objectif de d’aider au diagnostic des règles de translation sur un équipement de type Fortigate. Pour information, la version du FortiOS sur laquelle je me base est la version 4.0 MR1.Je commence par donner un exemple d’implémentation (syntaxique), puis je continu sur les commandes de diagnostiques qui permettrons de faciliter le diagnostic du mécanisme.


Exemple d’implémentation d’une règle de NAT:

  1. Identification des flux pour lesquels il faut procéder à la translation.
  2. Création de la règle de NAT.
  3. Application de la règle de NAT de type VIP  (appel des services dans la policy sous forme de service).
  4. Si la règle de Nat est un IPPOOL, celui-ci est appelé dans la règle concerné.

Exemple d’implémentation (port forwarding)1:1

L’exemple ci-dessous permet de donner la syntaxe pour la création d’une règle de type one to one réalisant du port forwarding (translation de port), appelé VIP (Virtual IP) par Fortinet.

config firewall vip
edit « dns »
set extip 192.31.232.198
set extintf « link1 »
set portforward enable
set mappedip 192.31.232.197
set protocol udp
set extport 53
set mappedport 53
next

Exemple d’implémentation N:1

L’exemple ci-dessous permet de donner la syntaxe pour la création d’un pool de NAT dynamique, appelé IPPOOL par Fortinet:

config firewall ippool
edit « datacenter »
set endip 192.29.235.254
set startip 192.29.235.254
next
end

Consulter les règles de translation 1:1 (VIP):

PRO3_test (office) # show firewall vip
config firewall vip
edit « ldaps »
set extip 192.31.232.197
set extintf « link0 »
set portforward enable
set mappedip 192.30.101.4
set extport 636
set mappedport 636
next
edit « dns1 »
set extip 192.31.232.197
set extintf « link0 »
set portforward enable
set mappedip XX.XXX.XXX.X
set protocol udp
set extport 53
set mappedport 53
next

Consulter les règles de types many to one (IPPOOL):

PRO_test (office) # show firewall ippool
config firewall ippool
edit « pooltrap »
set endip 22.21.86.234
set startip 22.21.86.234
next
edit « datacenter »
set endip 192.29.235.254
set startip 192.29.235.254
next
end

Connaitre l’association d’une VIP à une policy:

Consulter l’association d’objets depuis l’instance GLOBAL

PRO_test (global) # diag sys checkused firewall.vip:name dns
entry used by child table dstaddr:name ‘dns’ of entry used by child table dstaddr:name ‘ldaps’ of table firewall.policy:policyid ’45’
PRO3_LIV_Env1 (global) # diag sys checkused firewall.vip:name ldaps
entry used by child table dstaddr:name ‘ldaps’ of table firewall.policy:policyid ’45’

Changer d’instance – passage de l’instance global à l’instance root

PRO3_LIV_Env1 (global) # end
PRO3_LIV_Env1 # config vdom
PRO3_LIV_Env1 (vdom) # edit root
current vf=root:0

Consulter l’association d’objets depuis l’instance (VDOM) root

PRO3_LIV_Env1 (root) # show firewall policy 45
config firewall policy
edit 45
set srcintf « link1 »
set dstintf « link1 »
set srcaddr « all »
set dstaddr « dns » « ldaps »
set action accept
set schedule « always »
set service « DNS » « LDAPS »
next
end

Consulter les IPPOOL actif dans la configuration:

PRO_test (office) # diagnose firewall ippool list
list ippool info:(vf=office)
one ippool entry:
ip range=22.21.86.234-2.21.86.234
one ippool entry:
ip range=192.29.235.254-192.29.235.254

Consulter l’application des IPPOOL actif dans la configuration:

Permet d’interroger un index indiquant ou est appliqué un objet recherché pour tous mécanismes faisant appel à un objet de type IPPOOL (IPPool Datacenter).

PRO_test (global) # diag sys checkused firewall.ippool:name datacenter
entry used by child table poolname:name ‘datacenter’ of table firewall.policy:policyid ‘2’
entry used by child table poolname:name ‘datacenter’ of table firewall.policy:policyid ‘7’
entry used by child table poolname:name ‘datacenter’ of table firewall.policy:policyid ’10’
entry used by child table poolname:name ‘datacenter’ of table firewall.policy:policyid ‘8’
entry used by child table poolname:name ‘datacenter’ of table firewall.policy:policyid ‘9’
entry used by child table poolname:name ‘datacenter’ of table firewall.policy:policyid ’17’
entry used by child table poolname:name ‘datacenter’ of table firewall.policy:policyid ’19’
entry used by child table poolname:name ‘datacenter’ of table firewall.policy:policyid ‘4’
entry used by child table poolname:name ‘datacenter’ of table firewall.policy:policyid ’25’
entry used by child table poolname:name ‘datacenter’ of table firewall.policy:policyid ’28’

Consulter les sessions en court sur le système:

La commande ci-dessous permet de consulter les sessions en cours sur le système:

PRO_test (root) # diagnose sys session list
session info: proto=17 proto_state=00 duration=292 expire=64 timeout=0 flags=00000000 sockflag=00000000 sockport=0 av_idx=0 use=6
origin-shaper=
reply-shaper=
per_ip_shaper=
ha_id=0 hakey=49351
policy_dir=0 tunnel=/
state=may_dirty rem
statistic(bytes/packets/allow_err): org=76513/1201/0 reply=14720/159/1 tuples=4
orgin->sink: org pre->post, reply pre->post dev=14->14/14->14 gwy=192.31.232.198/192.31.232.198
hook=pre dir=org act=dnat 192.31.232.198:52188->192.31.232.197:53(XX.XXX.XXX.1:53)
hook=post dir=org act=snat 192.31.232.198:52188->XX.XXX.XXX.X:53(192.29.235.254:29112)
hook=pre dir=reply act=dnat XX.XXX.XXX.X:53->192.29.235.254:29112(192.31.232.198:52188)
hook=post dir=reply act=snat XX.XXX.XXX.X:53->192.31.232.198:52188(192.31.232.197:53)
misc=0 policy_id=7 auth_info=0 chk_client_info=0 vd=1 serial=0000b07d tos=ff/ff imp2p=0 app=0
dd_type=0 dd_rule_id=0

Consulter les sessions de translation en cours sur le boitier:

PRO_test (office) # get system session list
PROTO   EXPIRE SOURCE           SOURCE-NAT       DESTINATION      DESTINATION-NAT
udp     179    10.250.0.4:48840 192.29.235.254:44608 195.74.121.1:53   –
udp     179    192.31.232.198:37132 192.29.235.254:29544 192.31.232.197:53 XX.XXX.XXX.X:53
udp     177    192.31.232.198:1024 192.29.235.254:51300 192.31.232.197:514 172.28.255.249:514
udp     168    10.250.0.4:31708 192.29.235.254:31572 195.74.121.1:53   –
udp     71     192.31.232.198:48385 192.29.235.254:56165 192.31.232.197:53 XX.XXX.XXX.X:53
icmp    59     10.250.0.4:512   192.29.235.254:34952 195.74.111.1:8

Capturer les flux transitant sur une interface:

La commande ci-dessous permet d’analyser le trafic transitant sur une interface.

Dans l’exemple ci-dessous nous avons réalisé une capture des sessions sur l’interface link1, principalement pour les flux UDP sur le port 53.

L’objectif est de constater que la source NAT est bien l’IP 192.29.235.254

PRO_test (root) # diagnose sniffer packet link1 ‘udp and port 53’
interfaces=[link1]
filters=[udp and port 53]
0.630127 192.29.235.254.35814 -> XX.XXX.XXX.X.53: udp 40
1.880083 192.29.235.254.35814 -> XX.XXX.XXX.X.53: udp 30
1.880387 192.29.235.254.35814 -> XX.XXX.XXX.X.53: udp 27
1.880572 192.29.235.254.35814 -> XX.XXX.XXX.X.53: udp 30
1.880671 192.29.235.254.35814 -> XX.XXX.XXX.X.53: udp 41
1.880756 192.29.235.254.35814 -> XX.XXX.XXX.X.53: udp 34
1.880837 192.29.235.254.35814 -> XX.XXX.XXX.X.53: udp 28
1.880919 192.29.235.254.35814 -> XX.XXX.XXX.X.53: udp 27
1.881000 192.29.235.254.35814 -> XX.XXX.XXX.X.53: udp 45
1.881081 192.29.235.254.35814 -> XX.XXX.XXX.X.53: udp 35
1.881162 192.29.235.254.35814 -> XX.XXX.XXX.X.53: udp 38

Diagnostique des règles de NAT:

La commande ci-dessous permet de passer en mode debug. Elle permet de diagnostiquer les sessions réseaux initiés.

PRO_test (root) # diagnose debug flow show console enable <–show trace messages on console

PRO_test  (root) # diagnose debug flow show function-name enable <–show function name

PRO_test (root) # diagnose debug flow trace start 20 <– Enfin, la dernière étape permet d’activer le debug flow en affichant les 20 dernières sessions.

PRO_test (root) # 2009-11-12 11:50:38 trace_id=2 func=resolve_ip_tuple_fast line=3239 msg= »vd-office received a packet(proto=6, 10.250.0.4:4620->85.14.176.139:23) from internal. »
2009-11-12 11:50:38 trace_id=2 func=resolve_ip_tuple line=3359 msg= »allocate a new session-000030ad »
2009-11-12 11:50:38 trace_id=2 func=vf_ip4_route_input line=1609 msg=« find a route: gw-192.31.232.198 via link0 »
2009-11-12 11:50:38 trace_id=2 func=get_new_addr line=1566 msg= »find SNAT: IP-192.29.235.254(from IPPOOL), port-37508″
2009-11-12 11:50:38 trace_id=2 func=fw_forward_handler line=440 msg= »Allowed by Policy-25: SNAT »
2009-11-12 11:50:38 trace_id=2 func=__ip_session_run_tuple line=1692 msg= »SNAT 10.250.0.4->192.29.235.254:37508″
2009-11-12 11:50:38 trace_id=3 func=resolve_ip_tuple_fast line=3239 msg= »vd-root received a packet(proto=6, 192.29.235.254:37508->85.14.176.139:23) from link1. »
2009-11-12 11:50:38 trace_id=3 func=resolve_ip_tuple line=3359 msg= »allocate a new session-000030ae »
2009-11-12 11:50:40 trace_id=4 func=resolve_ip_tuple_fast line=3239 msg= »vd-office received a packet(proto=6, 10.250

One thought on “Fortinet – Diagnostique de la translation d’adresse (NAT) sur un Fortigate

  1. KHIMA

    Salut,

    Merci pour ces explications !!

    Bonne continuation .

Laisser une réponse

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *