Bravo ! Vous avez enfin réussi à faire le buzz avec l’un de vos articles. Vous êtes relayés par des influenceurs américains sur Facebook et vous percez sur Reddit. Un flux continu de visiteurs maintient pendant un certain temps un trafic important sur votre serveur. Tout roule !

Pourtant, une fois le buzz retombé, votre serveur continue d’être fortement sollicité alors que tout semble être retourné à la normal sur votre outil de suivi des visiteurs. Que ce passe-t-il ?

Introduction

En cherchant, vous vous rendez compte que vous subissez des vagues de robots provenant de Chine et Russie. Il semble qu’en étant autant exposé, votre site suscite l’intérêt de ces bots. Ce nouveau trafic, qui ne vous apporte rien, met à mal votre serveur. Il est tant de mettre en œuvre une solution radicale : bloquer le trafic provenant de ces pays.

La première idée qui vient à l’esprit est de configurer iptable. N’étant pas un expert, j’avais peur de perdre l’accès au serveur sur une erreur de configuration. J’ai donc opté pour une autre solution : le blocage du trafic au niveau HTTP avec un module Apache de géolocalisation.

Installation

Pour cela, il est possible d’utiliser le module pour Apache de Max Mind : mod_geoip. Disponible sur Debian et Ubuntu, il s’installe très simplement :

$ apt-get install libapache2-mod-geoip

Une fois installé, il est nécessaire de l’activer et de lui indiquer d’utiliser la base locale en éditant le fichier /etc/apache2/mods-available/geoip.conf avec la configuration suivante:

<IfModule mod_geoip.c>
  GeoIPEnable On
  GeoIPDBFile /usr/share/GeoIP/GeoIP.dat
</IfModule>

Il ne reste plus qu’à redémarrer le serveur pour que le module soit fonctionnel :

$ /etc/init.d/apache2 restart

Configuration d’un site

Le seconde étape consiste à configurer le blocage pour un site. Cette configuration peut se faire un niveau du fichier de configuration du vhost ou dans le fichier .htacces. Voici un exemple de blocage de la Chine, Russie et Corée du Nord :

SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE RU BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE KP BlockCountry
 
Deny from env=BlockCountry

Si vous l’avez configuré au niveau du vhost, pensez à recharger la configuration.

Maintenant, votre serveur Apache va répondre des erreurs 403 à tous les clients provenant de ces pays.

Conclusion

Cette solution ne permet pas de bloquer complètement le trafic réseau provenant de certains pays. Le serveur Apache continue de servir les requêtes HTTP. Néanmoins, le trafic réseau est réduit car les réponses sont beaucoup plus petites et les bots ne vont plus suivre les liens de votre site. De plus, la charge de traitement de ces requêtes va être considérablement réduite. Et donc, votre serveur HTTP va retrouver un état plus stable.