Introduction
Pour protéger un serveur web contre les abus ou la saturation, il est souvent nécessaire de limiter le nombre de connexinos simultanées provenant d'une même adresse IP ainsi que la bande passante allouée. Apache HTTP Server ne dispose pas de ces fonctionnalités nativement dans sa configuration de base, mais des modules tiers comme mod_limitipconn et mod_bandwidth permettent d'implémenter ces restrictions efficacement.
Limitation des connexions simultanées avec mod_limitipconn
Ce module permet de définir un plafond de connexions actives par adresse IP. Cela empêche un seul utilisateur de monopoliser tous les slots de connexion du serveur.
Compilation et installation
Récuperez les sources du module et compilez-les en utilisant l'outil apxs fourni avec Apache. Assurez-vous de pointer vers le bon chemin d'installation de votre serveur web.
curl -O http://dominia.org/djao/limit/mod_limitipconn-0.24.tar.bz2
tar jxvf mod_limitipconn-0.24.tar.bz2
cd mod_limitipconn-0.24
/opt/apache/bin/apxs -c -i mod_limitipconn.c
Configuration du serveur
Une fois le module compilé, il faut charger le module et définir les règles dans le fichier de configuration principal httpd.conf. L'option ExtendedStatus doit être activée pour que le module fonctionne correctement.
ExtendedStatus On
LoadModule limitipconn_module modules/mod_limitipconn.so
<IfModule mod_limitipconn.c>
<Location />
MaxConnPerIP 10
NoIPLimit image/*
</Location>
<Location /downloads>
MaxConnPerIP 3
</Location>
</IfModule>
Dans cet exemple, la limite globale est fixée à 10 connexions par IP, sauf pour les ressources images qui sont exemptées. Le répertoire /downloads est plus strictement limité à 3 connexions simultanées.
Pour une configuration par hôte virtuel, copiez le bloc IfModule à l'intérieur de la définition de votre VirtualHost dans le fichier httpd-vhosts.conf.
Contrôle de la bande passante avec mod_bandwidth
Le module mod_bandwidth offre un contrôle plus granulaire sur le débit réseau. Il permet de limiter la vitesse de téléchargement par IP ou par directory.
Installation et correction de compatibilité
Téléchargez et extrayez les sources du module :
curl -O http://ivn.cl/files/source/mod_bw-0.92.tgz
tar zxvf mod_bw-0.92.tgz
Sur les versions récentes d'Apache (2.4.x), la compilation échouera souvent en raison de chagnements dans l'API APR. L'erreur typique indique que conn_rec ne possède plus le membre remote_addr.
Pour corriger cela, modifiez le fichier source mod_bw.c. Les structures de connexion ont été mises à jour. Remplacez les occurrences de remote_addr par client_addr et remote_ip par client_ip. Cela peut être automatisé via sed :
sed -i 's/remote_addr/client_addr/g' mod_bw.c
sed -i 's/remote_ip/client_ip/g' mod_bw.c
Relancez ensuite la compilation :
/opt/apache/bin/apxs -c -i -a mod_bw.c
Configuration de la limitation de débit
Activez le module et définissez les limites de vitesse dans la configuration de l'hôte virtuel. Les valeurs sont exprimées en octets par seconde.
LoadModule bw_module modules/mod_bw.so
<VirtualHost *:80>
ServerName exemple.com
DocumentRoot /var/www/html
BandWidthModule On
ForceBandWidthModule On
BandWidth all 102400
</VirtualHost>
Cette configuration limite le débit global à 100 Ko/s pour toutes les connexions sur ce virtuel. Il est recommandé d'effectuer les tests de validation en utilisant le téléchargement natif du navigateur plutôt que des gestionnaires de téléchargement accélérés, car ces derniers ouvrent multiple connexions qui peuvent fausser les résultats.