Aller au contenu principal

Ne gaspillez pas les ressources de votre serveur : bloquez les bots indésirables avec Nginx

· 4 minutes de lecture
Customer Care Engineer

Bloquer les bots indésirables avec Nginx

Les robots de moteurs de recherche (bottes) sont des programmes spéciaux qui analysent les sites web sur Internet. Les moteurs de recherche en ont besoin pour trouver, indexer et afficher les pages dans les résultats de recherche. Mais tous les bots ne sont pas utiles !

Il arrive que votre site soit visité par des bots indésirables qui :

  • Collectent des données sans votre permission.
  • Consomment des ressources serveur, ce qui le ralentit.
  • Sont utilisés pour rechercher des vulnérabilités.

Si vous souhaitez protéger votre site contre de tels bots, il est temps de configurer Nginx ! Dans cet article, nous vous montrerons comment les bloquer facilement et rapidement à l'aide d'un fichier de configuration spécial.


Pourquoi une configuration Nginx au lieu de robots.txt ?

Le fichier robots.txt est un outil de gestion du comportement des robots des moteurs de recherche. Il leur indique quelles parties du site ne doivent pas être explorées. Il est très facile d'utiliser ce fichier : créez-en simplement un dans le répertoire racine du site, par exemple :

User-agent: BadBot

Disallow: /

Cependant, il y a un problème : les instructions de robots.txt sont une recommandation plutôt qu'une règle appliquée. Les bots consciencieux suivent les instructions de ce fichier, mais la plupart des bots l'ignorent simplement.

En revanche, la configuration de Nginx vous permet de bloquer physiquement l'accès aux robots indésirables, garantissant un résultat efficace à 100 %.


Comment Nginx bloque les bots indésirables : utiliser la réponse 444

Contrairement à robots.txt, qui ne fait que fournir des recommandations aux bots, Nginx bloque physiquement leur accès. Une façon d'y parvenir est d'utiliser une réponse serveur spéciale avec le code 444.

Dans Nginx, le code de réponse 444 est une méthode interne pour terminer la connexion avec le client sans envoyer de réponse. C'est une approche efficace pour ignorer les requêtes indésirables et minimiser la charge du serveur.


Mise en place du blocage

Étape 1 : Comment identifier les bots indésirables ?

Les bots indésirables peuvent être identifiés par leur User-Agent, qui est un paramètre envoyé par tous les clients lors de la visite de votre site. Par exemple, certains User-Agents pourraient ressembler à ceci :

`AhrefsBot`
`SemrushBot`
`MJ12bot`

Vous pouvez trouver des valeurs User-Agent suspectes dans le journal d'accès Nginx (si votre site utilise PHP-FPM) :

sudo grep -i bot /var/log/nginx/access.log

Ou dans le journal d'accès Apache (si votre site utilise le module Apache ou FastCGI comme gestionnaire PHP) :

  • Pour Ubuntu/Debian :
sudo grep -i bot /var/log/apache2/access.log
  • Pour CentOS/AlmaLinux/RockyLinux :
sudo grep -i bot /var/log/httpd/access.log

Si vous utilisez un panneau de contrôle tel que FASTPANEL, chaque site aura son propre fichier journal séparé. Vous pouvez les analyser individuellement ou tous en même temps à l'aide d'une commande telle que :

  • Si votre site utilise le module Apache ou FastCGI comme gestionnaire PHP :
sudo cat /var/www/*/data/logs/*-backend.access.log | grep -i bot | tail -500
  • Si votre site utilise PHP-FPM :
sudo cat /var/www/*/data/logs/*-frontend.access.log | grep -i bot | tail -500

Cette commande affichera les 500 dernières requêtes effectuées vers tous vos sites où le paramètre User-Agent contient le mot « bot ». Un exemple d'une ligne (une requête vers votre site) pourrait ressembler à ceci :

IP - [03/Nov/2022:10:25:52 +0300] "GET link HTTP/1.0" 301 811 "-" "Mozilla/5.0 (compatible; DotBot/1.2; +https://opensiteexplorer.org/dotbot; [email protected])"

ou

IP - [24/Oct/2022:17:32:37 +0300] "GET link HTTP/1.0" 404 469 "-" "Mozilla/5.0 (compatible; BLEXBot/1.0; +http://webmeup-crawler.com/)"

Le User-Agent du bot se trouve entre les segments "compatible;" et "/version.number" à la fin de la ligne de requête entre parenthèses. Donc, dans les exemples ci-dessus, les User-agents sont : BLEXBot et DotBot.

Analysez les informations que vous recueillez et notez les chaînes User-Agent des bots les plus actifs pour la prochaine étape de configuration du blocage.

Étape 2 : Créer un fichier pour bloquer les bots

  1. Connectez-vous à votre serveur via SSH.
  2. Avant d'apporter des modifications, assurez-vous que votre configuration Nginx actuelle ne contient aucune erreur :
nginx -t

Si tout est en ordre, vous verrez :

nginx: la syntaxe du fichier de configuration /etc/nginx/nginx.conf est correcte

nginx: le test du fichier de configuration /etc/nginx/nginx.conf est réussi

S'il y a des erreurs, examinez-les et corrigez-les dans le fichier indiqué par les messages d'erreur.

  1. Créez un fichier séparé listant les bots à bloquer :
sudo nano /etc/nginx/conf.d/block_bots.conf

Ajoutez le code suivant dans le fichier :

    map $http_user_agent $block_bot {

default 0;

~*AhrefsBot 1;

~*SemrushBot 1;

~*MJ12bot 1;

}



server {

if ($block_bot) {

return 444;

}
}

Ici, nous créons une mappe qui détermine quels bots doivent être bloqués.

En suivant ce modèle, listez les chaînes User-Agent des bots que vous souhaitez bloquer. Vous devez lister chaque bot sur une nouvelle ligne et placer un point-virgule ; à la fin de chaque ligne comme délimiteur.

Une fois votre liste terminée, appuyez sur "Ctrl + O" sur votre clavier pour enregistrer le fichier, puis sur "Ctrl + X" pour quitter l'éditeur nano.

Étape 3 : Appliquer les modifications

Après avoir apporté vos modifications, testez toujours la configuration Nginx pour vous assurer qu'il n'y a pas d'erreurs de syntaxe :

sudo nginx -t

Si tout est en ordre, vous verrez :

nginx: la syntaxe du fichier de configuration /etc/nginx/nginx.conf est correcte

nginx: le test du fichier de configuration /etc/nginx/nginx.conf est réussi

En cas d'erreurs, examinez la sortie pour les identifier et les corriger dans le fichier spécifié.

Rechargez ensuite la configuration Nginx pour appliquer les modifications :

sudo systemctl reload nginx

À l'avenir, si vous devez ajouter d'autres bots au fichier block_bots.conf, vous devrez répéter cette étape à chaque fois.


Conclusion

Vous savez maintenant comment bloquer facilement les robots de recherche indésirables sur votre serveur avec Nginx ! Gardez un œil sur vos journaux et ajoutez de nouvelles lignes au fichier de configuration block_bots.conf si nécessaire.

Assurez-vous de ne bloquer que les bots malveillants afin de ne pas empêcher les moteurs de recherche utiles comme Google ou Bing d'indexer votre site.