AXOPEN

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.

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 : 

apt-get install libtext-csv-xs-perl module-assistant geoip-database libgeoip1 unzip wget

Puis installer le module xtables-addons:

apt-get install xtables-addons-dkms linux-headers-$(uname -r)

Une fois ces opérations effectuées, vous pouvez installer GeoIP :

mkdir /usr/share/xt_geoip
cd /usr/share/xt_geoip
wget http://terminal28.com/wp-content/uploads/2013/10/geoip-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

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:

iptables -m geoip --help

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:

iptables -A INPUT -p tcp --dport 80  -m geoip --src-cc DE,FR -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j DROP

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.