Dans cet article, nous verrons comment bloquer des robots et requêtes malveillants avec le fichier .htaccess.
Introduction
Sur un site Web, le trafic ne provient pas uniquement de visiteurs humains. Une grande partie des requêtes sont générées par des robots : certains sont légitimes (comme les moteurs de recherche), mais d’autres sont malveillants. Ces derniers peuvent :
- consommer inutilement les ressources du serveur;
- tenter d’exploiter des failles de sécurité; ou même
- participer à des attaques par déni de service (DDoS).
Il arrive aussi que certaines requêtes proviennent d’adresses IP suspectes ou d’agents utilisateurs (User-Agent) connus pour scanner, pirater ou perturber les services Web. Il est donc utile, dans certains cas, de mettre en place des règles simples pour bloquer ces accès indésirables avant même qu’ils n’atteignent vos scripts ou votre application.
Le fichier .htaccess
, utilisé avec un serveur comme Apache, permet justement de filtrer ce type de trafic en amont, avec des règles faciles à adapter à vos besoins. Ce guide vous montrera comment mettre en place ces règles de manière sécuritaire et efficace.
Prérequis
Saisissez dans votre navigateur web l’adresse suivante : https://mg.n0c.com.
Marche à suivre pour filtrer le trafic en amont
Étape 1 — Repérez les requêtes malveillantes
Repérez les requêtes malveillantes dans le journal d’accès (veuillez vous référer à l’article Comment utiliser le journal d’accès).
- Commencez par analyser le journal d’accès (access log) du site.
- Dans l’exemple ci-dessous, on observe une adresse IP située en France qui envoie des requêtes vers wp-cron.php, avec un code de réponse HTTP 200 (succès).
- Dans l’exemple ci-dessous, on observe une requête provenant d’un agent utilisateur identifié comme GrandMechantRobot, accédant au fichier wp-cron.php avec un code de réponse HTTP 200 (succès).
- Comme cette requête n’a pas été bloquée par le pare-feu applicatif et que cet agent est connu pour un comportement abusif ou non légitime, il peut être pertinent de le bloquer directement via .htaccess.
Étape 2 — Repérez le fichier .htaccess
Identifiez la racine du document pour le domaine ou sous-domaine sur lequel vous souhaitez bloquer des requêtes dans le gestionnaire de domaine (veuillez vous référer à l’article Comment gérer les domaines).
- Dans le gestionnaire de domaine, repérez la racine du document correspondant au domaine (ou sous-domaine) sur lequel vous souhaitez appliquer les blocages.
- Ouvrez le gestionnaire de fichier et localisez le fichier .htaccess (veuillez vous référer à l’article Comment utiliser le gestionnaire de fichiers).
- Accédez au gestionnaire de fichiers, puis naviguez jusqu’à la racine du document identifiée à l’étape précédente. Repérez le fichier .htaccess.
- Comme .htaccess est un fichier caché, il peut être nécessaire d’activer l’affichage des fichiers cachés dans les paramètres du gestionnaire de fichiers.
Étape 3 — Modifiez le fichier .htaccess
- Ouvrez le fichier .htaccess en mode édition. Voici, à titre d’exemple, le contenu d’un fichier .htaccess par défaut pour un site WordPress :
- Ajoutez les règles de blocage nécessaires.
- Ajoutez ensuite les directives de blocage adaptées à votre cas, comme nous le verrons dans les exemples plus loin.
Étape 4 — Videz la cache LSCache
Pour que les règles prennent effet, il peut être nécessaire dans N0C de vider la cache pour le domaine en question (voir l’article Comment utiliser LSCache).
Important : évitez les conflits entre méthodes de blocage
Lorsque vous mettez en place des règles de blocage dans le fichier .htaccess
, il est important de ne pas combiner plusieurs méthodes différentes pour bloquer une même cible (IP, User-Agent, etc.) dans un même contexte. Par exemple, mélanger des directives <Limit>
, des règles mod_rewrite
et SetEnvIfNoCase
pour bloquer les mêmes adresses IP ou agents peut entraîner :
- des conflits de priorité entre règles;
- des comportements inattendus; ou voire
- un blocage incomplet ou, à l’inverse, un blocage trop large.
Conseils pour éviter ces problèmes :
- Choisissez une méthode de blocage adaptée à votre environnement et à vos besoins (souvent
mod_rewrite
ouSetEnvIfNoCase
suffisent). - Regroupez vos règles dans la même logique, plutôt que de dupliquer les blocages.
- Testez systématiquement après chaque modification.
- Documentez clairement vos règles pour faciliter la maintenance.
En résumé, privilégiez la simplicité et la cohérence pour garantir un filtrage efficace et sans surprise.
Comment bloquer des adresses IP
Il existe plusieurs façons de bloquer des adresses IP dans un fichier .htaccess. Voici quelques approches courantes selon le type de blocage souhaité.
Blocage d’adresses IP individuelles
Méthode 1 : via mod_rewrite
(recommandé)
RewriteEngine On
RewriteCond %{REMOTE_ADDR} ^47\.79\.1\.100$
RewriteRule ^.* - [F,L]
Cette méthode fonctionne à tous les niveaux du traitement des requêtes, y compris sur des méthodes HTTP moins communes. Elle est plus fiable pour les blocages fermes.
Méthode 2 : via les directives <Limit>
<Limit GET POST>
order allow,deny
allow from all
deny from 47.79.1.100
</Limit>
Cette méthode est simple, mais elle ne s’applique qu’aux requêtes GET
et POST
, et peut être ignorée par certains clients. Elle est aussi moins flexible que mod_rewrite
.
Blocage de plusieurs adresses IP
RewriteCond %{REMOTE_ADDR} ^(47\.79\.1\.100|47\.82\.1\.100)$
RewriteRule ^.* - [F,L]
Vous pouvez combiner plusieurs IP dans une même expression régulière, séparées par |
(OU logique).
Blocage de plages d’IP (CIDR ou sous-réseaux)
Le blocage de plages entières nécessite de s’adapter selon la méthode.
Méthode 1 : avec mod_rewrite
(précis et flexible)
Vous pouvez étendre le motif pour couvrir toute une plage IP en vous basant sur les octets de début (par exemple : ^47\.79\.
pour un bloc plus large).
RewriteEngine On
# Bloque toute IP commençant par 47.79.1.
RewriteCond %{REMOTE_ADDR} ^47\.79\.1\.
RewriteRule ^.* - [F,L]
Méthode 2 : avec <Limit>
(simple, mais moins précis)
<Limit GET POST>
order allow,deny
allow from all
deny from 47.79.0.0/16
</Limit>
La notation CIDR (/16
) n’est pas toujours supportée dans .htaccess
. Préférez alors le blocage basé sur des préfixes.
<Limit GET POST>
order allow,deny
allow from all
deny from 47.82.0.
</Limit>
Blocage par User-Agent (robots indésirables)
Certains robots (ou crawlers) abusifs s’identifient via leur User-Agent HTTP. Il est possible de bloquer ces agents en utilisant .htaccess
. Voici deux méthodes courantes.
Méthode 1 (méthode recommandée) : SetEnvIfNoCase
(simple et efficace)
SetEnvIfNoCase User-Agent "GrandMechantRobot|BigBadRobot" bad_bot
Order Allow,Deny
Allow from all
Deny from env=bad_bot
Cette méthode est simple, lisible et en général compatible avec des serveurs modernes. Elle permet de bloquer facilement un ou plusieurs User-Agent indésirables en utilisant une variable d’environnement (bad_bot
).
SetEnvIfNoCase
: permet d’ignorer la casse dans les noms d’agents.- Le champ
"GrandMechantRobot|BigBadRobot"
contient les noms d’agents à bloquer, séparés par|
(OU logique). Deny from env=bad_bot
: bloque les requêtes marquées avec cette variable.
Méthode 2 (méthode alternative) : mod_rewrite
(plus flexible)
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} GrandMechantRobot|BigBadRobot [NC]
RewriteRule ^.* - [F,L]
Cette méthode fonctionne également très bien et offre un contrôle plus fin dans des contextes complexes, ou lorsqu’on combine plusieurs règles dans le fichier .htaccess
.
Blocage par IP et User-Agent (robots indésirables)
Dans certains cas, vous pouvez vouloir bloquer une requête uniquement si elle provient à la fois d’une adresse IP spécifique et d’un User-Agent malveillant.
Voici comment le faire avec mod_rewrite
:
RewriteEngine On
# Si l’adresse IP correspond...
RewriteCond %{REMOTE_ADDR} ^47\.79\.1\.100$
# ...et que le User-Agent est l’un des suivants...
RewriteCond %{HTTP_USER_AGENT} (GrandMechantRobot|BigBadRobot) [NC]
# ...alors on bloque la requête (403 Forbidden)
RewriteRule ^.* - [F,L]
Comment ça fonctionne
- Les conditions sont combinées logiquement (ET) : toutes les
RewriteCond
doivent être vraies pour que la règle s’applique. [NC]
permet d’ignorer la casse dans les noms d’agents (par exemplegrandmechantrobot
sera aussi bloqué).[F,L]
signifie : retourner un code 403 Forbidden (F
) et ne pas continuer à traiter d’autres règles (L
= Last).
Astuces et recommandations
- Cette méthode est idéale pour bloquer un bot ciblé qui tente d’éviter des protections générales.
- Si vous voulez bloquer l’IP ou le User-Agent (au lieu de « et »), il faut utiliser deux règles séparées.
Conseils supplémentaires
- Redirigez certaines IP vers une page statique. Certains administrateurs préfèrent rediriger certains robots ou IP indésirables vers une page statique personnalisée (par exemple une page 403 humoristique) au lieu de renvoyer un simple code d’erreur.
- Utilisez un CDN. (Content Delivery Network) pour filtrer et atténuer automatiquement une partie du trafic malveillant avant qu’il n’atteigne votre serveur.
- Affinez votre fichier
robots.txt
pour guider les robots légitimes et limiter l’accès aux parties sensibles du site. - Privilégiez
mod_rewrite
si vous avez besoin de règles flexibles et de blocages efficaces. - Testez toujours vos règles après modification afin d’éviter de vous bloquer accidentellement ou d’empêcher l’accès aux visiteurs légitimes.
- N’abusez pas du blocage par IP. Ce type de filtrage doit être utilisé en complément d’un pare-feu applicatif ou d’autres systèmes de sécurité en amont.
- Bloquez uniquement les User-Agent identifiés comme nuisibles, afin de ne pas pénaliser le trafic légitime ou bloquer des robots important pour votre visibilité web.
- Évitez les motifs trop génériques qui pourraient bloquer des visiteurs ou robots bénéfiques.
Testez vos règles via un terminal
Pour valider vos blocages User-Agent, utilisez un outil comme curl
sur un terminal avec un agent personnalisé, par exemple :
curl -A "GrandMechantRobot" https://votre-site.com
Cela vous permet de vérifier que vos règles .htaccess
fonctionnent comme prévu.
Conclusion
Protéger son site web contre les robots malveillants, les attaques DDoS et les requêtes suspectes est indispensable pour préserver les ressources serveur et garantir la sécurité.
Le fichier .htaccess
offre une solution simple et efficace pour filtrer les adresses IP et User-Agent indésirables en amont, avant qu’ils n’atteignent vos applications.
En mettant en place ces règles, vous améliorez la fiabilité et la sécurité de votre site Apache contre le trafic malveillant.