wiki/Howtonfdump.md
2017-10-23 15:40:09 -04:00

143 lines
5.1 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: Howto nfdump
---
* Documentation nfdump : <http://nfdump.sourceforge.net/>
* Documentation NfSen : <http://nfsen.sourceforge.net/>
* manpage nfdump(1) : <https://manpages.debian.org/jessie-backports/nfdump/nfdump.1.html>
**nfdump** est un outil pour gérer des données [Netflow](HowtoOpenBSD/Netflow). On l'associe en général à **nfcapd** un démon chargé de collecter les _Netflow_ et parfois à **NfSen** qui permet une utilisation via une interface web.
## Installation
~~~
# apt install nfdump
$ nfdump -V
nfdump: Version: 1.6.13
~~~
## nfcapd pour collecter les flows
Il faut au préalable [avoir configuré l'export des flows sur vos routeurs](HowtoOpenBSD/Netflow).
On peut ainsi lancer le démon **nfcapd** en configurant via `/etc/default/ndump` :
~~~
nfcapd_start=yes
~~~
Par défaut, il écoute en UDP/9995 et stocke les données _Netflow_ dans `/var/cache/nfdump`
On peut bien sûr configurer d'autres options, exemple d'une façon de le lancer :
~~~
$ nfcapd -w -D -p 9996 -u foo -g www-data -B 200000 -S 1 -P /var/run/nfcapd-p9996.pid -z -I routeur -l /srv/nfdump/routeur
~~~
## nfdump pour analyser les flows
On peut utilise **nfdump** en ligne de commande :
~~~
$ nfdump -M /var/cache/dump [-R file1:file2] [FILTRE] [options]
~~~
Options utiles pour **lister** les flows :
* `-c N` : limite à N flows
* `-b` : agrège les flows aller/retour (bi-directional)
* `-A <LISTE>` : agrège les flows, exemples : **-A proto,srcip,dstip**, **-A proto,srcip,dstport**
* `-t <intervalle>` : limite à un intervalle précis, exemple _-t 2011/03/26.22:35:10-2011/03/26.22:36:03_
* `-o line6` : afficher les adresses IPv6 entièrement (au lieu d'une forme tronquée telle que 2001:db8..000::58)
* `-n 10` : limiter le résultat au top 10, mettre à 0 pour avoir tous les résultats
Options utiles pour **trier** les flows :
* `-s ip/flows -n 10` : top 10 des adresses IP qui sont concernés par le + de flows
* `-s ip/packets -n 10` : top 10 des adresses IP qui sont concernés par le + de paquets
* `-s ip/bytes -n 10` : top 10 des adresses IP qui sont concernés par le + d'octets
> *Note* : on peut remplacer `ip` par srcip,dstip,port,srcport,dstport…
Filtres _tcpdump_ que l'on peut ajouter pour limiter les flows listés/triés :
* `'proto tcp'` : limite au protocole TCP
* `'[src|dst] host <IP>'` : limite à une adresse IP
* `'[src|dst] net <net>'` : limite à un sous-réseau
* `'[src|dst] port <port>'` : limite à un port
> *Note* : ces filtres se combinent avec AND, OR et des parenthèses pour les priorités
Quelques exemples utiles :
~~~
## Lister tous les flows
# nfdump -M /var/cache/nfdump -R .
## Lister tous les flows issus de plusieurs répertoires
# nfdump -M /srv/nfdump/routeur1:routeur2:routeur3 -R .
## Lister les flows d'une date à une autre
# nfdump -M /var/cache/nfdump -R 2017/02/21/nfcapd.201702211030:2017/03/10/nfcapd.201703101030
## Sur OpenBSD il semble qu'on ne puisse pas utiliser l'option -M dans cette commande
# nfdump -R /var/cache/nfdump/2017/02/21/nfcapd.201702211030:2017/03/10/nfcapd.201703101030
## Lister les flows concernant l'UDP et l'IP 8.8.8.8 avec agrégation bi-directionnel
# nfdump -M /var/cache/nfdump -R . 'proto udp and host 8.8.8.8' -b
## Lister les flows en agrégeant par proto,srcip,dstip,dstport :
# nfdump -M /var/cache/nfdump -R . -A proto,srcip,dstip,dstport
## top 10 des ports utilisés entre deux machines en fonction du nombre
## de flows
# nfdump -M /var/cache/nfdump -R . 'host 192.0.2.1 and host 192.0.2.2' -s port -n 10
## Sur OpenBSD il semble que l'ordre des arguments soit important
# nfdump -M /var/cache/nfdump -R . -s port -n 10 'host 192.0.2.1 and host 192.0.2.2'
## top 10 des IPs source avec le plus de trafic
# nfdump -M /var/cache/nfdump -R . -s srcip/bytes -n 10
## top 10 des IPs ayant générés le plus de flow vers TCP/80 d'une machine
# nfdump -M /var/cache/nfdump -R . 'proto tcp and dst host 192.0.2.1 and dst port 80' -s srcip/flows
~~~
## NfSen
**NfSen** est un outil pour gérer les _Netflow_ via une interface web, il permet notamment :
* de lancer plusieurs **nfcapd** pour collecter les _Netflow_ de plusieurs routeurs
* de lancer la commande _nfdump_ avec des options de manière « graphique »
* d'avoir des graphes par flows/paquets/octets par seconde avec des filtres tcpdump
* de créer des alertes en fonction de seuils / filtres tcpdump
### Installation NfSen
On installe NfSen **et** nfdump à partir des sources :
~~~
# perl -MCPAN -e 'install Socket6'
$ wget https://sourceforge.net/projects/nfdump/files/stable/nfdump-1.6.13/nfdump-1.6.13.tar.gz/download
$ tar zxvf nfdump-1.6.13.tar.gz
$ cd nfdump-1.6.13
$ ./configure --enable-nfprofile --enable-nftrack
$ make
# make install
$ wget https://sourceforge.net/projects/nfsen/files/stable/nfsen-1.3.8/nfsen-1.3.8.tar.gz/download
$ tar zxvf nfsen-1.3.8.tar.gz
$ cd ./nfsen-1.3.8
# cp etc/nfsen-dist.conf /etc/nfsen.conf
# vim /etc/nfsen.conf
# mkdir -p /opt/nfsen/data/nfsen
# mkdir -p /opt/nfsen/www
# adduser nfsen
# adduser nfsen www-data
# chown -R nfsen:www-data /opt/nfsen
# ./install.pl /etc/nfsen.conf
# cd /opt/nfsen/data/nfsen/bin/
#./nfsen start
~~~