Surveiller le trafic web avec SquidAnalyzer sous CentOS

SquidAnalyzerSquidAnalyzer est un outil de statistiques extrêmement pratique qui permet d’analyser en un coup d’oeil l’ensemble du trafic web d’un réseau. On a donc facilement accès à des informations comme les URLs visitées, les sites les plus populaires, les sites et/ou les utilisateurs les plus “gourmands”, et autres choses encore.

SquidAnalyzer utilise les fichiers logs du serveur proxy Squid, qui doit donc être configuré correctement. Pour les détails, voir les deux articles qui expliquent en détail la configuration de Squid comme proxy cache HTTP transparent et la gestion des connexions HTTPS.

Les résultats de SquidAnalyzer sont disponibles sous forme de pages HTML assez joliment présentées, avec des tableaux et des graphismes. Il faut donc disposer d’un serveur Web fonctionnel sur la machine.

SquidAnalyzer

Téléchargement des sources

Il existe certes des paquets binaires dans des dépôts binaires confidentiels éparpillés sur le web. Étant donné que la construction de l’application depuis les sources officielles ne relève pas de la magie noire, on va préférer cette option.

Le téléchargement des sources de SquidAnalyzer peut se faire en ligne de commande depuis le serveur.

# cd
# links http://squidanalyzer.darold.net

Suivre le lien Download > SourceForge Download. Sur la page de SourceForge, repérer le lien Download un peu plus bas sur la page, cliquer dessus, puis recliquer sur le lien direct qui s’affiche. Télécharger le fichier squidanalyzer-6.6.tar.gz.

Construction et installation

Décompresser l’archive des sources et aller dans le répertoire nouvellement créé.

# tar xvzf squidanalyzer.tar.gz
# cd squidanalyzer-6.6

L’archive fournit un fichier squidanalyzer.spec dans le répertoire packaging/RPM. Malheureusement, la construction d’un paquet RPM en partant de ce fichier échoue. En revanche, il peut nous servir pour récupérer les dépendances de construction du paquet, grâce à la commande yum-builddep fournie par le paquet yum-utils.

# cd packaging/RPM
# yum-builddep squidanalyzer.spec

Cette dernière commande récupère l’intégralité des paquets nécessaires pour la construction de SquidAnalyzer. Ils sont tous fournis par les dépôts officiels de CentOS, notamment une panoplie de modules Perl.

Une fois qu’on a installé toutes les dépendances, on vérifie l’emplacement des fichiers de l’application, qui est défini dans le fichier Makefile.PL.

# Default install path
my $LOGFILE = $ENV{LOGFILE} || $default_log;
my $BINDIR = $ENV{BINDIR} || '/usr/local/bin';
my $CONFDIR = $ENV{CONFDIR} || '/etc/squidanalyzer';
my $ETCDIR = $ENV{ETCDIR} || $CONFDIR;
my $HTMLDIR = $ENV{HTMLDIR} || '/var/www/squidanalyzer';
my $BASEURL = $ENV{BASEURL} || '/squidreport';
my $DOCDIR = $ENV{DOCDIR} || '';
my $MANDIR = $ENV{MANDIR} || '/usr/local/man/man3';
my $DESTDIR = $ENV{DESTDIR} || '';
$ENV{INSTALLDIRS} ||= 'site';

On va garder cette configuration par défaut, quitte à rectifier le tir plus loin en éditant le fichier de configuration. À présent, on peut lancer la construction et l’installation.

# perl Makefile.PL
# make
# make install

Configuration de l’hôte virtuel

Notre proxy Squid est installé sur la machine amandine.sandbox.lan. On va mettre en place un hôte virtuel squidreport.amandine.sandbox.lan qui pointe vers le répertoire /var/www/squidanalyzer.

Le proxy se charge également de la configuration DNS locale avec Dnsmasq. Il suffit donc de créer une nouvelle entrée dans /etc/hosts et de redémarrer Dnsmasq pour propager les informations du nouvel hôte vers toutes les machines du réseau.

# /etc/hosts
127.0.0.1 localhost.localdomain localhost
192.168.3.1 amandine.sandbox.lan amandine
192.168.3.1 squidreport.amandine.sandbox.lan squidreport.amandine

Ensuite, je crée un fichier /etc/httpd/conf.d/10-squidreport.amandine.conf qui contient la configuration de l’hôte virtuel. Pour plus de détails, on consultera l’article détaillé sur Apache.

# /etc/httpd/conf.d/10-squidreport.amandine.conf
#
# http://squidreport.amandine.sandbox.lan
<VirtualHost *:80>
  ServerAdmin info@microlinux.fr
  DocumentRoot "/var/www/squidanalyzer"
  <Directory "/var/www/squidanalyzer">
    Options -Indexes +FollowSymlinks +MultiViews
    AllowOverride None
  </Directory>
  ServerName squidreport.amandine.sandbox.lan
  ServerAlias squidreport.amandine
  ErrorLog logs/squidreport.amandine-error_log
  CustomLog logs/squidreport.amandine-access_log common
</VirtualHost>

Configuration de SquidAnalyzer

SquidAnalyzer se configure par le biais du fichier de configuration /etc/squidanalyzer/squidanalyzer.conf, que l’on adaptera à nos besoins. La configuration par défaut est déjà raisonnablement fonctionnelle, et il suffira de modifier quelques directives.

# /etc/squidanalyzer/squidanalyzer.conf
Output  /var/www/squidanalyzer
WebUrl  /
LogFile /var/log/squid/access.log
UseClientDNSName  0
DNSLookupTimeout  0.0001
...
Lang  /etc/squidanalyzer/lang/fr_FR.txt
...
TransfertUnit MB
...
Locale fr_FR
...

Premier essai

Dans la configuration actuelle, SquidAnalyzer utilise le fichier /var/log/squid/access.log pour générer les rapports. Il faut donc que l’on ait quelque chose à se mettre sous la dent, autrement dit, vérifiez si le fichier n’est pas vide. Les pages du rapport en elles-mêmes sont générées par le script Perl squid-analyzer.

# which squid-analyzer
/usr/local/bin/squid-analyzer

Lancer le script, qui peut mouliner un certain temps en fonction de la taille du fichier /var/log/squid/access.log et de la puissance de calcul du serveur.

# squid-analyzer

Vérifier si le rapport a été généré correctement.

# tree /var/www/squidanalyzer/
/var/www/squidanalyzer/
|-- 2018
|   |-- 03
|   |   |-- 08
|   |   |   |-- denied.html
|   |   |   |-- domain.html
|   |   |   |-- index.html
|   |   |   |-- mime_type.html
|   |   |   |-- network.html
|   |   |   |-- networks
|   |   |   |   `-- 192.168.3.2
|   |   |   |       `-- 192.168.3.2.html
|   |   |   |-- stat_code.dat
|   |   |   |-- stat_denied_url.dat
|   |   |   |-- stat_mime_type.dat
|   |   |   |-- stat_netuser.dat
|   |   |   |-- stat_network.dat
|   |   |   |-- stat_user.dat
|   |   |   |-- stat_user_url.dat
|   |   |   |-- url.html
|   |   |   |-- user.html
|   |   |   `-- users
|   |   |       `-- 192.168.3.2
|   |   |           `-- 192.168.3.2.html
........................................

Afficher les pages dans un navigateur web depuis n’importe quel poste du réseau local. Sur la page d’accueil, cliquer sur Stat <année>, puis sur les infos que l’on souhaite afficher.

  • Réseaux
  • Utilisateurs
  • TopURLs
  • Top domaines
  • etc.

Définition d’une tâche automatique

À partir de là, on peut définir une tâche automatique (cronjob) pour la génération des rapports. Dans l’exemple qui suit, on va produire un rapport quotidien tous les jours à 13h00. Ce n’est pas une mauvaise idée de programmer cette tâche à l’heure du repas. L’exécution du script est relativement gourmande en ressources, et si le serveur n’est pas très puissant, il peut arriver qu’il soit un peu dur de la feuille pendant quelques minutes.

# crontab -l
# SquidAnalyzer
00 13 * * * /usr/local/bin/squid-analyzer 1> /dev/null
Ce contenu a été publié dans CentOS, Documentation Microlinux, avec comme mot(s)-clé(s) , , . Vous pouvez le mettre en favoris avec ce permalien.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.