De plus en plus de serveurs sont attaqués par du flooding HTTP, mettant à genou votre serveur Apache, l’empêchant ainsi de répondre aux vraies requêtes qui lui sont adressées.
Il est possible de se battre contre ces requêtes avec fail2ban par exemple ou d’autres solutions, mais contre une attaque de type DDOS ou aucune adresse IP n’est identique entre deux requêtes les efforts sont souvent vains.
Le meilleur moyen trouvé pour faire baisser significativement le nombre de flood HTTP est de limité les pays pouvant accéder à votre serveur. Il est possible pour cela d’utiliser le mod GeoIP d’Apache. Celui-ci, reposant sur la base GeoIP permettra d’interdire la réponse aux requêtes de certains pays.
Mais cette solution est souvent insuffisante car le Apache est quand même obligé de traiter chaque requête.
La meilleure solution est donc d’utiliser GeoIP au niveau du firewall, qui rejetera directement les requêtes en consommant un minimum de ressources CPU.
Nous allons voir ici comment installter GeoIP et l’utiliser avec IPTables, le firewall le plus classique en environnement Linux. L’installation décrite ci-dessous est faite sur une Debian 7.
Toutes les opérations suivantes doivent être faite en utilisateur « root ».
Installer dans un premier temps les paquets nécessaires :
{{< highlight java >}} apt-get install libtext-csv-xs-perl module-assistant geoip-database libgeoip1 unzip wget{{< /highlight >}}
Puis installer le module xtables-addons:
{{< highlight java >}} apt-get install xtables-addons-dkms linux-headers-$(uname -r){{< /highlight >}}
Une fois ces opérations effectuées, vous pouvez installer GeoIP :
{{< highlight java >}} mkdir /usr/share/xt_geoip cd /usr/share/xt_geoip wget http://terminal28.com/wp-< wbr />contenthttps://assets.axopen.com/assets/uploads/2013/10/geoip-< wbr />dl-build.tar.gz tar xvf geoip-dl-build.tar.gz ./xt_geoip_dl ./xt_geoip_build -D . *.csv rm -fr geoip-dl-build.tar.gz{{< /highlight >}}
Voilà vous devez maintenant être dans la possibilité d’utiliser geoip directement dans votre configuration IPTables.
Pour vérifier que geoip sera bien pris en compte, effectuer la commande suivante qui vous affichera l’aide de l’utilisation de geoip:
{{< highlight java >}} iptables -m geoip --help{{< /highlight >}}
Si l’affichage de l’aide ne se fait pas, c’est que vous avez surement raté une des étapes ci-dessus.
Si la commande fonctionne, vous pouvez alors paramétrer IPTables avec une règle acceptant ou interdisant certains pays.
Par exemple pour interdire tous les pays sauf la France et l’Allemagne sur le port 80 en tcp:
{{< highlight java >}} iptables -A INPUT -p tcp --dport 80 -m geoip --src-cc DE,FR -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j DROP{{< /highlight >}}
Evidemment, ce filtre est destiné a des sites internet plutôt localisés et pas internationaux, mais certains pays sont passés maitres dans l’art du spamming et flooding et peuvent être a priori interdits de manière systématique.
Il existe un nombre important de solution dite SOA, il peut s’agir dans certain cas de règles d’architecture, de technologies et/ou standard ou bien d’outils dédié.
Découvrez la planche #17 !
Découvrez la planche #6 !