Apache – bloquer l’accès HTTP à certains pays
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 ?
Sommaire
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.
https://blog.lecacheur.com/2018/11/27/apache-bloquer-lacces-http-a-certains-pays/https://blog.lecacheur.com/wp-content/uploads/2018/11/Apache_HTTP_server_logo_2016.svg_-1024x268.pnghttps://blog.lecacheur.com/wp-content/uploads/2018/11/Apache_HTTP_server_logo_2016.svg_-150x150.pngDéveloppementapache,géolocalisationBravo ! 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...SeBSébastien LECACHEUR23r0@laposte.netAdministratorLe weblogue de SeB
Sans aller jouer directement avec iptable, qui demande un peu d’habitude, les solutions du genre UFW sont relativement simples à mettre en oeuvre. Et, pour ne jamais se trouver bloqué suite a une fausse manip, la 1ère chose à faire est de mettre en liste blanche l’IP depuis laquelle on travaille.
Sinon, le blocage au niveau du serveur HTTP marche effectivement bien et est suffisant pour la plupart.
C’est vrai que j’ai pensé un instant à UFW mais pour être franc j’avais aussi peur à l’erreur de configuration malgré la possibilité de se mettre en liste blanche. Si c’est vraiment simple, il faudrait que je prenne le temps de tester. Merci pour ta remarque !