GoldZone Web Hosting

Rédigé par Gaëtan Trellu (goldyfruit)

Outils pour utilisateurs

Outils du site


cband

Installation et configuration du mod Cband.

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.

Installation.

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 :

  1. Via le paquet disponible dans un backports.
  2. Via les sources.

Installation par Apt.

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 update

Attention, 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-cband

Ré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-cband

Debconf 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 ?!! :-P

Installation à partir des sources.

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 :

  • Soit à l'aide du ./configure.
  • Soit avec l'outils apxs2.

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.

# make

Ré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

Configuration.

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
  • CBandScoreFlushPeriod inscrit à X nombre de requêtes le total de la consommation dans le tableau.
  • CBandRandomPulse améliore la compréhension de la limitation de téléchargement ce qui entraîne une économie du CPU.

Les unités de mesures.

Unités pour la vitesse de transfert.

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.

Unités pour la limitation de quotas.

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.

Unités de temps.

S = Seconde
M = Minutes
H = Heure
D = Jour
W = Semaine
L'unité par défaut est S.

Le virtualhost.

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.

Limitation de la vitesse de téléchargement.

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 :

  • CBandSpeed 2048 10 30 définie une limitation de la bande passante à 2Mbps, 10 requêtes maximum par secondes et 30 connexions simultanées à ce site pour tout le monde.
  • CBandRemoteSpeed 10kb/s 3 3 fait la même chose que CBandSpeed mais par personne.

Mise en place d'un quota avec restrictions en cas de dépassement.

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 :

  • CBandLimit 100M définie une limite de 100M de bande passante.
  • CBandScoreboard /var/www/tableau-cband définie l'endroit ou les résultats seront stockés.
  • CBandPeriod 4W définie une période de 4 semaines pendant laquelle CBandLimit doit être valable.

Page d'erreur 503 en cas de dépassement de quota.

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>

Page d'erreur personnalisée en cas de dépassement de quota.

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 :

La page de status Cband.

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é !!! :-D

cband.txt · Dernière modification: 2011/01/05 16:05 (modification externe)