Note Août 2016 : il existe une version plus récente, (2.4) voir ici l'article correspondant.
Note Avril 2018 : voir ici les détails sur la version 3.5.
Cette nouvelle version permet entre autres choses l'historisation des flux dans une base Mysql.
Les tests ont été réalisés dans une Machine Virtuelle fraîchement créée afin de mieux cerner les pré-requis.
J'ai d'abord installé un ensemble de compilation (make ... gcc-4.9), et Vim mon éditeur préféré.
Ah, au passage mettez votre utilisateur "standard" dans la liste des "sudoers" avec la maximum de droits (on est sur une MV de tests), cela servira plus tard.
Pour les pré-requis il suffit de :
build-essential git libglib2.0 libxml2-dev libpcap-dev
libtool libtool-bin rrdtool librrd-dev
autoconf automake autogen
redis-server wget libsqlite3-dev libhiredis-dev libgeoip-dev
libcurl4-openssl-dev libpango1.0-dev libcairo2-dev libpng12-dev
libmysqlclient-dev ethtool
Un "apt-get toute_cette_liste" est à lancer ... qui installe plein de trucs supplémentaires (#72Mo à télécharger).
Il faut aussi un serveur de base de données Mysql ou MariaDB, pour faire bonne mesure un "apt-get mysql-server-5.5 mysql-client-5.5" installe le gestionnaire de BDD.
Petite remarque, l'installation de Mysql signale une valeur "deprecated" :
Using unique option prefix key_buffer instead of key_buffer_size is deprecated and will be removed in a future release. Please use the full name instead.
Autant modifier ce paramètre tout de suite dans la config : remplacer "key_buffer" par "key_buffer_size".
Après cette petite parenthèse on peut, en continuant la lecture du "README.compilation" se lancer dans la compilation du logiciel.
A partir d'ici abandonner le user "root" et utiliser le user avec droits "sudo", "sudo" pourra être utilisé lorsque le besoin s'en fait sentir, mais "sudo" est de toute façon utilisé au cours de certains scripts.
D'abord, récupérer les sources (c'est un gros paquet de plus de 90Mo), à la date d'écriture de cet article c'est la version 2.2 :
wget https://sourceforge.net/projects/ntop/files/ntopng/ntopng-2.2.tar.gz/do… -O ntopng-2.2.tar.gz
La version installée est, en fait, une version 2.3 :
ntopng --version
v.2.3.160619 [Community Edition]
On le détare ensuite dans un répertoire tranquille et on est (presque) prêts.
Le répertoire "doc" contient plein de fichiers README dont l'un contient tous les pré-requis à la compilation et au fonctionnement de Ntopng, cela semble être le pied!
===========================================
cd le_repertoire_ntopng
./autogen.sh
./configure
Beaucoup de choses se passent et à la fin on vous rappelle de lancer : "make geoip" pour mettre à jour la base géographique. Je m'empresse de lancer cette commande avant toute chose et cela charge les bases "Lite" de Maxmind pour IPV4 et IPV6.
On peut enfin lancer le "make" en gardant les traces :
make 2>&1 | tee LOG.MAKE
La compilation est assez longue, mais elle compile plusieurs applications :
detectxsslib
hiredis
json-c
lsqlite3
LuaJIT-2.0.3
mongoose
patricia
rrdtool-1.4.8
snmp
zeromq-4.1.3
On est ainsi certain d'utiliser des versions spécifiques nécessaires au bon fonctionnement du logiciel.
L'option "install" de make vous recommande de créer un package à installer et fournit les outils nécessaires :
Make sure you have already run 'make geoip' to also install geoip dat files
While we provide you an install make target, we encourage you
to create a package and install that
rpm - do :
make build-rpm
deb - do :
cd packages/ubuntu
./configure
make
J'essaye le paquet Debian/Ubuntu
Le "./configure" a créé un fichier README qui conseille d'installer quelques paquets complémentaires "apt-get install debhelper fakeroot dpkg-sig" qui dans mon cas n'installe que "dpkg-sig libconfig-file-perl".
Je m'empresse de lancer le "make"
make 2>&1 | tee MAKE.LOG
qui démarre très fort en utilisant "sudo", la package est créé et à la fin, la signature échoue car aucune signature GPG n'est disponible. A part cette erreur le paquet semble OK et un contrôle du paquet donne un résultat correct :
dpkg -I ntopng_2.3.160619-757_i386.deb
new debian package, version 2.0.
size 4648220 bytes: control archive=12748 bytes.
47 bytes, 1 lines conffiles
309 bytes, 10 lines control
30016 bytes, 357 lines md5sums
667 bytes, 38 lines * postinst #!/bin/sh
101 bytes, 9 lines * postrm #!/bin/sh
664 bytes, 35 lines * preinst #!/bin/sh
387 bytes, 16 lines * prerm #!/bin/sh
Package: ntopng
Version: 2.3.160619-757
Architecture: i386
Maintainer: Luca Deri <deri@ntop.org>
Installed-Size: 19479
Depends: libsqlite3-0, libgeoip1, redis-server, librrd4, logrotate, libcurl3
Recommends: ntopng-data, pfring-dkms
Section: free
Priority: optional
Description: Web-based traffic monitoring.
Il est maintenant temps d'essayer ce paquet :
dpkg -i ntopng_2.3.160619-757_i386.deb
Sélection du paquet ntopng précédemment désélectionné.
(Lecture de la base de données... 138081 fichiers et répertoires déjà installés.)
Préparation du dépaquetage de ntopng_2.3.160619-757_i386.deb ...
Dépaquetage de ntopng (2.3.160619-757) ...
Paramétrage de ntopng (2.3.160619-757) ...
Rebuilding ld cache...
Adding the ntopng startup script
Making the /etc/ntopng directory...
Traitement des actions différées (« triggers ») pour systemd (215-17+deb8u4) ...
Traitement des actions différées (« triggers ») pour man-db (2.7.0.2-5) ...
Traitement des actions différées (« triggers ») pour libc-bin (2.19-18+deb8u4) ...
C'est tout ? Pas d'installation de base de données .... ni rien ?
Un script d'init a été installé, donnons lui un petit coup de "service ntopng start" ... le service se lance et crée un fichier minimal de config "ntopng.conf" de 1 ligne dans /etc/ntopng :
-G=/var/tmp/ntopng.pid
Le programme est bien lancé et attends sur le port 3000, voyons donc ce qui se passe sur ce port --> Iceweasel, pardon Firefox, sur le port 3000.
Un écran de login tout à fait semblable à celui de la version précédente ... un admin/admin (user/mot de passe par défaut) plus loin l'écran des "top flow talkers" s'affiche, tout a l'air de fonctionner, l'aspect général est semblable à celui de NtopNG 1.2.
En allant voir les préférences je trouve bien trace d'une base Mysql et d'une durée d'historisation, mais pas de couple user/password ? Un certain nombre de paramètres utiles pour les fichiers RRD afin de na pas épuiser son espace disque tout en gardant le détail voulu.
En examinant les logs (fichier "messages") quelques lignes concernent Ntopng :
ntopng: [NetworkInterface.cpp:950] WARNING: If you have TSO/GRO enabled, please disable it
ntopng: [NetworkInterface.cpp:952] WARNING: Use: sudo ethtool -K eth0 gro off gso off tso off
Je m'empresse de lancer la commande citée :
ethtool -K eth0 gro off gso off tso off
et de redémarrer Ntopng.
Au niveau de Mysql, aucune base n'a été créée et je n'ai pas trouvé les scripts de création ni les paramètres correspondants.
Pour utiliser Mysql il faut lancer Ntopng avec une option '-F mysql paramètres" et pour cela aucune il suffit de modifier le fichier de config en y ajoutant une ligne :
Les paramètres sont sous la forme :
mysql;<host>;<dbname>;<table name>;<user>;<pw>
soit pour moi :
-F=mysql;localhost;ntopng;ntopng;userntop;passntop
Les tables seront donc dans une base "ntopng" (à créer) et aurons pour préfixe "ntopng" et Ntopng se connectera avec "userntop/passntop".
Les tables sont ici :
- ntopngV4_0 pour les IP V4 "externes"
ntopngV4_1 pour les IP V4 "locales", ici 127.0.0.1 sans autre paramétrage - ntopngV6_0 pour les IPV6 "externes"
- ntopng_V6_1 pour les IPV6 "locales"
Ces tables comportent toutes les infos nécessaires, adresses,ports,nombre de paquets, nombre d'octets transférés, date de début et de fin (unix "epoch" format) une partie "INFO" dont le contenu est très intéressant car il contient, par exemple, le contenu de la demande dans le cas des appels à un DNS. Pour la partie "Json" je n'ai pas analysé le contenu exact.
Voir en annexe quelques scripts sql simples pour commencer.
Attention, la taille de la base peut rapidement devenir conséquente selon l'activité, un délai de conservation est d'ailleurs prévu dans les paramètres et fixé par défaut à 1 jour. Il faudra certainement créer des tables d'historisation condensées si on veut conserver un historique plus long.
Je vais rapidement générer et installer un paquet Debian 64 bits pour remplacer la version 1.2 précédente sur la machine "pont" vers Internet.