Awstats : Mise en place d'Awstats, interpréteur de logs web

From Deimos.fr / Bloc Notes Informatique
Jump to: navigation, search

1 Introduction

AWStats est un analyseur de log web (mais aussi FTP, Streaming et mail) offrant des vues graphiques statiques mais aussi dynamiques des statistiques d'accès à vos serveurs web.
Il permet d'afficher le nombre de visites, de visiteurs uniques, de pages, de hits, de transfert, par domaine/pays, hôte, heure, navigateur, OS, ... Il peut être lancé grâce à des scripts CGI ou en ligne de commande.
AWStats est un logiciel libre sous licence GPL.

L’installation d’Awstats est simple : ce logiciel interprète les logs d’Apache (toutes les commandes auxquelles le serveur à répondu) pour vous fournir des graphiques et tableaux compréhensibles sous forme de page internet.

2 Installation

Installez Awstats à l’aide de la commande

Command aptitude
aptitude install awstats

3 Configuration

3.1 Apache

Dans la configuration, je viens modifier ces lignes si je suis sous Apache:

Configuration File /etc/awstats/awstats.conf
LogFile="/var/log/apache2/access.log"
SiteDomain="deimos.fr"

L’affichage de la page web interprétant les logs nécessitera des images : vous avez deux solutions pour que l'adresse http://votre_adresse/awstats-icon renvoie aux images awstats : utiliser un alias Apache ou créer un dossier awstats-icon dans votre espace Apache et y mettre les images de awstats, pour cette dernière solution, tapez :

Command
mkdir /var/www/awstats-icon
cp -r /usr/share/awstats/icon/* /var/www/awstats-icon

3.2 Lighttpd

Prenez cette configuration si vous êtes sous Lighttpd :

Configuration File /etc/awstats/awstats.conf
LogFile="/var/log/lighttpd/access.log"
SiteDomain="deimos.fr"
LogFormat=1

Nous allons avoir besoin de configurer également lighttpd :

Configuration File /etc/lighttpd/conf-available/50-awstats.conf
alias.url = (
                "/awstats-icon" => "/usr/share/awstats/icon/",
                "/awstats/" => "/usr/lib/cgi-bin/",
                "/icon/" => "/usr/share/awstats/icon/"
              )
# provide awstats cgi-bin access
$HTTP["url"] =~ "/awstats/" {
      cgi.assign = ( ".pl" => "/usr/bin/perl" )
}

Puis nous allons activer cette configuration :

Command ln
cd /etc/lighttpd/conf-enabled && ln -s /etc/lighttpd/conf-available/50-awstats.conf .

3.3 Crontab et Multi-domaines

Il existe par défaut, une ligne dans la crontab qui fait bien son taf. Mais si vous êtes en multi domaines et donc plusieurs fichiers de configuration dans /etc/awstats/, il va falloir ruser un peu. Je vous conseil donc de commenter la ligne courante dans ce fichier de cron :

Configuration File /etc/cron.d/awstats
#0,10,20,30,40,50 * * * * www-data [ -x /usr/lib/cgi-bin/awstats.pl -a -f /etc/awstats/awstats.conf -a -r /var/log/apache/access.log ] && /usr/lib/cgi-bin/awstats.pl -config=awstats -update >/dev/null

Et soit de rajouter des lignes du type :

Configuration File /etc/cron.d/awstats
0,10,20,30,40,50 * * * * www-data /usr/lib/cgi-bin/awstats.pl -config=deimos.fr
0,10,20,30,40,50 * * * * www-data /usr/lib/cgi-bin/awstats.pl -config=mavro.fr

Pour différencier vos domaines (ici deimos.fr et mavro.fr), ou bien de créer un petit script comme ceci et de le mettre à la place dans la cron :

Configuration File awstats_update_domains.sh
#!/bin/bash
# path to cgi-bin
AWS=/usr/lib/cgi-bin/awstats.pl
 
# append your domain
DOMAINS="deimos.fr mavro.fr"
 
# loop through all domains
for d in ${DOMAINS}
do
   ${AWS} -update -config=${d}
done

Un petit coup de chmod pour les droits d'exécution et c'est bon.

3.4 Protection d'Awstats

Vous n'avez certainement pas envie que vos statistiques soient accessibles depuis n'importe ou et donc vous allez pouvoir vous protéger avec un htacess ou autre chose.

3.4.1 htaccess sous Apache

This documentation is on how to protect a directory by htaccess (login + password).

Insert thos lines and adapt to your configuration (/etc/apache2/sites-enabled/000-default) :

Configuration File /etc/apache2/sites-enabled/000-default
        <Directory /var/www/myhtaccess>
                AllowOverride AuthConfig
                Order allow,deny
                allow from all
        </Directory>

Then create a file .htaccess in /var/www/myhtaccess and put this :

Configuration File /var/www/myhtaccess
AuthType Basic
AuthName "Acces Prive"
AuthGroupFile /dev/null
AuthUserFile /etc/apache2/htaccesspassword
 
<Limit GET POST>
        Require valid-user
</Limit>
 
php_value magic_quotes_runtime 1
php_value magic_quotes_gpc 1

Then create your access file with the user (/etc/apache2/htaccesspassword) :

Command htpasswd
htpasswd -c /etc/apache2/htaccesspassword username

For the next time, to add users, just get off "-c" like that :

Command htpasswd
htpasswd /etc/apache2/htaccesspassword username

Don't forget to restart apache :-)

For a good documentation, follow this : Documentation on Htaccess

3.4.2 htdigest sous Lighttpd

Les htaccess n'existent pas sous Lighttpd, mais il y a un équivalent de taille. Vérifiez avant de commencer que le module mod_auth est bien chargé.
Nous allons dans un premier temps générer (avec -c pour la première fois, comme un htaccess) un fichier contenant les identifiants pour être autoriser à consulter tel ou tel site :

Command htdigest
htdigest -c /etc/lighttpd/.passwd 'Authorized users only' deimos

Je créer ici l'utilisateur deimos. Le realm (ici 'Authorized users only') va nous permettre de différencier les différents fichiers de login/mot de passe que nous allons pouvoir avoir car nous ne pouvons en spécifier qu'un seul pour tout le serveur.

Ensuite on rajoute ces lignes dans la configuration global de lighttpd :

Configuration File /etc/lighttpd/lighttpd.conf
auth.backend = "htdigest"
auth.backend.htdigest.userfile = "/etc/lighttpd/.passwd"
auth.debug = 2

Puis je rajoute à l'endroit qui m'intéresse la protection :

Configuration File /etc/lighttpd/lighttpd.conf
auth.require = ( "/docs/" =>
   (
      "method" => "digest",
      "realm" => "Authorized users only",
      "require" => "valid-user"
   )
)

On redémarre lighty et c'est bon. L'exemple ci dessus montre comment ajouter la restriction à l'endroit qui nous intéresse, nous allons donc le faire en modifiant notre conf d'awstats :

Configuration File /etc/lighttpd/conf-available/50-awstats.conf
alias.url = (
                "/awstats-icon" => "/usr/share/awstats/icon/",
                "/awstats/" => "/usr/lib/cgi-bin/",
                "/icon/" => "/usr/share/awstats/icon/"
              )
# provide awstats cgi-bin access
$HTTP["url"] =~ "/awstats/" {
    cgi.assign = ( ".pl" => "/usr/bin/perl" )
    auth.require = ( "/awstats/" =>
        (
        "method" => "digest",
        "realm" => "Trusted users only",
        "require" => "valid-user"
        )
    )   
}