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.
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.
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.
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
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 :
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. 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
.
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
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"
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
.
9567