Interconnexion de sites par un VPN Tunnel GRE + IPSec

Il est vrai que pour garantir une stratégie de sécurité efficace il est parfois important d’isoler ses réseaux, notamment ceux qui sont sensibles, d’un point de vue de disponibilité ou de vulnérabilité.
Cependant, la mondialisation fait que, souvent, différentes structures se retrouvent dans le besoin d’interconnecter plusieurs sites suffisamment éloignés pour exclure la possibilité de les interconnecter par un lien physique.
C’est à cette problématique qu’on va essayer de répondre avec le VPN

Le VPN (Virtual Private Newtork), comme son nom l’indique, permet de créer une sorte de réseau privé à travers le réseau internet.
Il permet à des machines distantes, séparées par des équipements réseaux divers, de se parler comme si ces dernières étaient directement connectées.
Même si les technologies VPN sont variées, le principe de base est souvent le même.
Le but est de créer un tunnel entre deux machines à travers internet dans lequel on peut faire passer tout notre trafic, afin de le masquer lorsqu’on traverse les différents firewalls et équipements du réseau.

Tunnel GRE :

Le protocole GRE est considéré comme un protocole de niveau 4 au même titre que TCP / UDP / ICMP . Il encapsule les datagrammes IP, donc par construction, dans le protocole de niveau inférieur à savoir IP. GRE est donc un protocole qui permet de faire de l’IP Over l’IP

Ce dernier ne prévoit aucune stratégie de sécurité. Le trafic transporté par GRE reste visible par les Firewall et les routeurs. Il n’opère qu’une simple encapsulation/dé-encapsulation.

Mise en place

Considérons le schéma suivant avec comme condition de base le fait que le routeur B interdit tout trafic en provenance du sous-réseau 192.168.58.0/24 vers 192.168.59.0/24 et vice versa.

Nous allons donc mettre en place un tunnel GRE sécurisé avec IPSec entre la machine A2 et C1 afin de permettre la communication entre les deux sous réseaux 192.168.58.0/24 et 192.168.59.0/24
On considère que ces deux sous réseaux symbolisent deux sites différents. Et on va essayer de les interconnecter.

Comme GRE est déjà implémenté dans le noyau Linux, sa mise en place ne nécessite aucun programme tiers : la commande ip suffit.

  • Sur la gateway A2 :
#/etc/network/ifup.d/00-gre

ip tunnel add net-c1 mode gre remote 192.168.58.100 local 192.168.57.100 dev eth1 ttl 3
ip link set net-c1 up
ip addr add 192.168.56.254 dev net-c1
ip route add 192.168.59.0/24 dev net-c1
  • Sur la gateway C1
#/etc/network/ifup.d/00-gre

ip tunnel add net-a2 mode gre remote 192.168.57.100 local 192.168.58.100 dev eth0 ttl 3
ip link set net-a2 up
ip addr add 192.168.59.254 dev net-a2
ip route add 192.168.56.0/24 dev net-a2

IPSec

IPSec peut être mis en œuvre en deux modes différents :

  • le mode transport permet juste le chiffrement des paquets de protocoles de niveau 4 entre les deux machines, ce dernier laisse ouvert les entêtes de niveau 3. Ce mode est souvent utilisé lorsqu’on veut sécuriser les échanges entre deux machines.
  • Le mode tunnel quant à lui, chiffre aussi l’entête IP du paquet. c’est le mode par défaut et il est souvent utilisé entre deux Gateway lorsque l’on veut interconnecter deux sites d’une même structure.

Dans notre cas il n’y a aucun intérêt à utiliser IPSec en mode tunnel, car le tunnel est assuré par GRE. On va donc plutôt l’utiliser en mode transport uniquement pour assurer le chiffrement des paquets entre les deux Gateway A2 et C1. On fait alors du GRE over IPSec, c’est-à-dire que les paquets GRE seront encapsulés dans des paquets IPSec.

Mise en place

  • Sur la Gateway A2
#/etc/ipsec.secret

192.168.57.100 192.168.58.100 : PSK "oogha8meex0Jii3El7ua4ahjeghuebaephur3ujuz4SaiJaayu9eechufei4sa8xohMi8ahS7PhowohheCh6aeth7ahzahxa3ongoch1eiJo6ohkaith7oongaSae6qu"
#/etc/ipsec.conf

config setup
        charondebug="all"
        uniqueids=yes

conn gateway-to-c1
        type=transport
        auto=start
        keyexchange=ikev2
        authby=secret
        left=192.168.57.100
        leftsubnet=192.168.56.0/24
        right=192.168.58.100
        rightsubnet=192.168.59.0/24
        ike=aes256-sha1-modp1024!
        esp=aes256-sha1!
        aggressive=no
        keyingtries=%forever
        ikelifetime=28800s
        lifetime=3600s
        dpddelay=30s
        dpdtimeout=120s
        dpdaction=restart
#/etc/network/ifup.d/01-ipsec

ipsec start
  • Sur la Gateway C1
#/etc/ipsec.conf

config setup
        charondebug="all"
        uniqueids=yes

conn gateway-to-a2
        type=transport
        auto=start
        keyexchange=ikev2
        authby=secret
        left=192.168.58.100
        leftsubnet=192.168.59.0/24
        right=192.168.57.100
        rightsubnet=192.168.56.0/24
        ike=aes256-sha1-modp1024!
        esp=aes256-sha1!
        aggressive=no
        keyingtries=%forever
        ikelifetime=28800s
        lifetime=3600s
        dpddelay=30s
        dpdtimeout=120s
        dpdaction=restart
#/etc/network/ifup.d/01-ipsec

ipsec start
#/etc/ipsec.secret

192.168.58.100 192.168.57.100 : PSK "oogha8meex0Jii3El7ua4ahjeghuebaephur3ujuz4SaiJaayu9eechufei4sa8xohMi8ahS7PhowohheCh6aeth7ahzahxa3ongoch1eiJo6ohkaith7oongaSae6qu"

Remarques

On remarque que les trames sont systématiquement rallongée avec les entêtes IPSec et GRE. Ce qui peut nous causer quelques soucis.
En effet les paquets peuvent être mal fragmentés à cause de leurs tailles. Il faut donc tenir compte des 24 octets rajoutés par GRE et des 58 octets rajouté par IPSec. Pour calculer la nouvelle MTU. Cependant chaque configuration nécessite ce genre de réflexion, notamment si on utilise des VXLAN en plus par exemple.

Dans notre cas on va donc mettre la MTU à 1418. ce qui nous donne une taille maximale de segment à 1378.
GRE et IPsec sont des protocoles de niveau 4, ils sont donc transparents pour les protocoles de niveaux supérieurs. Cela permet une parfaite compatibilité avec les applications. Un serveur qui délivre un service réseau ne se rend pas compte du passage à travers le tunnel.

La confidentialité et l’intégrité des échanges est garanti par IPSec. En effet, comme on chiffre le trafic entre les deux machines, on est sûr que ce dernier n’a pas été altéré, qu’il vient de la bonne machine, et qu’aucune autre machine ne puisse voir le contenu des paquets. De plus le chiffrement avec la clé partagée nous protège contre toute tentative d’usurpation IP.

Cependant ce n’est pas parfait comme solution, la clé partagée reste le maillon faible. Si cette dernière se retrouve connu par une autre machine, le trafic en provenance de cette machine est considéré comme légitime et peut porter atteinte à notre structure.

Le problème avec GRE + IPSec, c’est que quand on interconnecte deux sites avec cette solution, il n’y a aucun moyen de restreindre individuellement les accès des machines ou non à d’autres.

Dans le schéma présenté au début de cette section, un tunnel GRE + IPSec est mis en place entre la machine A2 et la machine C1, C’est-à-dire que tout le trafic en provenance du sous-réseau 192.168.58.0/24 vers 192.168.59.0/24 et vice-versa est désormais entièrement possible. Ce qui n’est peut-être pas souhaitable. Il est donc plus judicieux de rajouter des règles de FireWall afin de limiter les accès. En effet, il suffit d’obtenir une adresse IP du sous-réseau 192.168.58.0/24 pour pouvoir communiquer avec toutes les autres machines des deux sous-réseaux 192.168.58.0/24 et 192.168.59.0/24.

9512

Article précédent