SquidAnalyzer 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
- Téléchargement des sources
- Construction et installation
- SquidAnalyzer et SELinux
- Configuration de l’hôte virtuel
- Configuration de SquidAnalyzer
- Premier essai
- Définition d’une tâche automatique
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
.
Le 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.
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.