Surveiller le trafic web avec SquidAnalyzer sous Rocky Linux 8

SquidAnalyzer est un outil de statistiques extrêmement pratique qui permet d’analyser en un coup d’œil 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, allez 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 avec un hôte virtuel.

Installation

Le développeur de SquidAnalyzer met à disposition un dépôt de paquets compatible avec Red Hat Enterprise Linux 8 et Rocky Linux 8. Voici les instructions détaillées pour la mise en place de ce dépôt :

https://copr.fedorainfracloud.org/coprs/tachtler/squidanalyzer/

Une fois qu’on a importé la clé GPG et qu’on a activé le dépôt, il ne reste qu’à installer le paquet :

# dnf install -y squidanalyzer

Le mainteneur du projet semble avoir oublié un paquet Perl dans la liste des dépendances. On va donc rectifier le tir ici :

# dnf install -y perl-Time-HiRes

Configuration de l’hôte virtuel

Mon proxy Squid est installé sur la machine proxy.microlinux.lan. Je vais mettre en place un hôte virtuel squidreport.proxy.microlinux.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=enp2s0
dhcp-range=192.168.2.100,192.168.2.200,24h
local=/microlinux.lan/
domain=microlinux.lan
expand-hosts
server=208.67.222.222
server=208.67.220.220
no-resolv
log-facility=/var/log/dnsmasq.log
address=/proxy.microlinux.lan/192.168.2.1
dhcp-host=D4:85:64:B2:B2:1B,alphamule,192.168.2.2
dhcp-host=B0:83:FE:90:4D:64,sandbox,192.168.2.3
dhcp-host=68:54:5A:B2:D0:81,dell-xps,192.168.2.4
dhcp-host=D0:37:45:24:61:BD,gustave,192.168.2.5
dhcp-host=00:22:64:8A:4C:C2,nestor,192.168.2.250
dhcp-host=10:62:E5:D4:95:60,hp-officejet,192.168.2.252
dhcp-host=00:11:32:26:63:A5,nas,192.168.2.253

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

# /etc/httpd/conf.d/10-squidreport.proxy.conf
#
# squidreport.proxy.microlinux.lan

<VirtualHost *:80>
ServerAdmin info@microlinux.fr
DocumentRoot « /var/www/squidanalyzer »
<Directory « /var/www/squidanalyzer »>
Options -Indexes +FollowSymlinks +MultiViews
AllowOverride None
</Directory>
ServerName squidreport.proxy.microlinux.lan
ServerAlias squidreport.proxy
ErrorLog logs/squidreport.proxy-error_log
CustomLog logs/squidreport.proxy-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/bin/squid-analyzer
# file /usr/bin/squid-analyzer
/usr/bin/squid-analyzer: Perl script text executable

Lancez 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 :

# time squid-analyzer

real 0m8.325s
user 0m7.220s
sys 0m0.967s

Vérifiez si le rapport a été généré correctement :

# tree /var/www/squidanalyzer/
/var/www/squidanalyzer/
├── 2024
│   ├── 03
│   │   ├── 09
│   │   │   ├── denied.html
│   │   │   ├── domain.html
│   │   │   ├── index.html
│   │   │   ├── mime_type.html
│   │   │   ├── network.html
│   │   │   ├── networks
│   │   │   │   └── 192.168.2.0
│   │   │   │   └── 192.168.2.0.html
………….

Affichez les pages dans un navigateur web depuis n’importe quel poste du réseau local. Sur la page d’accueil, cliquez sur Stat <année>, puis sur les infos que vous souhaitez afficher :

Réseaux
Utilisateurs
Top URLs
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/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.

 

Me contacter