Faire des graphes à partir des infos de pf

pfstat

Comme je l'ai dit dans mon article sur le wifi et l'alix, dans le bouquin sur pf que j'ai, un certain nombre d'outils est évoqué dont pfstat. Ça avait l'air marrant à faire surtout avec mes contraintes donc je me suis lancé.

Quelles contraintes ?

Sur mon alix, le seul moyen de stockage que j'ai, c'est la carte CompactFlash. Or ces cartes CF sont connues pour ne pas supporter trop d'écriture. Il existe des possibilités pour utiliser la carte en read only mais j'ai la flemme de m'en occuper et puis ce problème n'en est qu'un parmi d'autres. De plus pfstat génère des images dont le but est quand même d'y accéder depuis le web et sachant que j'ai déjà nginx sur mon serveur, autant s'en occuper sur mon serveur.

pfstat et pfstatd, copains comme cochons

(Je tire cette utilisation de cet article. Je trouve ça marrant de mettre des expressions comme celle-ci dans un article technique.)

Le but est de récupérer les données de pf de l'alix sur le serveur. C'est là qu'intervient pfstatd. On lit la description dans la man page.

 The pfstatd daemon queries statistics from the packet filter device pf(4)
 and returns them in text form to network clients (like pfstat) connecting
 through TCP.

On installe donc pfstatd sur l'alix. On ajoute dans /etc/rc.conf.local

pfstatd_flags="-a 10.19.18.1"

Ensuite on lance le daemon avec /etc/rc.d/pfstatd start

On peut tester avec un telnet 10.19.18.1 9999, normalement ça donne plein de lignes.

Il faut bien dire à pf, quelle interface il faut logguer, donc dans /etc/pf.conf il faut quelque chose du genre

set loginterface pppoe0

Ensuite, sur le serveur, on install pfstat.

Dans /etc/pfstat.conf on met ce qu'on souhaite comme courbes. Un exemple est disponible sur le site de l'auteur et je vous mets celui que j'utilise actuellement.

Ensuite on utilise les commandes :

pfstat -q -d /var/db/pfstat.db -r 10.19.18.1
pfstat -p -d /var/db/pfstat.db

La première sert à créer pfstat.db en prenant les infos de l'alix. La deuxième sert à créer les courbes à partir de la DB. Si tout se passe bien, on crontab tout ça.

*       *       *       *       *       /usr/local/bin/pfstat -q -d /var/db/pfstat.db -r 10.19.18.1
*/5     *       *       *       *       /usr/local/bin/pfstat -p -d /var/db/pfstat.db
25      3       *       *       *       /usr/local/bin/pfstat -t 30 -d /var/db/pfstat.db

Vu que la DB grandit indéfiniment, ce n'est pas bon. On rajoute donc la dernière ligne pour qu'elle supprime les données de plus de 30 jours.

Et pour le web

On crée un sous domaine, par exemple, pfstat.tondomaine.tld. Ensuite on rajoute dans nginx.conf les vhosts et on reload. Enfin, on crée une page index.html qui affiche les images.

On obtient ça. Je vais peut-être changer les courbes que j'affiche.

Voilà, je vais pouvoir faire comme Octave interdire github et regarder les mails sortants^W^W^W^W^W^W^W et tweeter des courbes de traffic.

By Vigdis in
Tags : #OpenBSD, #pf, #pfstat,
g+ linkedin email