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.tar.gz/dow…
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 (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".