NtopNG
NtopNG jppNtop
C'est un logiciel assez ancien dont la maintenance et l'évolution sont suivis et continus, le projet est très actif en 2023/2024. De nouvelles versions sont présentées assez souvent et donnent toujours de nouvelles possibilités de suivi et d'analyse, la plus marquante, déjà ancienne était la première version "NG".
- La première version "NG" (1.2) est présentée ici.
- La version "NG" (2.2) est présentée ici et permet, entre autres nouveautés l'enregistrement des "flows" dans une base Mysql pour exploitation ultérieure.
- La dernière version stable début 2017 est la 2.4 présentée ici.
- Nouveauté après les vacances d'été 2017 est la 3.1 présentée ici.
- Avril 2018 la version 3.5 est présentée ici.
- Une statistique intéressante sur les ports les plus attaqués ici.
- Exploitation des données enregistrées.
- Utilisation de InfluxDB avec NtopNG pour affichage Grafana
NtopNG : version 1.2
NtopNG : version 1.2 jppNote Juin 2016 : un test d'une version plus récente (2.2) est disponible ici.
Note Octobre 2016 : notes sur la version 2.4 disponibles ici.
Note Avril 2018 : Présentation de la version 3.5 c'est lài.
Utilisateur de longue date de NTOP j'ai voulu tester cette nouvelle version 1.2 NG, comme elle n'existe pas dans les dépôts Debian standard je l'ai donc compilée depuis les sources.
Première chose : vérifier les pré-requis :
autotools-dev libtool
libgeoip1 libgeoip-dev
libsqlite3-dev libxml2-dev
redis-server
libglib2.0-dev
Si cette dernière n'est pas chargée vous aurez un message à la compilation (cf ci-dessous).
Charger le paquet (1.2.1 à ce jour) dans un répertoire tranquille :
cd MON_REPERTOIRE_SOURCES
wget http://sourceforge.net/projects/ntop/files/ntopng/ntopng-1.2.1.tgz
cd MON_REPERTOIRE_BUILD
tar -xvf ../ntopng-1.2.1.tgz
cd ntopng-1.2.1
./autogen.sh
./configure 2>&1 | tee CONFIGURE.LOG
qui vous rappelle à la fin de faire un "make geoip" qui charge les fichiers de données de localisation, on l'effectuera après la compilation.
make 2>&1 | tee MAKE.LOG
qui se termine cette première fois par une erreur :
configure: error: Please fix the library issues listed above and try again.
make[1]: Entering directory `/usr/src/PGM/BUILD/ntopng-1.2.1/third-party/rrdtool-1.4.8/src'
make[1]: *** No rule to make target `librrd_th.la'. Stop.
make[1]: Leaving directory `/usr/src/PGM/BUILD/ntopng-1.2.1/third-party/rrdtool-1.4.8/src'
make: *** [third-party/rrdtool-1.4.8/src/.libs/librrd_th.a] Error 2
En remontant un peu dans le LOG on trouve quelques warnings concernant glib2.0 :
I could not find a working copy of glib-2.0.
Check config.log for hints on why this is the case. Maybe you need to set
LDFLAGS and CPPFLAGS appropriately so that compiler and the linker can find
libglib-2.0 and its header files. If you have not installed glib-2.0,
Il semble manquer les fichiers de développement de GLIB2 -->
apt-get install libglib2.0-dev
et on relance :
make clean
./configure
make 2>&1 | tee MAKE.LOG
La compilation est assez longue sur ce brave CoreI3. Comme je n'ai pas utilisé de paramètres spécifique de répertoires l'installation se fera dans "/usr/local".
On peut constater que de nombreuses extensions tierces parties sont aussi compilées.
On lance maintenant le "make geoip" qui nous récupère sans problèmes les fichiers de localisation géographique.
Le fichier "Makefile" est très instructif, on y voit par exemple que ce paquet contient de quoi fabriquer ".deb" et ".rpm" pour installation sur d'autres machines.
On passe en "root" pour le "make install" qui s'effectue sans aucun problème.
Une étude plus détaillée des répertoires montre "packages/etc" avec deux répertoires "init" et "init.d" comprenant le script de démarrage et le répertoire "ini" la mise en place est rapide :
cd packages/etc/init.d
cp ntopng /etc/init.d
mkdir /etc/ntopng
cp ../init/ntopng.conf /etc/ntopng
update-rc.d ntopng defaults
Comme notre installation a été faite en mode "développement" (programmes dans /usr/local) il faut rectifier légèrement le script de lancement et modifier la variable NTOPNG_BINARY de "/usr/bin/ntopng" en "/usr/local/bin/ntopng".
Ne pas "oublier" de créer le fichier "ntopng.start" dans /etc/ntopng :
touch /etc/ntopng/ntopng.start
Il faut ajouter quelques "broquilles" a "/etc/ntopng/ntopng.conf" :
--user=ntopng
User qui sera utilisé, c'est important pour les droits sur le répertoire "data" et le fichier "PID".
-G=/var/lib/ntopng/ntopng.pid
Avec un seul tiret ! Celui-ci fixe le nom du fichier "pid", utilisé pour stopper le démon, mais attention le fichier est ouvert par le user "nobody" qui, au moins sur une Debian, n'a pas de droits sur /run (ou /var/run).
Avec un user personnalisé et un répertoire propre aucun problème.
--local-networks "192.168.1.0/24"
Pour fixer le ou les réseaux locaux (liste entre " séparée par des virgules)
--interface eth0
--interface eth1
Pour fixer les interfaces à utiliser (une ligne par interface), ici je laisse tomber l'interface "lo".
--data-dir /var/lib/ntopng
Un répertoire à créer avec droits lecture/écriture pour le user choisi : Ntop stocke ici les fichiers nécessaires y compris les RRD, il faut prévoir un peu d'espace disque.
--packet-filter="ip and not proto ipv6 and not ether host ff:ff:ff:ff:ff:ff and not net (224.0.0.0/8 or 239.0.0.0/8)"
Pour éliminer beaucoup de trafic "inintéressant", je n'ai pas IPV6 et les broadcast prennent de la place.
--http-port 3001
Si le port standard de 3000 vous déplaît.
--daemon
A ne pas louper ....
Avant de lancer le démon il faut encore :
- Créer le user ntopng
- Créer le répertoire /var/lib/ntopng et rendre "ntopng" propriétaire : chown ntopng:ntopng /var/lib/ntopng
- Cataloguer le démon : update-rc.d ntopng default
- Lancer le démon : service ntopng start
On peut ensuite se connecter sur localhost:3001 avec les mots de passe par défaut admin/admin, comme c'est original !
Depuis cet interface on peut créer d'autres utilisateurs et modifier le mot de passe par défaut de "admin".
L'interface est très riche et dispose de nombreuses fonctions, la génération d'alertes est parfois gênante ... et je n'ai pas encore testé les fonctions LUA.
NtopNG : version 2.2
NtopNG : version 2.2 jppNote 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.
NtopNG : version 2.4
NtopNG : version 2.4 jppCette dernière version apporte un plus intéressant (déjà présent en version 2.2) mais je n'ai pratiquement pas testé la 2.2 car la 2.4 Stable est parue peu après mes tests.
Note 2017 : voir tests de la version 3.1.
Les tests de cette version sont présentés dans plusieurs "chapitres" :
- Installation
- Quelques pistes d'exploitation des données :
NtopNG version 2.4 : Installation
NtopNG version 2.4 : Installation jppTélécharger la version 2.4 Stable par :
https://sourceforge.net/projects/ntop/files/ntopng/ntopng-2.4-stable.ta…
Les pré-requis de la 2.2 (voir article précédent) sont déjà installés, on va essayer de compiler la 2.4 directement :
./autogen.sh
Qui se passe bien et nous invite à lancer "configure".
./configure 2>&1 | tee LOG.CONFIGURE
Qui semble se dérouler sans accroc et nous rappelle de lancer "make geoip" avant d'utiliser le logiciel. On le lance tout de suite pour être sûr de ne pas oublier ! Cela se dépêche de charger les fichiers de maxmind (IPV4 et IPV6), puis on lance le make final :
make 2>&1 | tee LOG.MAKE
Et ... tout se termine correctement.
Donc si vous avez installé les pre-requis de la version 2.2 il n'y aura probablement aucun problème lors de la compilation.
Avant de lancer la nouvelle version on détruit les tables de notre user "NtopNG" de la base Mysql car ce n'est pas la meme structure de tables (1 table par interface en 2.2) et quelques champs supplémentaires.
Comme indiqué en fin de compilation il est aussi possible de générer un paquet (RPM ou DEB) et cette option est même conseillée. A part un petit problème avec la "clef" qui déclenche une petit erreur, le package Debian se génère parfaitement et je l'ai installé sur une autre machine. Je vous conseille cette méthode, tout est expliqué dans le message ... :
cd packages/ubuntu
./configure
make
........
Processing ../ntopng_2.4.161017-1373_amd64.deb...
gpg: error reading key: public key not found
gpg: no default secret key: secret key not available
gpg: /tmp/debsigs-ng.eP5yVK/digests: clearsign failed: secret key not available
E: Signing failed. Error code: 512
Makefile:10: recipe for target 'ntopng' failed
make: *** [ntopng] Error 1
L'erreur ne gêne pas la réalisation du paquet, elle ne concerne que la signature, qui est alors disponible dans le répertoire ".../packages" :
-rw-r--r-- 1 root root 698 oct. 17 22:42 ntopng_2.4.161017-1373_amd64.changes
-rw-r--r-- 1 root root 4903998 oct. 17 22:42 ntopng_2.4.161017-1373_amd64.deb
On peut aussi procéder de manière traditionnelle, un petit "su root" et on lance le non moins traditionnel :
make install 2>&1 | tee LOG.INSTALL
et on relance le service sans changer nos paramètres de la version 2.2 :
service ntopng start
Pour rappel le fichier cd config "/etc/ntopng/ntopng.conf" est minimal :
-G=/var/tmp/ntopng.pid
-F=mysql;localhost;ntopng;flows;userntop;passntop
Le fichier log (/var/log/ntopng/ntopng.log) nous signale que tout va bien et que tous les interfaces sont pris en compte.
Du coté de la base Mysql seules deux tables on été créées :
show tables; +------------------+ | Tables_in_ntopng | +------------------+ | flowsv4 | | flowsv6 | +------------------+ 2 rows in set (0.00 sec) |
L'analyse sera plus simple qu'en 2.2 car seules deux tables contiennent les données. Changement important dans la structure, les volumes échangés (bytes) sont subdivisés en IN_BYTES et OUT_BYTES.
Les interfaces étant en mode "promiscuous" tous les paquets passant sur le réseau aux alentours de vos interfaces sont enregistrés.
La zone "INFO" contient souvent des infos intéressantes, notamment pour le protocole DNS. Le champ INTERFACE_ID permet de repérer les différents interfaces, le champ NTOPNG_INTERFACE_NAME contient le nom de la machine d'origine, on pourra ainsi utiliser une seule base Mysql pour plusieurs capteurs NtopNG. Le numéro de VLAN est enregistré, ici c'est toujours zéro car je n'utilise pas de VLAN sur mon tout petit réseau.
Pour le champ "PROTOCOL" c'est le standard (TCP = 6, UDP = 17, ICMP = 1) on trouve cela dans tous les bons Wikipedia.
Attention, le volume de données dans la base est assez conséquent, sur un réseau un peu fréquenté on dépassera rapidement les 200 000 rangs prévoir le stockage adéquat !
Il faudra aussi prévoir une petite purge des tables au cas ou celle de Ntop ne soit pas suffisante. Il faut ensuite faire un peu de SQL pour exploiter les données enregistrées.
Après quelques minutes d'activité vous devriez voir quelques rangs dans votre base Mysql, pour commencer essayez le scripts SQL suivant :
select inet_ntoa(IP_SRC_ADDR) as IP_SRC, inet_ntoa(IP_DST_ADDR) as IP_DST,L4_DST_PORT, sum(IN_BYTES) as IN_BYTES,sum(OUT_BYTES) as OUT_BYTES,PACKETS from flowsv4 where IP_DST_ADDR not in (inet_aton('127.0.0.1'),inet_aton('192.168.1.31') ) group by IP_SRC_ADDR, IP_DST_ADDR,L4_DST_PORT order by IP_SRC |
ou encore celui-ci :
SELECT INTERFACE_ID,L7_PROTO,inet_ntoa(IP_SRC_ADDR) as IPSRC,L4_SRC_PORT, inet_ntoa(IP_DST_ADDR) as IP_DST,L4_DST_PORT, IN_BYTES,OUT_BYTES,PACKETS, FROM_UNIXTIME(FIRST_SWITCHED),FROM_UNIXTIME(LAST_SWITCHED), INFO,JSON FROM ntopng.flowsv4 order by FIRST_SWITCHED,IP_SRC_ADDR |
qui devraient vous afficher les résultats de manière claire et avec des adresses lisibles !
NtopNG : Myisam à Innodb
NtopNG : Myisam à Innodb jppNote : valable aussi en V2.4 et V3.0.
Les deux tables créées par NtopNG sont d'office en MyISAM, si, comme moi, vous avez d'autres tables en InnoDB dans votre base vous allez vouloir profiter des buffers de InnoDB pour vos traitements.
Par ailleurs, en cas de crash, InnoDB est plus "sûr" que MyISAM.
Mais, car il y a un "mais", si vous faites cette modification "à la main" pour passer les deux tables de MyISAM en InnoDB, ce qui est simple, un simple "alter table truc engine = innodb" ne suffit pas !
Si vous le faites, NtopNG s'empressera lors du prochain démarrage de repasser la table en MyISAM ! Et ce sans rien vous demander !
La seule manière pour réaliser l'exploit de passer en InnoDB est d'aller modifier les sources du paquet.
Le module "MySQLDB.cpp" vous tend les bras dans le répertoire "src". Il suffit de modifier quelques constantes "MyISAM" --> "InnoDB" aux environs de la ligne 310 pour ressembler à ceci :
// Modify database engine to MyISAM (that is much faster in non-transactional environments) ntop->getTrace()->traceEvent(TRACE_NORMAL, snprintf(sql, sizeof(sql), |
Après une petite recompilation et la régénération du paquet on ré-installe et au premier démarrage nos tables sont migrées en InnoDB, automatiquement et sans rien demander !
Attention; si vos tables sont un peu volumineuses, cela dure un certain temps ! Et demande de l'espace disque dans lon cas environ le double de l'espace occupé par la table MyIsam.
NtopNG : début d'analyse des données
NtopNG : début d'analyse des données jppJ'ai installé NtopNG, par le paquet Debian généré lors de la compilation, sur la machine qui me sert de frontal internet et j'ai commencé à analyser un peu les données enregistrées. D'abord, ça crache épais, je suis actuellement seul à la maison et donc le trafic est un peu réduit. Quelques procédures exemples sont téléchargeables en fin de page.
Le petit ordre SQL suivant donne un comptage sans prétentions :
SELECT DAY(from_unixtime(FIRST_SWITCHED)),count(*) FROM ntopng.flowsv4 group by 1 |
Ramène :
2 22037
3 77469
On est le 3 août vers 20h00 et j'ai démarré le zinzin hier soir, j'ai bossé toute la journée ... et quand même plus de 100000 flux enregistrés !
J'ai aussi extrait les adresses IP et j'ai crée une table IP,PAYS,AS,nom de domaine (voir en fin de page les liens de téléchargement) .... sur ces deux jours j'ai déjà "repéré" plus de 1700 adresses différentes ... provenant de 88 pays. Quand on parle de mondialisation ...
Bien sûr certains pays sont représentés par une seule adresse. Le petit tableau suivant montre les pays pour lesquels j'ai "collecté" plus de 10 adresses ... :.
PAYS | count(*) |
US | 535 |
CN | 133 |
FR | 122 |
VN | 94 |
BR | 94 |
RU | 79 |
KR | 64 |
TW | 63 |
NL | 60 |
IN | 36 |
EU | 34 |
DE | 30 |
JP | 28 |
RO | 24 |
CO | 22 |
TR | 21 |
MX | 17 |
UA | 16 |
ES | 13 |
PL | 12 |
GB | 12 |
CA | 12 |
ID | 12 |
IT | 10 |
C'est déjà pas mal.
Les Chinois, les russes et les vietnamiens sont systématiquement bloqués par le pare-feu, mais NtopNG enregistre toutes les connexions. Attendons 23:59 pour avoir une journée complète.
Il est 23:59, statistique sur une journée complète.
Visiblement il n'y a pas d'heures pour les braves, il y en a toute la journée.
Télécharger les scripts :
La création de la table IPV4_DOMAINE, renommez le en ".sql" pour faire bien !
La création des index complémentaires sur la table "flowsv4", idem pour le ".sql"
Le script bash "MAJ_DOMAINE" à renommer en .sh (nécessite le script DNS_RES)
Le script bash DNS_RES à renommer en .sh, qui cherche les PAYS,noms DNS, FAI à intégrer dans la base.
Ce dernier script nécessite l'installation des outils "geoip".
NtopNG : version 3.1
NtopNG : version 3.1 jppNote Avril 2018 : voir l'article sur la version 3.5.
Note décembre 2017 : cet article reste valable pour les versions 3.2 et 3.3.
Depuis quelques temps chaque connexion à l'interface WEB de NtopNG me rappelle qu'il existe une version 3.x ... que je vais essayer d'installer et de tester.
Pour mémoire paquets de dev installés pour la V2.4 :
apt-get install build-essential git bison flex libglib2.0 libxml2-dev libpcap-dev libtool rrdtool librrd-dev autoconf automake autogen redis-server wget libsqlite3-dev libhiredis-dev libgeoip-dev libcurl4-openssl-dev libpango1.0-dev libcairo2-dev libpng-dev libmysqlclient-dev libnetfilter-queue-dev libmysqlclient-dev zlib1g-dev libzmq3-dev
A priori quelques nouvelles bibliothèques ou include de développement a résoudre par :
apt-get install default-libmysqlclient-dev libmariadbclient-dev libmariadbclient-dev-compat libpng-dev libcap-dev libldap2-dev
En principe mes systèmes sont "à jour" de la dernière version.
Par contre, pas de "tar.gz" à télécharger directement, tout passe par clonage de dépots "git".
Créer un répertoire de compilation, par exemple "ntopng-3.0" dans un endroit tranquille, ici /usr/src/PGM/BUILD.
Attention à l'ordre des opérations !
On récupère les sources de nDPI dans le dépot github :
cd le_répertoire_de_compilation git clone https://github.com/ntop/nDPI.git |
On les compile :
cd nDPI ./autogen.sh 2>&1 | tee LOG.AUTOGEN ./configure 2>&1 | tee LOG.CONFIGURE make 2>&1 | tee LOG.MAKE |
La lecture des fichiers résultats permet de repérer les erreurs éventuelles.
Pour moi, tout s'est bien passé ...
Si chacune des deux étapes s'est exécutée sans erreurs on peut passer à la suite.
Récupérer les sources de Ntop :
cd le_répertoire_de_compilation ( ou cd .. si vous étiez dans nDPI) git clone https://github.com/ntop/ntopng.git cd ntopng Ici corriger éventuellement MyISAM --> InnoDB (détails ici). ./autogen.sh 2>&1 | tee LOG.AUTOGEN ./configure 2>&1 | tee LOG.CONFIGURE make 2>&1 | tee LOG.MAKE |
Un petit message en fin d'exécution vous rappelle qu'il faudra charger les données GeoIP :
Please do not forget to download GeoIP databases doing: "make geoip"
On peut même le faire de suite ...
La compilation se passe bien avec juste quelques "warnings" à la fin :
/usr/bin/ld: warning: libssl.so.1.0.2, needed by /usr/lib/x86_64-linux-gnu/libcurl.so, may conflict with libssl.so.1.1
/usr/bin/ld: warning: libssl.so.1.0.2, needed by /usr/lib/x86_64-linux-gnu/libcurl.so, may conflict with libssl.so.1.1
/usr/bin/ld: warning: libcrypto.so.1.0.2, needed by /usr/lib/x86_64-linux-gnu/libcurl.so, may conflict with libcrypto.so.1.1
Effectivement les systèmes Debian actuels disposent aujourd'hui de trois versions de libssl et libcrypto (1.0.0, 1.0.2 et 1.1), ce qui pourrait poser parfois des problèmes.
Mais peut-être plus grave les warnings suivants :
src/Utils.cpp:1468:67: warning: ‘int readdir_r(DIR*, dirent*, dirent**)’ is deprecated [-Wdeprecated-declarations]
for (ret = readdir_r(d, &entry, &result); result && !ret; ret = readdir_r(d, &entry, &result)) { ^~~~~~~~~
In file included from /usr/include/features.h:364:0,
from /usr/include/stdio.h:27,
from /usr/src/PGM/BUILD/ntopng-3.0/ntopng/include/ntop_includes.h:33,
from src/Utils.cpp:22:
/usr/include/dirent.h:189:12: note: declared here
extern int __REDIRECT (readdir_r,
Il est possible que vous obteniez, comme moi, des messages lors du "make" tels que :
"aclocal-1.11: command not found"
En effet Debian Stretch est construit avec aclocal-1.15, une solution brutale :
sudo ln -s /etc/alternatives/aclocal /usr/bin/aclocal-1.11
Lorsque vous exécuter le fatidique "make install 2>&1 | tee LOG.INSTALL"
- Le binaire "ntopng" est copié dans /usr/local/bin
- On vous rappelle de faire un "make geoip"
- On vous donne au passage la méthode pour réaliser un RPM ou un DEB :
rpm - do 'make build-rpm'
deb - do 'cd packages/ubuntu;./configure;make
Si vous voulez créer un paquet Debian il faudra installer le paquet "dpkg-sig" ou modifier le Makefile.in en commentant les lignes "dpkg-sig .....".
J'ai ensuite généré le package Debian, et obtenu deux paquets :
ntopng_3.1.171028-3630_amd64.deb
ntopng-data_3.1.171028_all.deb
Que je me suis empressé d'installer, sans succès car il me manque "PF_RING" !
Remarque : les fichiers "GeoIP" sont chargés et installés dans le paquet "data". Il faudra néanmoins penser à les rafraîchir de temps en temps.
Note : après usage NtopNG recharge régulièrement les données pour les "blacklisted hosts", je n'ai pas vu de rechargement des données GeoIP --> les rafraîchir ne peut pas faire de mal !
J'ai téléchargé un stock de ".deb" depuis :
http://packages.ntop.org/debian/stretch/x64/PF_RING
J'ai téléchargé le paquet le plus récent : pfring_7.1.0-1515_amd64.deb
qui dépends de pfring-dkms-7.1.0 que l'on peut charger avec :
http://packages.ntop.org/ubuntu/16.04/all/PF_RING-dkms
et prendre la version 7.1.0 compatible avec la précédente. Son installation génère un module de kernel qui est installé dans la foulée, on peut alors installer "pfring_7.1.0-1515_amd64.deb" puis les deux paquets "ntopng".
Le lancement semble OK et le port HTTP (3002 pour moi) est activé.
Vite quelques essais !
Scripts SQL simples
Scripts SQL simples jppQuelques scripts permettant de répondre à quelques questions simples sur ce qui "passe" sur votre réseau.
Qu'a fait l'adresse XXX.XXX.XXX.XXX ?
Avec appoint de la table personnelle IPV4_DOMAINE, cf en fin de page pour le téléchargement des scripts).
SELECT FW.INTERFACE_ID NIC,inet_ntoa(FW.IP_SRC_ADDR) SRCIP ,FW.L4_SRC_PORT SPORT, inet_ntoa(FW.IP_DST_ADDR) DSTIP,FW.L4_DST_PORT DPORT, FW.PROTOCOL TCPIP, FW.IN_BYTES, FW.OUT_BYTES,FW.PACKETS, DATE_FORMAT(FROM_UNIXTIME(FW.FIRST_SWITCHED), '%H:%i:%s %d-%m-%Y') DEBUT, DATE_FORMAT(FROM_UNIXTIME(FW.FIRST_SWITCHED), '%H:%i:%s %d-%m-%Y') FIN, FW.INFO,DO.CODPAYS,DO.SRV,DO.DOM,DO.COMPAGNIE FROM ntopng.flowsv4 FW left join ntopng.IPV4_DOMAINE DO on ( FW.IP_SRC_ADDR = DO.IP_V4 or FW.IP_DST_ADDR = DO.IP_V4= where ( FW.IP_SRC_ADDR = inet_aton('XXX.XXX.XXX.XXX') or FW.IP_DST_ADDR = inet_aton('XXX.XXX.XXX.XXX') ) and FW.L4_DST_PORT != 123 order by 10 limit 32 |
Bien sûr la clause "limit 32" peut être modifiée ! Pour voir plus de 32 heureux sélectionnés.
Plus simple une statistique par jour.heure :
select (DATE_FORMAT(FROM_UNIXTIME(FIRST_SWITCHED),'%Y-%m-%d')) jour, (DATE_FORMAT(FROM_UNIXTIME(FIRST_SWITCHED),'%H')) heure,count(*) from ntopng.flowsv4 group by 1,2 |
Plus drôle (??), quels sont les ports des visiteurs classés en décroissant :
SELECT FW.L4_SRC_PORT, count(*) FROM ntopng.flowsv4 FW where FW.IP_SRC_ADDR <> inet_aton('127.0.0.1') and FW.IP_SRC_ADDR not between inet_aton('192.168.1.0') and inet_aton('192.168.3.255') and FW.IP_DST_ADDR not between inet_aton('224.0.0.1') and inet_aton('224.255.255.255') and FW.IP_DST_ADDR not between inet_aton('239.0.0.1') and inet_aton('239.255.255.255') and FW.IP_DST_ADDR <> inet_aton('255.255.255.255') group by 1 order by 2 desc |
Celui-ci utilise aussi la table "IPV4_DOMAINE" que j'ai créée pour conserver les renseignements sur les IP que l'on retrouve dans les DNS et avec "geoiplookup". (Des liens de téléchargement des procédures en fin de la page suivante) :
select inet_ntoa(FW.IP_DST_ADDR) DSTIP,FW.L4_DST_PORT DPORT,inet_ntoa(FW.IP_SRC_ADDR) SRCIP,FW.INTERFACE_ID ETH, DATE_FORMAT(FROM_UNIXTIME(FW.FIRST_SWITCHED), '%Y-%m-%d') DEBUT,FW.INFO,DO.CODPAYS, sum(FW.IN_BYTES) INB,sum(FW.OUT_BYTES) OUTB,sum(FW.PACKETS) PAQ, DO.CODPAYS,DO.SRV,DO.DOM,DO.COMPAGNIE from ntopng.flowsv4 FW left join ntopng.IPV4_DOMAINE DO on FW.IP_DST_ADDR = DO.IP_V4 where FW.IP_DST_ADDR not between inet_aton('127.0.0.1') and inet_aton('127.255.255.255') and FW.IP_DST_ADDR not between inet_aton('192.1.0.1') and inet_aton('192.168.3.255') and FW.IP_DST_ADDR not between inet_aton('224.0.0.1') and inet_aton('224.255.255.255') and FW.IP_DST_ADDR not between inet_aton('239.0.0.1') and inet_aton('239.255.255.255') and FW.IP_DST_ADDR <> inet_aton('255.255.255.255') group by 1,2,3,4,5,6 order by IP_DST_ADDR,L4_DST_PORT,3 |
Pour rendre les listes plus lisibles ajoutez une table "PAYS" :
CREATE TABLE PAYS ( CODPAYS char(2) NOT NULL DEFAULT '', CODPAYS_3 char(3) DEFAULT NULL, ENG_NAME varchar(40) DEFAULT NULL, FR_NOM varchar(40) DEFAULT NULL, PRIMARY KEY (CODPAYS) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
Cette table est disponible en téléchargement pour MySQL/MariaDB.
Allez, cela suffit pour aujourd'hui !
NtopNG : plugin Grafana
NtopNG : plugin Grafana jppPlugin NtopNG pour Grafana.
Note 2019 : ce plugin n'est plus maintenu et ne fonctionne plus avec les versions récentes de Grafana. Pour utiliser les données de NtopNG dans Grafana voir ICI.
Ce plugin permet l'accès aux données de NtopNG par Grafana en tant que "datasource".
Installer le plugin.
Dans la machine "supportant" Grafana lancer la commande :
grafana-cli plugins install ntop-ntopng-datasource
installing ntop-ntopng-datasource @ 1.0.0
from url: https://grafana.com/api/plugins/ntop-ntopng-datasource/versions/1.0.0/d…
into: /var/lib/grafana/plugins
Failed downloading. Will retry once.
✔ Installed ntop-ntopng-datasource successfully
Pour vérification : ls -al /var/lib/grafana/plugind montre un répertoire ntop-ntopng-datasource.
Puis "systemctl restart grafana-server" et connexion à Grafana.
Menu Datasource --> Add data source.
Dans la boîte de dialogue "Type" on trouve bien "ntopng" que l'on sélectionne, pour le reste voir l'image écran suivante :
Pour créer un graphique dans Grafana c'est assez standard sauf pour une chose : la boite de sélection des métriques.
NtopNG propose deux types de métrique : "host" et "interface" mais la boite de dialogue ne présente pas l'intégralité des données il faut fournir au moins le début du critère recherché afin de préciser l'affichage. L'affichage original commence par les données "host" et ne les montre même pas toutes et sans tri apparent, il faut frapper "host_" suivi du début de l'adresse IP pour limiter l'affichage et pouvoir choisir ce que l'on désire.
Pour voir les métriques "interface" il faut frapper "i" pour voir apparaître la liste et effectuer son choix.
Certaines métriques donnent un message "Data points outside time range", ceci concerne notamment les métriques "total_packets" et "total_bytes". Les métriques "pps" (paquets) et "bps" (bytes), elles, fonctionnent normalement. Beaucoup de métriques "host" retournent "No data points", c'est le cas de nombreuses adresses n'ayant eu que peu de trafic, par contre pour les machines locales ou connectées souvent les indications semblent fiables.
On peut ainsi présenter des graphes de débit réseau de machines ne possédant pas de "senseur", le débit est celui constaté sur la machine équipée de NtopNG (en général la passerelle Internet).
A noter pour les interfaces une métrique "allprotocols_bps" présente des graphes pour les principaux types de flux : SSL, HTTP, SNMP,Google, SSH ...
Remarque : l'utilisation d'échelles "log" est souvent nécessaire pour garder mieux voir les grandes variations de débit.
Exemple de graphes "réseau" issus des données de NtopNG, au passage ces graphes sont effectués avec la version 5 de Grafana qui s'est installée sans douleur.
Les graphiques sont presque aussi beaux que ceux obtenus avec Omeganoc.