User Tools

Site Tools


informatique:fortinet:vpn

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
informatique:fortinet:vpn [2018/06/08 14:35] – [Supprimer les logs "tunnel-stats"] pteuinformatique:fortinet:vpn [2025/01/09 15:05] (current) – [Debug/Troubleshoot] pteu
Line 1: Line 1:
 ======VPN (IPsec)====== ======VPN (IPsec)======
  
-Un tunnel IPsec ou VPN IPSec est une méthode standardisée permettant d'établir un canal sécurisé pour échanger des données entre 2 points d'un réseau IP. Il travaille au niveau 3 OSI (couche réseau) et fourni les fonctionnalités de chiffrement, confidentialité, authentification, et intégrité des données.+Un tunnel IPsec ou VPN IPSec est une méthode standardisée permettant d'établir un canal sécurisé pour échanger des données entre 2 points d'un réseau IP. Il travaille au niveau 3 OSI (couche réseau) et fournit les fonctionnalités de chiffrement, confidentialité, authentification, et intégrité des données.
  
 =====Théorie===== =====Théorie=====
Line 20: Line 20:
 # configuration de la phase1 (IKE) # configuration de la phase1 (IKE)
 config vpn ipsec phase1-interface config vpn ipsec phase1-interface
-    edit "tun-CC"+    edit "branch_LAN"
         set interface "wan1"         set interface "wan1"
 +        set ike-version 2
 +        set localid "routeur1"
         set keylife 28800         set keylife 28800
-        set proposal aes256-sha256 +        set proposal aes256-sha512 aes256-sha256 
-        set dhgrp 5+        set dhgrp 14 19
         set remote-gw 10.36.1.1         set remote-gw 10.36.1.1
         set psksecret ENC <hashage PSK>         set psksecret ENC <hashage PSK>
Line 30: Line 32:
 # configuration de la phase2 (IPSec) # configuration de la phase2 (IPSec)
 config vpn ipsec phase2-interface config vpn ipsec phase2-interface
-    edit "tun-CC-p2" +    edit "branch_LAN-p2" 
-        set phase1name "tun-CC+        set phase1name "branch_LAN
-        set proposal aes256-sha256+        set proposal aes256-sha512 aes256-sha256
         set pfs enable         set pfs enable
-        set dhgrp 5+        set dhgrp 5 14 19
         set replay enable         set replay enable
         set auto-negotiate enable         set auto-negotiate enable
Line 53: Line 55:
 config firewall policy config firewall policy
     edit 1     edit 1
-        set srcintf "tun-CC"+        set srcintf "branch_LAN"
         set dstintf "port1"         set dstintf "port1"
         set srcaddr "net-branch_LAN"         set srcaddr "net-branch_LAN"
Line 63: Line 65:
     edit 2     edit 2
         set srcintf "port1"         set srcintf "port1"
-        set dstintf "tun-CC"+        set dstintf "branch_LAN"
         set srcaddr "net-local_LAN"         set srcaddr "net-local_LAN"
         set dstaddr "net-branch_LAN"         set dstaddr "net-branch_LAN"
Line 75: Line 77:
 Normalement un tunnel monte quand il y a du trafic dedans. Pour forcer son établissement, Normalement un tunnel monte quand il y a du trafic dedans. Pour forcer son établissement,
 <code bash> <code bash>
-diagnose vpn tunnel up tun-CC-p2+diagnose vpn tunnel up branch_LAN-p2
 </code> </code>
 ou, en GUI, aller dans le menu "VPN > Monitoring > IPSec Monitor" puis clic droit sur le tunnel / "Bring up". ou, en GUI, aller dans le menu "VPN > Monitoring > IPSec Monitor" puis clic droit sur le tunnel / "Bring up".
 +
 +<WRAP center round important 80%>
 +Il est fortement recommandé d'utiliser des algorithmes offloadés, c'est-à-dire accélérés matériellement par le NP ou le CP du Fortigate (cela dépend du modèle), de façon à alléger le processeur central du Forti. On peut vérifier les compteurs IPSec par unité de traitement avec la commande ''diagnose vpn ipsec status'' : si tout est bien configuré, la partie "SOFTWARE" doit avoir ses compteurs vides.
 +</WRAP>
 +
 +
 +=====Négociation des protocoles=====
 +
 +Les protocoles de chiffrement et de hachage, configurés sur chaque équipement d'extrémité du tunnel, sont pondérés par leur ordre d'apparition dans la conf : dans l'exemple ''aes256-sha512 aes256-sha256'', si le premier matche c'est lui qui sera choisi. Idem pour la **PFS** (Perfect Forward Secrecy) dans le choix du groupe Diffie-Hellman.
 +
 +L'initiateur (//initiator//, le routeur qui initie l'établissement du tunnel) envoie séquentiellement chaque proposition (//proposal// ; elle contient l'algorithme de chiffrement, hachage et DH si PFS) au répondeur (//responder//), qui choisit et valide dès que l'une d'elle matche sa propre configuration. Cette négociation se passe une première fois pour établir la phase 1, puis une seconde fois pour la phase 2.
 +
  
 =====Vérifications===== =====Vérifications=====
Line 95: Line 109:
 get vpn ipsec tunnel summary get vpn ipsec tunnel summary
  
-# 2 commande ressemblantes affichant l'utilisation des algorithmes+# afficher les drivers de chiffrement utilisés 
 +diagnose vpn ipsec driver 
 +# afficher la répartition du traitement IPSec sur les CPUs 
 +diagnose vpn ipsec cpu 
 + 
 +# 2 commandes ressemblantes affichant l'utilisation des algorithmes
 # de chiffrement par mode de traitement (software-CPU / hardware-NPU (offloading)) # de chiffrement par mode de traitement (software-CPU / hardware-NPU (offloading))
 get vpn ipsec stats crypto get vpn ipsec stats crypto
Line 114: Line 133:
  
 diagnose vpn ike errors diagnose vpn ike errors
 +</code>
 +
 +====Exemple de vérifications====
 +
 +<code bash>
 +FORTI (wan) # get vpn ipsec tunnel name tun-marseille
 +gateway
 +  name: 'tun-marseille'
 +  local-gateway: 10.31.0.73:0 (static)
 +  remote-gateway: 10.31.12.9:0 (static)
 +  status: up
 +  mode: ike-v2
 +  interface: 'v3105' (78) vrf:0
 +  rx  packets: 643073  bytes: 67086822  errors: 0
 +  tx  packets: 2350605  bytes: 207470508  errors: 4
 +  dpd: on-idle/negotiated status:ok idle: 5000ms  retry: 3  count: 0
 +  selectors
 +    name: 'tun-marseille'
 +    auto-negotiate: disable
 +    mode: tunnel
 +    src: 0:0.0.0.0/0.0.0.0:0
 +    dst: 0:0.0.0.0/0.0.0.0:0
 +    SA
 +      lifetime/rekey: 28800/5905
 +      mtu: 1934
 +      tx-esp-seq: 8822
 +      replay: disabled
 +      qat: 0
 +      inbound
 +        spi: b00d1e95
 +        enc:  aes-cb  4c0b83eea72747c991f3b4cc6113729cd69e327e83b8f77f8a625a2220458b04
 +        auth: sha256  4e717b1391ebc02ae46fd0b4087ffe065ff8b368f42d68dd6ef834fe75b31632
 +      outbound
 +        spi: 9bbfbba3
 +        enc:  aes-cb  5a269cdbeb8d5e26abb3563f989b46ec8f6d803b37e9dcd5b6ac1a252c80b67e
 +        auth: sha256  44a5c16231a7fda50bd2211b1318bc0a8531f56ddfb810657878f0575dd78b9b
 +      NPU acceleration: encryption(outbound) decryption(inbound)
 +</code>
 +Cela affiche les infos sur le tunnel établi "tun-marseille":
 +  * les IPs source/destination, l'interface de sortie
 +  * les compteurs de tunnel
 +  * le mode IKE (v2)
 +  * la MTU du tunnel
 +  * les security associations (SA), une par sens, utilisant l'AES256 (**enc:  aes-cb** suivi d'une clé de longueur correspondant à 256 bits), SHA256 pour le hachage (**auth: sha256**)
 +
 +<code bash>
 +FORTI (wan) # diagnose vpn tunnel list name tun-marseille
 +list ipsec tunnel by names in vd 0
 +------------------------------------------------------
 +name=tun-marseille ver=2 serial=11 10.31.0.73:0->10.31.12.9:0 nexthop=10.31.0.74 tun_id=10.31.12.9 tun_id6=::10.31.12.9 status=up dst_mtu=2000 weight=1
 +bound_if=78 real_if=78 lgwy=static/1 tun=intf mode=auto/1 encap=none/568 options[0238]=npu create_dev frag-rfc  role=primary accept_traffic=1 overlay_id=0
 +
 +proxyid_num=1 child_num=0 refcnt=5 ilast=0 olast=1 ad=/0
 +stat: rxp=644097 txp=2354856 rxb=67086822 txb=207606200
 +dpd: mode=on-idle on=1 status=ok idle=5000ms retry=3 count=0 seqno=4
 +natt: mode=none draft=0 interval=0 remote_port=0
 +fec: egress=0 ingress=0
 +proxyid=tun-marseille proto=0 sa=1 ref=19 serial=1
 +  src: 0:0.0.0.0-255.255.255.255:0
 +  dst: 0:0.0.0.0-255.255.255.255:0
 +  SA:  ref=6 options=10225 type=00 soft=0 mtu=1934 expire=3033/0B replaywin=0
 +       seqno=98bd esn=0 replaywin_lastseq=00000000 qat=0 rekey=0 hash_search_len=1
 +  life: type=01 bytes=0/0 timeout=28503/28800
 +  dec: spi=b00d1e95 esp=aes key=32 4c0b83eea72747c991f3b4cc6113729cd69e327e83b8f77f8a625a2220458b04
 +       ah=sha256 key=32 4e717b1391ebc02ae46fd0b4087ffe065ff8b368f42d68dd6ef834fe75b31632
 +  enc: spi=9bbfbba3 esp=aes key=32 5a269cdbeb8d5e26abb3563f989b46ec8f6d803b37e9dcd5b6ac1a252c80b67e
 +       ah=sha256 key=32 44a5c16231a7fda50bd2211b1318bc0a8531f56ddfb810657878f0575dd78b9b
 +  dec:pkts/bytes=0/0, enc:pkts/bytes=16101/2374524
 +  npu_flag=03 npu_rgwy=10.31.12.9 npu_lgwy=10.31.0.73 npu_selid=1e dec_npuid=1 enc_npuid=1
 </code> </code>
  
 =====Debug/Troubleshoot===== =====Debug/Troubleshoot=====
  
 +NB : ne pas oublier qu'un tunnel ne montera __que__ si au moins une règle de sécurité le matche, sur le firewall du Fortigate. Si ce n'est pas le cas, le Fortigate fautif se trahira en affichant :
 +<code bash>
 +2018-12-03 11:29:25 ike 3:tunnel-noob: ignoring IKE request, no policy configured
 +</code>
 +
 +Mise en place du debug
 <code bash> <code bash>
 # état du debug # état du debug
Line 139: Line 233:
 diagnose vpn ike log-filter clear diagnose vpn ike log-filter clear
 </code> </code>
 +
 +Exemple d'un affichage de debug :
 +<code bash>
 +#Phase1: AES128/SHA1/DH19
 +[...]
 +2025-01-09 11:25:24.435518 ike 1: negotiation result
 +2025-01-09 11:25:24.435525 ike 1: proposal id = 1:
 +2025-01-09 11:25:24.435529 ike 1:   protocol id = ISAKMP:
 +2025-01-09 11:25:24.435533 ike 1:      trans_id = KEY_IKE.
 +2025-01-09 11:25:24.435537 ike 1:      encapsulation = IKE/none
 +2025-01-09 11:25:24.435541 ike 1:         type=OAKLEY_ENCRYPT_ALG, val=AES_CBC, key-len=128
 +2025-01-09 11:25:24.435545 ike 1:         type=OAKLEY_HASH_ALG, val=SHA.
 +2025-01-09 11:25:24.435549 ike 1:         type=AUTH_METHOD, val=RSA_SIG.
 +2025-01-09 11:25:24.435553 ike 1:         type=OAKLEY_GROUP, val=ECP256.
 +2025-01-09 11:25:24.435558 ike 1: ISAKMP SA lifetime=86400
 +
 +#Phase2 AES256/SHA256/DH14
 +[...]
 +2025-01-09 11:25:25.679709 ike 1:dialup_88: negotiation result
 +2025-01-09 11:25:25.679714 ike 1:dialup_88: proposal id = 1:
 +2025-01-09 11:25:25.679719 ike 1:dialup_88:   protocol id = IPSEC_ESP:
 +2025-01-09 11:25:25.679723 ike 1:dialup_88:   PFS DH group = 14
 +2025-01-09 11:25:25.679728 ike 1:dialup_88:      trans_id = ESP_AES_CBC (key_len = 256)
 +2025-01-09 11:25:25.679733 ike 1:dialup_88:      encapsulation = ENCAPSULATION_MODE_TUNNEL
 +2025-01-09 11:25:25.679737 ike 1:dialup_88:         type = AUTH_ALG, val=SHA2_256
 +2025-01-09 11:25:25.679742 ike 1:dialup_88: set pfs=MODP2048
 +</code>
 +
 +Interprétation de mots-clés issus du debug:
 +  * "type=**OAKLEY_ENCRYPT_ALG**" : algo de chiffrement
 +  * "type=**OAKLEY_HASH_ALG**" : méthode d'Authentification
 +  * "type=**OAKLEY_GROUP**" : groupe DH
 +
 +Codes des versions d'algo:
 +  * AES: en P1: **AES_CBC, key-len=x** ; en P2: **ESP_AES_CBC (key_len = x)**
 +  * SHAx: SHA si SHA1 ; sinon SHA2_256, SHA2_384 ou SHA2_512
 +  * Diffie-Hellman (DH) groups :
 +    * 5:  MODP1536
 +    * 14: MODP2048
 +    * 15: MODP3072
 +    * 19: ECP256   <- courbes elliptiques
 +    * 20: ECP384
 +    * 21: ECP521
  
 Supprimer une SA : Supprimer une SA :
 <code bash> <code bash>
-diagnose vpn tunnel flush tun-CT-extra+diagnose vpn tunnel flush tun-marseille
 </code> </code>
  
informatique/fortinet/vpn.1528468501.txt.gz · Last modified: 2018/06/08 14:35 by pteu