Le module Cband permet d'établir des restrictions sur la bande passante, comme imposer un quota sur le trafic généré par un utilisateur ou, de limiter la vitesse de téléchargement pour un utilisateur bien précis, de restreindre le nombre de téléchargements simultanés par adresse IP.
Ce module n’est pas disponible par défaut dans la branche Debian, je vais donc vous proposer deux méthodes. A vous de choisir celle que vous préférez :
Le paquet libapache2-mod-cband se trouve dans un backports pour la branche stable de Debian, l'installation en sera donc simplifiée.
Ajoutez la source suivante dans votre fichier /etc/apt/sources.list :
deb http://www.backports.org/debian/ sarge-backports main
Pour accéder aux paquets disponibles via cette source vous devez mettre Apt à jour.
# aptitude updateAttention, ne pas faire un dist-upgrade car cette source contient plusieurs paquets que vous ne souhaitez pas forcement mettre à jour. Avant d'installer le paquet je vous invite à jeter un oeil sur les détails de celui-ci.
# aptitude show libapache2-mod-cbandRésultat :
22:53 root@serveur-backup ~# aptitude show libapache2-mod-cband Paquet : libapache2-mod-cband Nouveau: oui État: installé Automatiquement installé: non Version : 0.9.7.4-0bpo1 Priorité : optionnel Section : web Responsable : Jonas Genannt <jonas.genannt@capi2name.de> Taille décompressée : 193k Dépend: debconf (>= 0.5) | debconf-2.0, libc6 (>= 2.3.2.ds1-21), apache2-common Suggère: apache2 Description : An Apache 2 module for bandwidth limiting the webserver This Apache 2 module provided to solve the problem of limiting users' and virtualhosts' bandwidth usage. When a configured virtualhost's transfer limit is exceeded, mod_cband will redirect all further requests to a location specified in the configuration file.
Le paquet est en version 0.9.7.4 à l'heure ou je rédige cette page.
Passons à l'installation :
# aptitude install libapache2-mod-cbandDebconf demande si l'on souhaite activer le module, répondez Oui.
Résultat :
23:18 root@serveur-backup ~# aptitude install libapache2-mod-cband Lecture des listes de paquets... Fait Construction de l'arbre des dépendances... Fait Lecture de l'information d'état étendu Initialisation de l'état des paquets... Fait Lecture des descriptions de tâches... Fait Les NOUVEAUX paquets suivants vont être installés : libapache2-mod-cband 0 paquets mis à jour, 1 nouvellement installés, 0 à enlever et 0 non mis à jour. Il est nécessaire de télécharger 42,4ko d'archives. Après dépaquetage, 193ko seront utilisés. Écriture de l'information d'état étendu... Fait Prendre : 1 http://www.backports.org sarge-backports/main libapache2-mod-cband 0.9.7.4-0bpo1 [42,4kB] 42,4ko téléchargés en 0ss (58,2ko/s) Préconfiguration des paquets ... Sélection du paquet libapache2-mod-cband précédemment désélectionné. (Lecture de la base de données... 40476 fichiers et répertoires déjà installés.) Dépaquetage de libapache2-mod-cband (à partir de .../libapache2-mod-cband_0.9.7.4-0bpo1_i386.deb) ... Paramétrage de libapache2-mod-cband (0.9.7.4-0bpo1) ... Module cband installed; run /etc/init.d/apache2 force-reload to enable. Lecture des listes de paquets... Fait Construction de l'arbre des dépendances... Fait Lecture de l'information d'état étendu Initialisation de l'état des paquets... Fait Lecture des descriptions de tâches... Fait
On relance Apache pour que le mod soit pris en compte.
# /etc/init.d/apache2 restart
Alors ? Facile hein ?!!
L’installation à partir des sources n’est pas compliquée, en trois coups de cuillère à pot ça sera terminé (ça c'est fait, je l'ai placé
).
Avant de commencer il nous faut récupérer les sources du module.
# wget http://cband.linux.pl/download/mod-cband-0.9.7.5.tgz
Résultat :
23:18 root@serveur-backup ~# wget http://cband.linux.pl/download/mod-cband-0.9.7.5.tgz
--23:36:32-- http://cband.linux.pl/download/mod-cband-0.9.7.5.tgz
=> `mod-cband-0.9.7.5.tgz'
Résolution de cband.linux.pl... 80.51.240.146
Connexion vers cband.linux.pl|80.51.240.146|:80...connecté.
requête HTTP transmise, en attente de la réponse...200 OK
Longueur: 70,713 (69K) [application/x-gzip]
100%[========================================================================>] 70,713 125.03K/s
23:36:45 (124.66 KB/s) - « mod-cband-0.9.7.5.tgz » sauvegardé [70713/70713]
Une fois les sources téléchargées, on décompresse l’archive à l’aide de tar.
# tar zxvf mod-cband-0.9.7.5.tgz
On se place dans le répertoire obtenu, à savoir mod-cband-0.9.7.5.
# cd mod-cband-0.9.7.5
Il y a deux façons de compiler le module :
Je vais décrire la marche à suivre pour ./configure car en cas d'erreur celle-ci sera plus facile à identifier.
# ./configure
Résultat :
23:41 root@serveur-backup ~/mod-cband-0.9.7.5# ./configure checking for gcc... gcc checking for C compiler default output file name... a.out checking whether the C compiler works... yes checking whether we are cross compiling... no checking for suffix of executables... checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ANSI C... none needed checking whether make sets $(MAKE)... yes checking for apr_palloc in -laprutil... no checking for an ANSI C-conforming const... yes checking for apxs... no checking for apxs2... apxs2 checking how to run the C preprocessor... gcc -E checking for egrep... grep -E checking for ANSI C header files... yes checking for sys/types.h... yes checking for sys/stat.h... yes checking for stdlib.h... yes checking for string.h... yes checking for memory.h... yes checking for strings.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking stdio.h usability... yes checking stdio.h presence... yes checking for stdio.h... yes checking for string.h... (cached) yes checking assert.h usability... yes checking assert.h presence... yes checking for assert.h... yes checking ctype.h usability... yes checking ctype.h presence... yes checking for ctype.h... yes checking errno.h usability... yes checking errno.h presence... yes checking for errno.h... yes checking math.h usability... yes checking math.h presence... yes checking for math.h... yes checking netinet/in.h usability... yes checking netinet/in.h presence... yes checking for netinet/in.h... yes checking sys/socket.h usability... yes checking sys/socket.h presence... yes checking for sys/socket.h... yes checking arpa/inet.h usability... yes checking arpa/inet.h presence... yes checking for arpa/inet.h... yes configure: creating ./config.status config.status: creating Makefile
Ensuite on le compile.
# makeRésultat :
23:45 root@serveur-backup ~/mod-cband-0.9.7.5# make apxs2 -Wc,-Wall -Wc,-DDST_CLASS=3 -c src/mod_cband.c /usr/bin/libtool --silent --mode=compile gcc -prefer-pic -pipe -I/usr/include/xmltok -I/usr/include/openssl -Wall -O2 -DAP_HAVE_DESIGNATED_INITIALIZER -DLINUX=2 -D_REENTRANT -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE -pipe -I/usr/include/xmltok -I/usr/include/openssl -Wall -O2 -pthread -I/usr/include/apache2 -I/usr/include/apr-0 -I/usr/include/apr-0 -I/usr/include -Wall -DDST_CLASS=3 -c -o src/mod_cband.lo src/mod_cband.c && touch src/mod_cband.slo /usr/bin/libtool --silent --mode=link gcc -o src/mod_cband.la -rpath /usr/lib/apache2/modules -module -avoid-version src/mod_cband.lo write "make install" to install module
Puis on l'installe.
# make install
Résultat:
23:50 root@serveur-backup ~/mod-cband-0.9.7.5# make install
apxs2 -Wc,-Wall -Wc,-DDST_CLASS=3 -i -a -n cband src/mod_cband.la
/usr/share/apache2/build/instdso.sh SH_LIBTOOL='/usr/bin/libtool' src/mod_cband.la /usr/lib/apache2/modules
/usr/bin/libtool --mode=install cp src/mod_cband.la /usr/lib/apache2/modules/
cp src/.libs/mod_cband.so /usr/lib/apache2/modules/mod_cband.so
cp src/.libs/mod_cband.lai /usr/lib/apache2/modules/mod_cband.la
cp src/.libs/mod_cband.a /usr/lib/apache2/modules/mod_cband.a
ranlib /usr/lib/apache2/modules/mod_cband.a
chmod 644 /usr/lib/apache2/modules/mod_cband.a
PATH="$PATH:/sbin" ldconfig -n /usr/lib/apache2/modules
----------------------------------------------------------------------
Libraries have been installed in:
/usr/lib/apache2/modules
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the `LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the `LD_RUN_PATH' environment variable
during linking
- use the `-Wl,--rpath -Wl,LIBDIR' linker flag
- have your system administrator add LIBDIR to `/etc/ld.so.conf'
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
chmod 644 /usr/lib/apache2/modules/mod_cband.so
[activating module `cband' in /etc/apache2/httpd.conf]
La compilation du mod est terminée, on peut désormais créer un fichier mod_cband.load dans /etc/apache2/mods-available/ pour y ajouter ceci :
LoadModule cband_module /usr/lib/apache2/modules/mod_cband.so
Dans /etc/apache2/httpd.conf la ligne suivant est à supprimer :
LoadModule cband_module /usr/lib/apache2/modules/mod_cband.so
On charge le mod Cband
# a2enmod mod_cband
Cband n'est pas facile à assimiler au début même si les commandes sont assez compréhensible.
Actuellement Cband n'est pas approprié pour du virtual-hosting de masse (virtualhost dynamique), les développeurs travaillent actuellement à résoudre cette “lacune”.
Afin de rendre Cband plus performant il est nécessaire d'ajouter deux variables dans apache2.conf qui se trouve dans /etc/apache2/.
CBandScoreFlushPeriod 1 CBandRandomPulse On
kbps = 1024 bits est égal à 1Kbp par seconde.
Mbps = 1024*1024 bits est égal à 1000Kbp soit 1Mbp par seconde.
Gbps = 1024*1024*1024 bits est égal à 1000Mbp soit 1Gbp par seconde.
L'unité par défaut est kbps.
K = 1000 bytes
Ki = 1024 bytes est égal à 1Kb.
Mi = 1024*1024 bytes est égal à 1000Kb soir 1Mb.
Gi = 1024*1024*1024 bytes est égal à 1000Mb soit 1Gb.
L'unité par défaut est K.
S = Seconde
M = Minutes
H = Heure
D = Jour
W = Semaine
L'unité par défaut est S.
Nous arrivons à la partie la plus ardue qui n'est pas insurmontable non plus. ![]()
Cette partie consiste à configurer le virtualhost avec les options de Cband pour que celui-ci est une emprise sur la bande passante de ce dit site.
Pour commencer il faut créer un vhosts dans le répertoire /etc/apache2/sites-availables/ que nous allons appeler test-cband.
Cette méthode limite uniquement la vitesse de téléchargement.
Contenu du virtualhost :
<VirtualHost *:80> ServerName www.mondomaine.com ServerAdmin administrateur@mondomaine.com DocumentRoot /var/www/monsite CBandSpeed 2048 10 30 CBandRemoteSpeed 10kb/s 3 3 </VirtualHost>
Explications :
On défini un quota de bande passante par mois, une fois le quota dépassé on impose des restrictions de téléchargement.
Pour cette méthode il nous faut créer un répertoire tableau-cband dans /var/www/. Il contiendra les résultats de la consommation de la bande passante.
# mkdir /var/www/tableau-cband
On rend Apache propriètaire du répertoire pour qu'il puisse écrire dedans.
# chown www-data:www-data
Contenu du virtualhost :
<VirtualHost *:80> ServerName www.mondomaine.com ServerAdmin webmaster@example.com DocumentRoot /var/www/monsite CBandLimit 100M CBandExceededSpeed 128 5 15 CBandScoreboard /var/www/tableau-cband CBandPeriod 4W </VirtualHost>Ce qui nous donne :
Le site www.mondomaine.com dispose d'un quota de 100M de bande passante pour 4 semaines, une fois le quota dépassé des restrictions seront mise en place à savoir 128Kbp de vitesse de téléchargement, 5 requêtes par seconde et 15 connexions simultanées.
Explications :
Ici en cas de dépassement du quota aucune restrictions sera mises en place, une page d'erreur 503 sera affichée à la place du site.
<VirtualHost *:80> ServerName www.mondomaine.com ServerAdmin webmaster@example.com DocumentRoot /var/www/monsite CBandLimit 100M CBandScoreboard /var/www/tableau-cband CBandPeriod 4W </VirtualHost>
Contrairement à l'exemple du dessus, en cas de dépassement de quota nous redirigerons l'internaute vers une page d'erreur personnalisée (message d'information par exemple).
<VirtualHost *:80> ServerName www.mondomaine.com ServerAdmin webmaster@example.com DocumentRoot /var/www/monsite CBandLimit 100M CBandExceededURL http://www.hebergeur.com/limitation_quota.php CBandScoreboard /var/www/tableau-cband CBandPeriod 4W </VirtualHost>
Explications :
Cette page permet d'avoir un oeil sur l'utilisation de la bande passante, les utilisateurs, le quota attriubé, et d'autres informations.
Il suffit d'ajouter ceci au virtualhost :
<Location /cband-status> SetHandler cband-status </Location> <Location /cband-status-me> SetHandler cband-status-me </Location>
Résultat :
<VirtualHost *:80> ServerName www.mondomaine.com ServerAdmin webmaster@example.com DocumentRoot /var/www/monsite CBandLimit 100M CBandExceededURL http://www.hebergeur.com/limitation_quota.php CBandScoreboard /var/www/tableau-cband CBandPeriod 4W <Location /cband-status> SetHandler cband-status </Location> <Location /cband-status-me> SetHandler cband-status-me </Location> </VirtualHost>
Les pages de status sont disponibles à ces adresses :
Exemples :
Une fois les modifications terminées il faut relancer Apache.
# /etc/init.d/apache2 restart
WOAAAAAAAAOUHHH, c'est terminé !!!