Contexte.

Lors de la mise en ligne récente d'un projet personnel, celui-ci a fait l'objet de diverses attaques DDOS.

Le projet étant hébergé chez OVH nous ne nous sommes pas trop inquiétés, cet hébergeur proposant un service de

mitigation qui gère justement les attaques DDOS de type 3 et 4.

L'application concernée a été développée sous Laravel 5.8 et est hébergée sur un serveur dédié dans une VM virtualisé via Hyper-V et fonctionnant avec NGINX et Redis.

L'impacte des attaques de type 3, 4 et 7.

Lorsque les attaques ont commencé, les services web ont subi une coupure d'environ 30 secondes. Le temps imparti pour que la mitigation se mette en route. À partir de ce moment-là, nous avions à nouveau l'esprit tranquille jusqu'à ce que nous constations qu'une nouvelle attaque était en cours.

Celle-ci était une attaque DDOS de type layer 7, malheureusement notre hébergeur ne pouvait rien pour nous à ce moment-là.

Cette dernière avait pour effet de ralentir le site jusqu'à parfois provoquer des erreurs 500, les pages visées étaient totalement aléatoires. La plupart des urls n'existaient même pas.

Ce type d'attaque étant difficile à détecter et à bloquer au contraire des attaques de type 3 et 4.

Ces attaques visent généralement un service bien précis, ce qui implique que votre attaquant a dû prendre un peu de temps afin d'étudier votre application.

Bien souvent ces requêtes envoyées proviennent d'IPs différente, elles contiennent des user agents différents et cibles plusieurs URL.

Nos échecs.

Nous avons tentés diverses solutions en vin, par exemple nous avons limité le nombre de connexions à une par IP, le nombre de requêtes par secondes par IP à lui aussi été diminué et réglé sur 3 dans la configuration de notre serveur web NGINX.

Nous avons couplé à cela fail2ban et avons créé un Jail Regex qui avait pour but de parser les logs d'erreurs du serveur web afin de bannir les IPs excèdent nos nouveaux paramètres nginx.

Malheureusement cela n'a eu aucun effet, l'attaquant disposant d'un trop grand nombre d'IP différents à sa disposition.

La solution pour nous.

Comme pour nous généralement le problème des projets bénévoles est l'argent. Nous ne pouvions donc pas investir dans un ou plusieurs autres serveurs afin de mettre en place un système de load balancing.

Nous avons donc opté pour la solution Sucuri, une offre à 20€ / mois à l'heure où j'écris cet article. À ce prix la on ne savait pas trop à quoi s'attendre, au final après avoir pris environ 20 minutes afin de configurer le tout notre nouvelle solution de protection était en place.

Et oui après cela tout est rentré dans l'ordre, de notre côté les attaques continuaient, mais les serveurs de Sucuri bloquaient tout le trafic malveillant.

Plus de stress, plus de service lent ou indisponible, c'était assez hallucinant voilà pourquoi je prends le temps d'écrire cet article.

Mais comment est-ce que cela fonctionne ?

À chaque requête envoyée vers votre application au lieu que les serveurs DNS desservent la requête sur votre machine, celle-ci est envoyée sur les serveurs de Sucuri. À partir de la une recette magique orchestrée par eux se met en marche et filtre le trafic.

Toutes les requêtes légitimes sont envoyées à votre serveur afin que vos utilisateurs aient accès à vos services et bloquent le reste.

Avec ce système nous n'avons pas vu d'augmentation du temps de chargement des pages donc je pense qu'il n'y a pas d'impact négatif sur le référencement. Pour information nous utilisons un serveur dédié assez robuste, il faudrait voir le fonctionnement d'autre machine.

Concernant le trafic nous avons eu un faux positif, un utilisateur Belge qui s'est vu bloqué par le pare-feu Sucuri, après avoir whitelist sont IP celui-ci à pu profiter de l'application sans aucune gêne. Je précise que c'est un 1 utilisateur sur 2000 visiteurs en une semaine, mais peut être qu'il y en à eu d'autres dont nous n'avons pas eu connaissance.

Ce service propose diverses options comme des règles customs suivant les URLS, l’user agent, les cookies, les referers, les pays, le failover, l'utilisation de CDN.

Des fonctionnalités plus avancées sont également disponibles, mais je ne m'attarderais pas trop sur les détails de l'offre.

Cet article a juste pour but de faire partager un retour d'expérience qui a eu lieu récemment et qui a été d'une certaine manière éprouvante sur le départ, mais qui s'est bien terminée.