Surveiller le trafic webSquidAnalyzer 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.

Prérequis

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.

Téléchargement des sources

Il existe certes des paquets binaires dans des dépôts 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.

$ mkdir ~/src
$ cd ~/src
$ 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.

InfoLe site de SourceForge est une plaie pour la navigation, et il est difficile de s’y retrouver avec un navigateur en ligne de commande. Le cas échéant, on récupérera l’archive source sur une station de travail pour ensuite la transférer sur le serveur.

Construction et installation

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

$ tar -xzf 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.

$ rpm -q yum-utils
yum-utils-1.1.31-50.el7.noarch
$ cd packaging/RPM
$ sudo yum-builddep squidanalyzer.spec
$ cd ../..

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
$ sudo make install

SquidAnalyzer et SELinux

Si l’on utilise SELinux en mode renforcé, on ne pourra pas accéder aux rapports générés par SquidAnalyzer dans la configuration par défaut, étant donné que les fichiers installés dans /var/www/squidanalyzer ne sont pas correctement étiquetés. Dans ce cas, il suffit de rectifier le tir comme ceci.

$ sudo restorecon -R -v /var/www/squidanalyzer

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. L’astuce consiste ici à utiliser les sous-domaines Dnsmasq pour définir notre nouvel hôte.

# /etc/dnsmasq.conf
domain-needed
bogus-priv
interface=enp3s1
dhcp-range=192.168.3.100,192.168.3.200,24h
local=/sandbox.lan/
domain=sandbox.lan
expand-hosts
no-resolv
log-facility=/var/log/dnsmasq.log
server=1.1.1.1
server=1.0.0.1
address=/amandine.sandbox.lan/192.168.3.1
dhcp-host=00:1E:C9:43:A7:BF,poste-01,192.168.3.2
dhcp-host=00:1D:09:15:4A:D8,poste-02,192.168.3.3

Ensuite, je crée un fichier /etc/httpd/conf.d/10-squidreport.amandine.conf qui contient la configuration de l’hôte virtuel.

# /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 GB
...
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.

$ sudo /usr/local/bin/squid-analyzer

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

$ tree /var/www/squidanalyzer/
/var/www/squidanalyzer/
|-- 2020
|   |-- 05
|   |   |-- 10
|   |   |   |-- denied.html
|   |   |   |-- domain.html
|   |   |   |-- index.html
|   |   |   |-- mime_type.html
|   |   |   |-- network.html
|   |   |   |-- networks
|   |   |   |   |-- 192.168.3.2
|   |   |   |   |   `-- 192.168.3.2.html
|   |   |   |   `-- 192.168.3.3
|   |   |   |       `-- 192.168.3.3.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.

SquidAnalyzer

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.

$ sudo crontab -l
# SquidAnalyzer
00 13 * * * /usr/local/bin/squid-analyzer 1> /dev/null


La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.