Firewall, GeoIP et IPTables

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.
Expert technique JEEMis à jour le 4 Mars 2014
iStock_000017016084XSmall.jpg

De plus en plus de serveurs sont attaqués par du flooding HTTP, mettant à genou votre serveur Apache, lempê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 dautres solutions, mais contre une attaque de type DDOS ou aucune adresse IP nest 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 dutiliser le mod GeoIP dApache. Celui-ci, reposant sur la base GeoIP permettra dinterdire 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 dutiliser 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 lutiliser avec IPTables, le firewall le plus classique en environnement Linux. Linstallation 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é dutiliser geoip directement dans votre configuration IPTables.

Pour vérifier que geoip sera bien pris en compte, effectuer la commande suivante qui vous affichera laide de lutilisation de geoip:

{{< highlight java >}} iptables -m geoip --help{{< /highlight >}}

Si laffichage de laide ne se fait pas, cest 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 lAllemagne 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 lart du spamming et flooding et peuvent être a priori interdits de manière systématique.