User Tools

Site Tools


informatique:fortinet:vpn

This is an old revision of the document!


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.

Théorie

Si les notions de Diffie-Hellman, AES, phase1, phase2 vous sont peu familières, un petit détour par Wikipedia permet de partir sur de bonnes bases : IPSec et IKE (en).

Il existe 2 principes d'établissement de tunnel VPN chez Fortinet :

  • Route-based VPN (phase1-interface) aussi appelé interface-based VPN : Il créer une sous-interface réseau virtuelle ; le trafic est orienté dans le tunnel VPN en fonction de la table de routage. Une route statique avec comme nexthop l'interface tunnel encapsulera le flux dans le tunnel VPN. L'autorisation de traverser le firewall sera contrôlée par les règles de sécurité comme pour un flux standard.

Ce type de VPN ne montera pas s'il n'y a pas de règle de sécurité acceptant du trafic depuis et vers l'interface tunnel, et affichera le message d'erreur “ignoring ike request, no policy configured” dans un debug.

  • Policy Based VPN (ou tunnel-based) : Le trafic est orienté dans le tunnel VPN en fonction des règles de la politique de sécurité. Ces règles auront comme action “ipsec” et devront être définies de manière identique sur les deux Gateway terminant le tunnel VPN car elles participent à l'ouverture de celui-ci (Phase 2). Seul le trafic correspondant aux critères de la police sera encapsulé dans le tunnel VPN.

source : http://docs-legacy.fortinet.com/fos50hlp/50/index.html#page/FortiOS%25205.0%2520Help/Overview.109.5.html

Exemple de configuration

Cas d'un route-based VPN (site-to-site ou branch office) avec une clé secrète partagée (PSK) :

# configuration de la phase1 (IKE)
config vpn ipsec phase1-interface
    edit "tun-CC"
        set interface "wan1"
        set keylife 28800
        set proposal aes256-sha256
        set dhgrp 5
        set remote-gw 10.36.1.1
        set psksecret ENC <hashage PSK>
    end
# configuration de la phase2 (IPSec)
config vpn ipsec phase2-interface
    edit "tun-CC-p2"
        set phase1name "tun-CC"
        set proposal aes256-sha256
        set pfs enable
        set dhgrp 5
        set replay enable
        set auto-negotiate enable
        set keylifekbs 172800
        set keylifeseconds 1800
    next
 
# configuration du routage
config router static
    edit 1
        set comment "route vers le LAN du site distant"
        set device "branch_LAN"
        set dst 192.168.1.0 255.255.255.0
    next
 
# configuration des règles de sécurité
# tout le trafic entre le LAN distant et local est permis
config firewall policy
    edit 1
        set srcintf "tun-CC"
        set dstintf "port1"
        set srcaddr "net-branch_LAN"
        set dstaddr "net-local_LAN"
        set action accept
        set schedule "always"
        set service "ALL"
    next
    edit 2
        set srcintf "port1"
        set dstintf "tun-CC"
        set srcaddr "net-local_LAN"
        set dstaddr "net-branch_LAN"
        set action accept
        set schedule "always"
        set service "ALL"
    next
end

Normalement un tunnel monte quand il y a du trafic dedans. Pour forcer son établissement,

diagnose vpn tunnel up tun-CC-p2

ou, en GUI, aller dans le menu “VPN > Monitoring > IPSec Monitor” puis clic droit sur le tunnel / “Bring up”.

Vérifications

De la configuration des route-based VPN :

show vpn ipsec phase1-interface
show vpn ipsec phase2-interface

Voir l'état courant en CLI (en GUI on peut aller dans le sous-menu “Monitoring” du menu “VPN” ou consulter les logs dans “Log & Reports > Event log > VPN”)

# infos détaillées sur un tunnel :
get vpn ipsec tunnel details
diagnose vpn tunnel list [ name <nom_du_tunnel> ]
 
get vpn ipsec tunnel summary
 
# 2 commande ressemblantes affichant l'utilisation des algorithmes
# de chiffrement par mode de traitement (software-CPU / hardware-NPU (offloading))
get vpn ipsec stats crypto
diagnose vpn ipsec status
 
diagnose vpn tunnel stat
 
# afficher tous les tunnel UP (qui ont des SA)
diagnose vpn tunnel dumpsa
 
# coupé ou lancer le tunnel IPSec spécifié
diagnose vpn tunnel [ up | down ] phase2-itf-name
 
# supprimer les SAs d'un tunnel
diagnose vpn tunnel flush tunnel-name
# supprimer les SAs d'un tunnel + reseter la conf NAT-T et DPD
diagnose vpn tunnel reset tunnel-name
 
diagnose vpn ike errors

Debug/Troubleshoot

# état du debug
diagnose debug info
 
# debug IPsec dans la console
diagnose debug console
diagnose debug console timestamp en
diagnose debug application ike -1
diagnose vpn ike log-filter dst-addr4 10.10.10.1
 
# on lance le debug
diagnose debug enable
 
# pour quitter le debug, pas de ctrl+C !
diagnose debug disable
 
# on supprime nos filtres
diagnose debug console timestamp dis
diagnose debug application ike 0
diagnose vpn ike log-filter clear

Supprimer une SA :

diagnose vpn tunnel flush tun-CT-extra

Liens utiles :

Divers

Offloading

Créer 2 tunnels vers le même host

Dans certains cas on peut avoir besoin de créer 2 tunnels vers la même machine (et sur la même interface). On ne peut pas utiliser la même remote-gw (la même IP de peer) donc on doit créer un IP secondaire sur les 2 interfaces WAN.

# existant :
FW1:wan1,IP1 O=========tu1=========O FW2:wan2,IP2
 
# ce que l'on veut faire
FW1:wan1,IP1 O=========tu1=========O FW2:wan2,IP2
FW1:wan1,IP3 O=========tu2=========O FW2:wan2,IP4

Le second tunnel tu2 utilise les IPs secondaires IP3 et IP4 déclarées respectivement sur les mêmes interfaces physiques que IP1 et IP2 (sur FW1 et FW2).

Pour forcer les Forti à utiliser ces IPs secondaires pour établir le tunnel tu2, on doit préciser celles-ci comme local-gw en CLI (l'option n'existe pas en GUI) :

# sur FW1
config vpn ipsec phase1-interface
   edit tu2
      set local-gw IP3
      next
 
# sur FW2
config vpn ipsec phase1-interface
   edit tu2
      set local-gw IP4
      next
informatique/fortinet/vpn.1523603780.txt.gz · Last modified: 2018/04/13 07:16 by pteu