DataCenter

Protection des serveurs contre les attaques DDoS à l’aide de tunnels GRE

Par Philippe Ternision , le 9 mars 2023 , mis à jour le 9 mars 2023 - 11 minutes de lecture
Hacker typing at a computer
Notez l'article

L’augmentation des cyberattaques contre les sites de commerce électronique est un problème majeur pour les entreprises qui dépendent largement des ventes et des transactions en ligne.

Les sites de commerce électronique sont sensibles aux attaques telles que le déni de service distribué (DDoS) et les attaques par force brute, qui peuvent entraîner une perte de trafic commercial rentable de la part d’utilisateurs fidèles ou la compromission de données utilisateur sensibles.

Heureusement, lorsque vos serveurs utilisent un tunnel d’encapsulation de routage générique (GRE), vous pouvez ajouter une couche de protection supplémentaire à distance. Un tel tunnel permet de créer un lien sécurisé entre votre réseau ou vos serveurs et une installation de nettoyage.

Ce faisant, le prestataire de services de sécurité est en mesure de contrôler tout votre trafic entrant pour détecter tout comportement malveillant et arrêter toute menace potentielle avant qu’elle n’atteigne vos serveurs.

Toutes les communications sécurisées sont acheminées vers votre réseau ou vos serveurs pour être traitées via le tunnel GRE après que le trafic entrant a été inspecté. La réponse de votre serveur est transférée du centre d’épuration au consommateur via le tunnel GRE.

Nous définirons les tunnels GRE et décrirons comment ils contribuent à la protection de vos données avec Gcore, un fournisseur mondial de sécurité. Ensuite, nous montrerons comment configurer vos routeurs et vos hôtes dans votre centre de données afin que vous puissiez créer une connexion sécurisée par tunnel GRE vers le centre d’épuration de Gcore.

L’article explique en particulier comment configurer une interface de tunnel GRE pour communiquer en ligne sur un routeur Cisco ou un système Linux.

Qu’est-ce qu’un tunnel GRE et comment fonctionne-t-il ?

Une connexion réseau connue sous le nom de tunnel d’encapsulation de routage générique (GRE) utilise le protocole GRE pour encapsuler plusieurs protocoles de la couche réseau à l’intérieur de liens virtuels point à point sur un réseau IP. Il permet à des sites distants de se connecter à un réseau unique comme s’ils étaient tous deux physiquement connectés à la même infrastructure réseau ou directement l’un à l’autre.

Le protocole GRE est fréquemment utilisé pour étendre un réseau privé sur l’internet ouvert, ce qui permet aux utilisateurs distants d’accéder en toute sécurité aux ressources d’un réseau privé.

Il peut sembler que les tunnels GRE et les VPN soient interchangeables. Cependant, contrairement aux VPN, qui ne peuvent transporter que des données unicast, les tunnels GRE peuvent transporter ou transmettre du trafic multicast, ce qui est nécessaire pour des opérations telles que l’annonce de protocoles de routage et pour les applications de vidéoconférence.

En outre, le trafic des tunnels GRE n’est pas crypté par défaut, bien que les VPN offrent de nombreuses techniques de cryptage utilisant la famille de protocoles IPsec, et que leur trafic puisse être entièrement crypté.

Cependant, la majorité des sites web utilisent TLS/SSL et d’autres normes de cryptage pour l’ensemble du trafic qu’ils transmettent.

Un tunnel GRE est un “tunnel” ou un “métro” qui relie deux réseaux distincts, comme le réseau privé de votre entreprise et le réseau du centre d’épuration de Gcore. Un tunnel GRE permet aux données de circuler entre plusieurs réseaux, tout comme un tunnel de métro permet de circuler entre les stations.

A GRE Tunnel
Un tunnel GRE
Source : G-Core G-Core

Dans cette comparaison, le “train” représente un paquet de données voyageant à travers le tunnel. De la même manière qu’une rame de métro a une destination à l’avant et à l’arrière, ces paquets sont “encapsulés” ou enveloppés d’un en-tête GRE, qui informe le réseau de leur origine et de leur destination.

Original packet vs enscapsulated GRE packet
Paquet original et paquet GRE encapsulé
Source : G-Core G-Core

L’en-tête GRE est retiré une fois que les paquets arrivent à la “station de destination”, après quoi les paquets originaux sont transmis à l’endroit prévu. Les données peuvent alors être transférées en toute sécurité et de manière anonyme sur l’internet public, de la même manière que sur un réseau privé.

Configuration des hôtes de votre réseau pour le tunnelage GRE

Les sections suivantes expliquent comment configurer les interfaces de tunnel sur un routeur Cisco et un serveur Linux dans votre centre de données, maintenant que vous savez ce qu’est un tunnel GRE. Pour ces interfaces de tunnel, la configuration des adresses IP privées et les tests de connexion sont également abordés.

Configuration d’un tunnel GRE sur un routeur Cisco

Comme le montre le graphique ci-dessous, vous devez d’abord configurer votre routeur Cisco pour qu’il se connecte au centre d’épuration de Gcore via un tunnel GRE sur l’internet ouvert :

GRE tunnel between Cisco router and the scrubbing center
Tunnel GRE entre le routeur Cisco et le centre d’épuration
Source : G-Core

Dans la figure ci-dessus, les deux routeurs ont des adresses IP publiques physiques qu’ils peuvent utiliser pour se connecter à l’internet et communiquer l’un avec l’autre directement par l’intermédiaire de leurs FAI respectifs. En outre, les deux extrémités du tunnel ont des réseaux de routeurs privés et des adresses IP privées (192.168.1.1 pour le routeur client et 192.168.1.2 pour le routeur du centre d’épuration).

Les adresses IP privées de l’interface du tunnel sont utilisées pour créer une connexion privée via une connexion internet publique, comme si les deux interfaces du tunnel de chaque appareil étaient physiquement reliées au même réseau.

Tout d’abord, établissez une connexion directe par câble de console à votre routeur ou, si vous avez configuré SSH, utilisez-le pour vous connecter via SSH, puis utilisez la commande suivante pour entrer dans le mode de configuration globale :

bash
CR1# configure terminal

Il est maintenant possible de créer une interface pour un tunnel virtuel. Vous pouvez utiliser le numéro de votre choix pour l’interface du tunnel. L’exemple suivant utilise 77 et vous place également en mode de configuration de l’interface :

CR1(config)# interface tunnel 77

L’étape suivante consiste à configurer l’interface du tunnel que vous venez de créer avec l’adresse IP privée du routeur CR1 :

CR1(config if)# ip address 192.168.1.1 255.255.255.0

Définissez la source du tunnel, c’est-à-dire l’interface de votre réseau par laquelle le tunnel crée une connexion. Dans l’exemple ci-dessous, la source est l’adresse IP publique du routeur client, 3.3.3.1 :

CR1(config if)# tunnel source 3.3.3.1

Vous devez également définir la destination du tunnel, qui dans ce cas est l’adresse IP publique du routeur du centre d’épuration, par laquelle vous vous connectez à l’interface privée du tunnel du routeur :

CR1(config if)# tunnel destination 4.4.4.1

Comme vous le savez, GRE ajoute des informations supplémentaires aux en-têtes des paquets originaux. La [limite MTU] (https://en.wikipedia.org/wiki/Maximum transmission unit) de 1 500 octets est maintenant dépassée de 24 octets, ce qui peut entraîner des pertes de paquets. Pour résoudre ce problème, diminuez le MTU à 1 476, ce qui donnera une limite de 1 500 pour le MTU et les en-têtes supplémentaires :

CR1(config if)# ip mtu 1476

De même, vous devez ajuster le [MSS] pour qu’il soit 40 octets plus petit que le MTU à 1 436 (voir https://en.wikipedia.org/wiki/Maximum segment size) :

CR1(config if)# ip tcp adjust-mss 1436

Ensuite, quittez le mode EXEC privilégié et examinez la configuration IP de votre routeur :

CR1(config if)# end
CR1# show IP interfaces brief

La sortie devrait ressembler à ce qui suit, affichant l’interface du tunnel et l’IP que vous lui avez attribuée :

CR1# show IP interface brief
Interface                  IP-Address      	OK? Method   Status                Protocol
GigabitEthernet0/0         3.3.3.1         	YES manual   up                      up      
GigabitEthernet0/1         unassigned      	YES NVRAM    down                    down    
GigabitEthernet0/2         unassigned     	YES NVRAM    administratively down   down    
GigabitEthernet0/3         unassigned      	YES NVRAM    administratively down   down    
Tunnel77                   192.168.1.1     	YES manual   up                      up    

En utilisant l’adresse IP du tunnel privé, 192.168.1.2, vérifiez la connexion au routeur distant SCR1 :

CR1# ping 192.168.1.2

Votre résultat devrait ressembler à l’illustration ci-dessous, qui montre que la connexion a réussi :

Output of the ping command
Sortie de la commande ping
Source : G-Core G-Core

Sauvegardez votre configuration en cours d’exécution, puis :

CR1# copy running-config startup-config

Votre routeur a été configuré avec succès pour créer une connexion via un tunnel GRE.

Configuration d’un tunnel GRE sur un serveur Linux

Cette section explique comment configurer l’interface du tunnel et se connecter au serveur distant en utilisant le tunnel GRE. Le système d’exploitation utilisé dans cette configuration est Ubuntu 20 LTS.

Voici un diagramme montrant comment les différents composants de ce système doivent être configurés :

GRE tunnel between a Linux server and the scrubbing center
Tunnel GRE entre un serveur Linux et le centre d’épuration
Source : G-Core G-Core

De l’adresse IP publique de votre serveur à l’adresse IP du serveur distant, dans ce cas 13.51.172.192 et 196.43.196.101, respectivement, créez un nouveau tunnel en utilisant le protocole GRE :

bash
# ip tunnel add tunnel0 mode gre local 13.51.172.192 remote 196.43.196.101 ttl 255

Le trafic IP public n’étant acheminé vers et depuis le VPC que via l’IP privée, vous devez obtenir l’IP privée de l’instance si vous utilisez une instance Amazon EC2 ou un VPC similaire derrière un pare-feu ou un réseau d’application.

Le nom d’hôte pleinement qualifié de votre VPC comporte l’IP privée de l’instance avec un trait d’union, comme le montre la sortie de la commande suivante :

bash
# hostname -f
ip-172-31-38-152.eu-north-1.compute.internal

Comme on le voit ci-dessous, vous pouvez maintenant construire le tunnel en changeant l’IP publique locale 13.51.172.192 par l’IP privée nouvellement acquise 172.31.38.152. Si vous effectuez cette opération sur un serveur physique, vous n’avez rien à faire.

bash
# ip tunnel add tunnel0 mode gre local 172.31.38.152 remote 196.43.196.101 ttl 255

Le sous-réseau privé pour le tunnel, dans ce cas 192.168.0.2/30, doit être ajouté ensuite :

bash
# ip addr add 192.168.0.2/30 dev tunnel0

Une fois cette étape franchie, vous pouvez maintenant activer le lien du tunnel en exécutant la commande :

bash
# ip link set tunnel0 up

Comme le montre le résultat ci-dessous, qui indique une connexion réussie via le tunnel GRE, vous pouvez enfin vérifier si le serveur distant est accessible via le tunnel en envoyant un ping à l’adresse IP du tunnel :

bash
# ping 192.168.0.1 -c4 
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=275 ms
64 bytes from 192.168.0.1: icmp_seq=2 ttl=64 time=275 ms
64 bytes from 192.168.0.1: icmp_seq=3 ttl=64 time=275 ms
64 bytes from 192.168.0.1: icmp_seq=4 ttl=64 time=281 ms

--- 192.168.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 274.661/276.239/280.724/ ms
as

Vous devez maintenant ajouter quelques règles à votre table de routage pour vous assurer que le trafic qui vous parvient via le tunnel est renvoyé via le tunnel. Utilisez les commandes suivantes :

bash
// Create the routing table
# echo '100 GRE' >> /etc/iproute2/rt_tables

// Respect the rules for the private subnet via that table
# ip rule add from 192.168.0.0/30 table GRE

// Set the default route to make sure all traffic goes via the tunnel remote server
# ip route add default via 192.168.0.1 table GRE

J’ai terminé ! Vous avez réussi à établir une connexion avec un centre de nettoyage depuis votre serveur via un tunnel GRE.

Conclusion

Vous avez découvert ce qu’est un tunnel GRE et comment il fonctionne sur cette page. Nous avons discuté de la façon dont un tunnel GRE, qui achemine le trafic réseau entrant à travers le centre de nettoyage de Gcore, peut protéger vos serveurs contre les cyber-attaques telles que les attaques par déni de service.

La procédure de mise en place d’une connexion par tunnel GRE à l’aide de votre routeur Cisco ou de votre serveur Linux vous a ensuite été démontrée.

À l’exception de l’Antarctique, tous les continents où Gcore fournit une protection du web et des serveurs avec des capacités de filtrage multi-Tbps ont été impliqués dans la préparation de cet article.

En utilisant un tunnel GRE, Gcore peut sécuriser les serveurs dans ses propres centres de données et ceux de ses clients. Ces méthodes offrent aux clients une protection contre les attaques à haut volume avec une latence inférieure à 1 ms.

Source d’information

Philippe Ternision

Philippe Ternision

Administrateur réseau dans un grand groupe, je partage mes connaissances sur Hfrance pour aider mes confrères et mes consoeurs.