Sécurité et SSL

Bloquer ou autoriser l'accès par pays

Vérifié le 7 min de lecture pare-feu blocage par pays

Vous pouvez limiter les visites de certains pays de deux façons : depuis l'espace client, sans toucher à aucun fichier, ou avec des règles dans le .htaccess lorsque vous avez besoin de quelque chose de plus précis, comme protéger uniquement l'accès à l'administration ou rediriger selon le pays.

Le pays est déterminé à partir de l'IP du visiteur. C'est fiable dans la plupart des cas, mais une personne qui utilise un VPN ou un proxy apparaîtra avec le pays de ce service.

Depuis l'espace client

  1. Connectez-vous à l'espace client et ouvrez votre service d'hébergement.
  2. Allez dans Pare-feu et antivirus > Blocage géographique.
  3. Sélectionnez le domaine à protéger.
  4. Choisissez le mode :
    • Liste noire : bloque les pays sélectionnés et autorise les autres.
    • Liste blanche : autorise uniquement les pays sélectionnés et bloque les autres.
  5. Sélectionnez les pays (ou des continents entiers) et enregistrez.

Le blocage s'applique à tout le domaine. Si vous utilisez une liste blanche, vérifiez que vous n'excluez pas des services qui se connectent à votre site depuis d'autres pays, comme les passerelles de paiement, les webhooks ou les outils de surveillance de disponibilité. Pour le retirer, revenez à la même section et supprimez la configuration.

Avec des règles dans le .htaccess

Le serveur géolocalise chaque visite et place le résultat dans les variables GEOIP_COUNTRY_CODE (pays) et GEOIP_CONTINENT_CODE (continent), que vous pouvez utiliser dans le .htaccess du domaine. Ajoutez les règles au début du fichier. Si vous utilisez aussi le blocage de l'espace client, ne modifiez pas le bloc compris entre # BEGIN HostsuarGeoBlock et # END HostsuarGeoBlock : le panneau le réécrit à chaque enregistrement.

Les pays s'indiquent avec leur code ISO 3166-1 alpha-2 à deux lettres : ES Espagne, RU Russie, CN Chine, US États-Unis… Les continents, avec EU Europe, AS Asie, AF Afrique, NA Amérique du Nord, SA Amérique du Sud et OC Océanie.

Bloquer plusieurs pays

Cet exemple bloque la Russie, la Chine et la Corée du Nord et autorise les autres :

GeoIPEnable On
SetEnvIf GEOIP_COUNTRY_CODE RU DenyCountry
SetEnvIf GEOIP_COUNTRY_CODE CN DenyCountry
SetEnvIf GEOIP_COUNTRY_CODE KP DenyCountry
Allow from all
Deny from env=DenyCountry

Ajoutez une ligne SetEnvIf pour chaque pays à bloquer.

Autoriser seulement certains pays

À l'inverse : autoriser l'Espagne et le Portugal et bloquer les autres :

GeoIPEnable On
SetEnvIf GEOIP_COUNTRY_CODE ES AllowCountry
SetEnvIf GEOIP_COUNTRY_CODE PT AllowCountry
Deny from all
Allow from env=AllowCountry

Pour autoriser un continent entier, utilisez GEOIP_CONTINENT_CODE ; par exemple, l'Europe uniquement :

GeoIPEnable On
SetEnvIf GEOIP_CONTINENT_CODE EU AllowCountry
Deny from all
Allow from env=AllowCountry

Limiter l'accès à wp-admin à votre pays

Souvent, vous ne voulez pas bloquer le site, mais seulement l'accès à l'administration. Cet exemple n'autorise l'accès à wp-login.php, wp-admin et xmlrpc.php de WordPress que depuis l'Espagne ; le reste du site reste ouvert à tout le monde :

GeoIPEnable On
RewriteEngine On
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} !^(ES)$
RewriteCond %{REQUEST_URI} ^/(wp-login\.php|wp-admin/|xmlrpc\.php) [NC]
RewriteCond %{REQUEST_URI} !^/wp-admin/admin-ajax\.php [NC]
RewriteRule ^ - [F,L]

L'exception pour admin-ajax.php est nécessaire, car de nombreuses extensions et thèmes l'utilisent aussi dans la partie publique. Pour autoriser plusieurs pays, séparez-les par | : !^(ES|PT)$. Si vous voyagez, n'oubliez pas que vous serez vous aussi bloqué jusqu'à ce que vous retiriez ou élargissiez la règle.

Rediriger selon le pays

Vous pouvez aussi envoyer les visiteurs de certains pays vers une autre version du site. Cet exemple redirige les personnes qui arrivent des États-Unis ou du Canada :

GeoIPEnable On
RewriteEngine On
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^(US|CA)$
RewriteRule ^(.*)$ https://www.otraweb.com/$1 [R=302,L]

Utilisez 302 (temporaire) et non 301 : les navigateurs mémorisent les redirections permanentes et un visiteur qui change de pays continuerait d'être redirigé. Gardez à l'esprit que Google explore majoritairement depuis les États-Unis : une redirection par pays peut l'empêcher de voir votre site d'origine.

Lire le pays du visiteur depuis PHP

Avec GeoIPEnable On au début du .htaccess, votre code PHP reçoit la géolocalisation dans $_SERVER :

<?php

echo $_SERVER['GEOIP_ADDR'];           // IP depuis laquelle on accède
echo $_SERVER['GEOIP_COUNTRY_CODE'];   // code du pays, par exemple ES
echo $_SERVER['GEOIP_CONTINENT_CODE']; // code du continent, par exemple EU

Vous pouvez ainsi, par exemple, présélectionner la langue ou la devise sans appeler un service externe. Si l'IP ne peut pas être localisée, la variable n'existe pas : utilisez $_SERVER['GEOIP_COUNTRY_CODE'] ?? '' pour éviter les avertissements.

Si une personne légitime ne peut plus accéder

  • Vérifiez le pays attribué à son IP avec n'importe quel service de géolocalisation et comparez-le à votre liste.
  • Dans une liste blanche, ajouter un pays l'autorise ; dans une liste noire, il le bloque. Vérifiez le mode avant d'ajouter des pays.
  • Si votre site est derrière un CDN comme Cloudflare, le serveur peut voir l'IP du CDN au lieu de celle du visiteur. Dans ce cas, utilisez le blocage par pays du CDN lui-même.
  • Si vous vous êtes bloqué vous-même, retirez les règles du .htaccess depuis le gestionnaire de fichiers de cPanel ou supprimez le blocage depuis l'espace client.

Le blocage par pays réduit fortement le trafic malveillant automatisé, mais il ne remplace pas la mise à jour du site ni l'utilisation de mots de passe sûrs.

Cela peut aussi vous aider

Quelque chose cloche ou a changé ? Racontez-nous et nous le vérifions.