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.

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.

$ 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=enp7s4
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
# Cloudflare
server=1.1.1.1
server=1.0.0.1
# Sous-domaines
address=/amandine.sandbox.lan/192.168.3.1
# Postes fixes
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/
├── 2019
│   ├── 02
│   │   ├── 05
│   │   │   ├── 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
│   │   ├── 07
│   │   │   ├── 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

Téléchargement

Un modèle de fichier de configuration squidanalyzer.conf est disponible dans mon dépôt Github, dans le répertoire el7/config/squid.

$ git clone https://github.com/kikinovak/centos

2 commentaires

Francis Poulizac · 20 février 2019 à 14 h 02 min

La ligne de commande pour crontab, renvoie une erreur me signalant que le scripr perl « squid-analyser » n’a pas été trouvé.
En changeant la ligne par:
[
# SquidAnalyser
00 13 * * * /usr/local/bin/squid-analyser > /dev/null 2>&1
]
je n’ai plus d’erreur remontée.

    kikinovak · 20 février 2019 à 14 h 33 min

    Parce que ça s’écrit squid-analyzer et non pas squid-analyser. :o)

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.