HLab

Julien Hautefeuille

Analyse de trafic : Nfdump, Nfsen, Netflow, fprobe et OpenBSD

Dans un article précédent, j’ai mis en place un pont filtrant en vue de protéger une partie du réseau local d’autres machines du réseau local.

Ce pont filtrant va également me servir de collecteur de données réseau en vue d’une analyse de trafic.

Cet article va s’appuyer sur le protocole réseau Netflow et sur les outils suivants :

  • Nfsen pour la visualisation des données,
  • Nfdump pour la collecte des données,
  • Pflow, sonde OpenBSD,
  • fprobe, sonde pour Ubuntu et pour RaspberryPI.

Prérequis d’installation

Nfsen utilise un serveur web pour générer les données. J’utilise la version Apache par défaut fournie avec OpenBSD. J’utilise la version non chrootée et en SSL/TLS.

Le fichier /etc/rc.conf.local :

pf=YES
sendmail_flags=NO
smtpd_flags=""
httpd_flags="-u -DSSL"

Installation de Nfdump et Nfsen

Nfdump et Nfsen sont disponibles pour OpenBSD, soit sous forme de paquets binaires soit dans l’arbre des ports. L’installation est aisée et sans surprise.

pkg_add nfsen
pkg_add nfdump

Pour Nfsen il vous sera demandé d’exécuter un script Perl d’installation :

install-nfsen.pl /etc/nfsen.conf

On crée également la configuration pour le démarrage au boot :

if [ -x /usr/local/bin/nfsen ]; then
    echo -n ' nfsen enable'; /usr/local/bin/nfsen start
fi

Configuration de Nfsen et collecte de données

J’ai modifié les lignes suivantes dans le fichier /etc/nfsen.conf :

$MAIL_FROM   = 'nzo@hotmail.org';
$SMTP_SERVER = 'localhost';
%sources = (
 'raspberry' => { 'port' => '2055', 'col' => '#00ff00' },
 'openbsd' => { 'port' => '9995', 'col' => '#0000ff' },
 'ubuntu' => { 'port' => '9996', 'col' => '#ff0000' },
);

Je monitore donc le pont filtrant lui-même (openbsd), une raspberry et une station Ubuntu. Cette configuration correspond à celle de la collecte de données.

Configuration des sondes

Pour Ubuntu et Raspberry, j’utilise fprobe. L’installation se fait rapidement par un simple apt-get.

apt-get install fprobe

Le script d’installation lance un script de configuration. On configure l’interface de collecte, et la destination du collecteur (ici l’adresse ip du pont filtrant Openbsd).

Pour OpenBSD, on utilise le mécanisme Pflow inclus dans OpenBSD qui gère le protocole Netflow. Pflow et paquet filter sont fortement liés. On doit en premier lieu créer l’interface pflow :

Créer le fichier /etc/hostname.pflow0 :

flowsrc 127.0.0.1 flowdst 127.0.0.1:9995 pflowproto 5

On utilise l’outil Pflow directement dans la configuration du firewall comme ceci :

set state-defaults pflow
pass in on $wan_if inet proto icmp label client-icmp keep state (pflow)

Ce qui provoque la génération de données de trafic est la directive keep state (pflow). Le fait de mettre la directive state-defaults place tous les keep state sur pflow.

Pour effectuer un contrôle des règles PF :

pfctl -sr

Remarques

Je n’ai pas réussi à prendre en compte les données sur un routeur DD-WRT avec le firmware DD-WRT v24-sp2 malgré le fait que l’on puisse accéder à la configuration.