Actualités

Suivez l'évolution de Seelog ,nouvelles fonctionnalités, améliorations de sécurité et notes de version détaillées.

🌍
Fonctionnalité Mai 2026

Géolocalisation IP avec DB-IP LITE ,lecteur MMDB pur PHP

Seelog intègre désormais un lecteur MMDB (MaxMind Binary Database) écrit entièrement en PHP, sans aucune extension C ni dépendance externe. Cette implémentation prend en charge les fichiers .mmdb au format MaxMind DB version 2, utilisés à la fois par MaxMind GeoLite2 et par DB-IP LITE.

La grande nouveauté est la compatibilité native avec DB-IP Country LITE, une base de géolocalisation gratuite et sans inscription disponible en téléchargement direct sur db-ip.com. Contrairement à MaxMind GeoLite2, elle ne nécessite ni compte ni clé de licence ,il suffit de télécharger le fichier .mmdb.gz, de le décompresser et de le placer dans le répertoire configuré.

La détection du pays se fait en O(log n) via la structure d'arbre binaire MMDB, ce qui garantit des temps de résolution inférieurs à 1 ms même pour des sessions de plusieurs milliers d'entrées. Les drapeaux sont affichés en emoji Unicode ou via des images SVG/PNG locales selon la configuration.

La base DB-IP Country LITE est mise à jour mensuellement. Pour automatiser le renouvellement, il suffit de planifier un wget ou curl dans un cron job mensuel pointant sur l'URL de téléchargement stable.
// Configuration dans seelog.php $geoip_db = '/var/www/geoip/dbip-country-lite.mmdb'; $flag_mode = 'emoji'; // 'emoji' | 'png' | 'svg' $flag_dir = './flags/'; // utilisé si flag_mode != 'emoji'

Pour les serveurs mutualisés sans accès SSH, la base peut être placée dans n'importe quel répertoire lisible par PHP ,y compris en dehors de la racine web pour plus de sécurité. Le chemin est configurable dans l'interface ou via le JSON de configuration sauvegardable.

☠️
Sécurité Avril 2026

Détection des menaces Log4Shell, injections SQL, SPAM ,12 catégories

La version d'avril 2026 renforce considérablement le moteur de détection des menaces, qui passe de 7 à 12 catégories distinctes. Chaque requête dans vos logs Apache est désormais analysée contre un ensemble de patterns regex couvrant les attaques les plus courantes observées dans la nature.

Les nouvelles catégories ajoutées incluent la détection des tentatives d'exploitation Log4Shell (CVE-2021-44228) via les patterns ${jndi:, la détection de traversal de chemin avancé avec encodages URL multiples (%2e%2e%2f, ..%c0%af), et une catégorie dédiée aux scanners de CMS ciblant Drupal, Joomla et PrestaShop.

Les 12 catégories sont : Shell/RAT upload · Log4Shell · Injection SQL · Traversal de chemin · Fichiers système (/etc/passwd, /proc/) · PHPMyAdmin · Fichiers secrets (.env, .git, .htpasswd) · Panneaux d'admin · WordPress scan · CMS génériques · Backups exposés (.bak, .sql) · Scanners d'inventaire.

Dans l'interface, chaque session affichant une menace est marquée d'un badge coloré selon la gravité : rouge pour critique, orange pour suspect, jaune pour sonde. Un filtre dédié dans le tableau des sessions permet d'isoler immédiatement les sessions menaçantes, avec export possible de la liste des IPs.

// Exemple de pattern Log4Shell (simplifié) $patterns['log4shell'] = [ 'regex' => '/\$\{jndi:(ldap|rmi|dns|corba):/i', 'level' => 'critical', 'label' => 'Log4Shell (CVE-2021-44228)', ];

Les graphiques d'évolution des menaces et du spam ont également été séparés : deux courbes distinctes apparaissent dans la section sécurité, synchronisées avec la granularité globale (jour/mois/année), pour distinguer clairement la tendance des attaques directes de celle du trafic spam référent.

🤖
Bots Mars 2026

47+ bots reconnus dont archive.org, Discord, Telegram, GPTBot

La base de détection des robots s'enrichit de 14 nouvelles entrées pour atteindre plus de 47 bots identifiés par leur User-Agent. Cette version ajoute en priorité les bots issus du monde de l'IA générative et des plateformes sociales, qui représentent une part croissante du trafic automatisé observé sur les serveurs web en 2025-2026.

Parmi les nouveaux bots : GPTBot (OpenAI), ClaudeBot (Anthropic), PerplexityBot, Discordbot (prévisualisation de liens), TelegramBot, WhatsApp, ia_archiver (archive.org/Wayback Machine), Slurp (Yahoo), SeznamBot (Tchéquie), Yeti (Naver, Corée du Sud) et Mail.RU_Bot.

Chaque bot dispose d'une couleur distinctive dans les graphiques d'évolution. Les bots IA sont représentés dans des teintes violettes, les moteurs de recherche en bleu, les outils de monitoring en vert, et les archiveurs web en brun.

Un mécanisme de détection générique complète la liste nommée : tout User-Agent contenant les sous-chaînes bot, crawler, spider, scanner ou slurp (insensible à la casse) est automatiquement classé comme bot, même s'il n'est pas dans la liste nominative. Ces bots génériques apparaissent dans une catégorie "Autres bots" dans les graphiques.

// Extrait de la liste des bots nommés $bots = [ 'Googlebot' => ['color'=>'#4285F4', 'label'=>'Googlebot'], 'GPTBot' => ['color'=>'#10a37f', 'label'=>'GPTBot (OpenAI)'], 'ClaudeBot' => ['color'=>'#d97757', 'label'=>'ClaudeBot (Anthropic)'], 'Discordbot' => ['color'=>'#5865F2', 'label'=>'Discordbot'], 'ia_archiver' => ['color'=>'#7b4f2a', 'label'=>'archive.org'], // ... 42 autres entrées ];

La liste complète des bots détectés est consultable sur la page Fonctionnalités. Elle est mise à jour régulièrement en fonction des nouveaux robots observés dans les logs de la communauté.

📋
Fonctionnalité Février 2026

Sessions AJAX paginées avec tri multi-colonnes ,nouveau tableau de sessions

Le tableau de sessions a été entièrement refondu. La version précédente affichait toutes les sessions d'un coup, ce qui pouvait atteindre plusieurs milliers de lignes pour des serveurs actifs. La nouvelle implémentation charge 40 sessions par page via des requêtes AJAX légères, sans rechargement de page complet.

Le tri multi-colonnes permet de classer les sessions par dernier accès (par défaut décroissant), nombre de pages vues, volume de données transféré, ou durée de session. Un clic sur l'en-tête de colonne inverse l'ordre ; un deuxième clic revient au tri par défaut. Le tri et la pagination sont entièrement gérés côté serveur PHP pour ne jamais transférer plus de données que nécessaire.

Les filtres Humains / Bots / Menaces sont conservés lors de la navigation entre les pages, et la pagination repart à la page 1 automatiquement lors du changement de filtre ou de tri.

Chaque ligne du tableau est cliquable pour développer le détail de la session : liste chronologique des URLs visitées avec heure précise, code HTTP, taille de la réponse, référent, et User-Agent complet. Les URLs pointant vers des ressources statiques (CSS, JS, images) sont masquées par défaut mais peuvent être affichées via une case à cocher.

// Paramètres AJAX envoyés au serveur { "page": 2, "sort": "pages", "order": "desc", "filter": "humans", "date_from": "2026-05-01", "date_to": "2026-05-20" }

Les performances sont significativement améliorées : là où le rendu complet prenait jusqu'à 8 secondes pour 50 000 entrées de log, le premier rendu AJAX se fait désormais en moins de 800 ms, les pages suivantes en moins de 300 ms grâce à la mise en cache des sessions pré-calculées.

💾
Configuration Janvier 2026

Sauvegarde et restauration de configuration en JSON ,entièrement côté client

Seelog permet désormais de sauvegarder l'intégralité de sa configuration dans un fichier JSON téléchargé localement, et de la restaurer en un clic ,sans aucun stockage serveur. Cette fonctionnalité est particulièrement utile pour les administrateurs gérant plusieurs serveurs avec des configurations différentes, ou pour partager une configuration au sein d'une équipe.

Le fichier JSON exporté contient : le chemin du répertoire de logs, la plage de dates sélectionnée, les filtres actifs, le nombre de sessions par page, les paramètres de géolocalisation, le mode d'affichage des drapeaux, les filtres d'URL personnalisés, et les préférences de tri. À l'importation, tous ces paramètres sont appliqués instantanément sans rechargement.

La configuration sauvegardée ne contient aucune donnée de log ,seulement les préférences utilisateur. Elle peut être stockée localement, versionnée dans Git, ou partagée librement sans risque de fuite d'information sensible.
// Exemple de fichier seelog-config.json exporté { "log_dir": "/var/log/apache2/", "date_from": "2026-01-01", "date_to": "2026-05-20", "sessions_page": 40, "geoip_db": "/var/www/geoip/dbip-country-lite.mmdb", "flag_mode": "emoji", "url_filters": ["/wp-admin/", "/xmlrpc.php"] }

L'implémentation est entièrement en JavaScript natif : JSON.stringify() pour l'export et FileReader + JSON.parse() pour l'import. Le fichier est téléchargé via un lien data: temporaire créé dans le DOM ,aucune requête réseau supplémentaire n'est effectuée.

🔗
Sécurité Décembre 2025

Filtre d'URL personnalisé dans la bannière ,exclure les faux positifs

Un système de filtres d'URL personnalisables a été ajouté dans la bannière de configuration. Il permet d'exclure certaines URLs ou préfixes de chemin de l'analyse des sessions, ce qui est utile pour éliminer les faux positifs ,notamment les requêtes de vos propres outils de monitoring, les webhooks, ou les endpoints d'API connus.

Les filtres peuvent être définis comme des préfixes de chemin exacts (ex. /healthcheck), des suffixes d'extension (ex. .woff2), ou des expressions régulières complètes. Ils s'appliquent aussi bien au calcul des sessions qu'aux graphiques, assurant une cohérence totale des données affichées.

Cas d'usage typique : exclure les requêtes Googlebot de la vue "Humains", filtrer les assets statiques des graphiques d'activité, ou ignorer les health checks de votre load balancer qui génèrent des dizaines de lignes de log par minute.

Les filtres d'URL sont sauvegardés dans la configuration JSON et persistent entre les sessions. L'interface affiche en temps réel le nombre de requêtes filtrées pour chaque règle, permettant d'ajuster rapidement les patterns sans avoir à relire manuellement les logs.

// Filtres d'URL dans la config $url_filters = [ '/healthcheck', // préfixe exact '/api/webhook', // préfixe exact '/\.woff2$/', // regex : exclure fontes '/\.(css|js|png|svg)$/', // regex : exclure assets ];

Note : les filtres d'URL n'affectent pas la détection des menaces. Une requête vers /etc/passwd sera toujours signalée même si elle correspond à un filtre d'exclusion, afin de ne jamais manquer une attaque réelle.

🗜️
Fonctionnalité Novembre 2025

Support natif des fichiers .tar.gz ,lecteur tar/gz pur PHP sans extension

Seelog prend désormais en charge la lecture directe des archives .tar.gz sans requérir l'extension PHP phar ni le binaire tar système. Un lecteur tar/gz entièrement implémenté en PHP pur parcourt l'archive en streaming, extrait uniquement les fichiers de log correspondant aux filtres de date actifs, et les analyse à la volée.

Cette fonctionnalité répond à un besoin courant sur les hébergements mutualisés : logrotate archive les logs anciens au format access.log.1.tar.gz ou access.log.tar.gz, et il était auparavant impossible de les analyser avec Seelog sans décompression manuelle préalable.

Le lecteur supporte les formats tar GNU et POSIX ustar, avec des blocs de 512 octets. La décompression gzip utilise zlib_decode() si disponible, ou la lecture par chunks via les wrappers de flux PHP ,compatibilité PHP 5.3 garantie.

Les formats de fichiers logs désormais supportés par Seelog : .log, .log.1, .log.N (rotations numérotées), .log.gz (gzip simple), .log.N.gz, et .log.tar.gz (archive tar compressée). La détection du format est automatique basée sur l'extension et le magic number du fichier.

// Formats auto-détectés dans le répertoire de logs access.log → lecture directe access.log.1 → lecture directe access.log.2.gz → décompression gzip access.log.tar.gz → extraction tar + gzip site.com-access.log → vhost détecté : site.com

Les performances restent excellentes grâce au streaming : Seelog ne charge jamais l'intégralité d'une archive en mémoire, mais lit ligne par ligne en maintenant un buffer de 64 Ko. Un fichier .tar.gz de 500 Mo est traité avec moins de 8 Mo de mémoire PHP.

📊
Bots Octobre 2025

Graphiques d'évolution par bot avec sélecteur de bots interactif

La section bots s'enrichit d'un graphique d'évolution temporelle avec un sélecteur de bots interactif à pastilles colorées cliquables. Chaque bot identifié dispose d'une pastille de sa couleur distinctive ; un clic affiche ou masque la courbe correspondante dans le graphique Chart.js sous-jacent.

Un bouton "Tous les bots" affiche la somme de toutes les activités robotiques sur la période sélectionnée, offrant une vue globale de la pression des crawlers sur votre serveur. La granularité (jour / mois / année) est synchronisée avec le sélecteur global en haut de page, ce qui assure la cohérence entre tous les graphiques de l'interface.

Astuce : en activant uniquement GPTBot et ClaudeBot simultanément, vous pouvez comparer visuellement l'activité des crawlers d'OpenAI et d'Anthropic sur votre site sur les 12 derniers mois ,une information précieuse pour comprendre quelle part de votre contenu est aspirée par les LLMs.

Le graphique utilise Chart.js en mode line avec remplissage (fill: true) et interpolation tension: 0.4, rendant les courbes lisses et agréables à lire même pour des données très irrégulières. Les axes sont automatiquement calibrés pour que la courbe la plus haute occupe toujours 80% de la hauteur du graphique.

// Données envoyées au graphique Chart.js { "labels": ["2025-10", "2025-11", "2025-12", ...], "datasets": [ { "label": "Googlebot", "data": [142, 198, 167, ...], "borderColor": "#4285F4" }, { "label": "GPTBot", "data": [38, 52, 71, ...], "borderColor": "#10a37f" } ] }

Les données du graphique sont calculées côté PHP lors du chargement de la page et injectées directement dans le DOM via un bloc <script>, évitant une requête AJAX supplémentaire au premier affichage. Les mises à jour lors des changements de granularité ou de plage de dates se font via AJAX JSON.

Prêt à analyser vos logs ?

Téléchargez Seelog, copiez-le sur votre serveur, ouvrez votre navigateur. C'est tout.