Grapher l’activité de PF grâce à pfstatClassé dans : Scripting, Sysadmin
Aujourd’hui, point de bidouille, point de manipulations absconses, mais plutôt de jolis graphiques où l’on voit avec tendresse s’ébattre notre pare-feu OpenBSD PF.
Comment celà peut-il être dans le domaine du possible ? Tout simplement grâce à l’outil pfstat, écrit par le créateur de PF lui-même.
Afin de ne pas vous perdre en cours de lecture pour cause de démotivation devant les sigles cryptiques et autres incantations shellmaniques qui parsèment comme à l’accoutumée mes billets techniques, voici un aperçu de ce que nous allons obtenir:
Passons donc maintenant dans le vif du sujet. Nous allons créer les graphiques montrants les octets que PF à laissé passer sur l’interface sis0, ainsi que les packets passés et bloqués sur cette même interface sur une période de 24 heures.
Tout d’abord il faut installer pfstat:
# pkg_add -r pfstat
Puis on créé un fichier de configuration adéquat /usr/local/etc/pfstat.conf contenant ceci:
|
#On indique l’interface réseau, l’état, l’unité de mesure, le sens, le protocole, et si les données sont différentielles pour chaque valeur. collect 1 = interface “sis0″ pass bytes in ipv4 diff #On indique le chemin complet de l’image générée par pfstat, et qui sera affichée par notre serveur web #On donne la période affichée et la taille de l’image générée en pixels #On dit ce qu’on affiche comme données dans notre image #L’axe Y du graphique “1″ (voir “collect 1″ plus haut) se trouvera à gauche, les données sont de type bps, puis viennent les options pour la légende (nom du graphe, unité de mesure et couleur) #Les même graphiques que précédemment, mais en générant une image plus petite. Seuls les noms de l’image générée, et la taille de l’image en pixels change. De même on peut créer les graphiques pour la semaine, le mois et l’année passée en modifiant l’option “from” #On procède de la même manière avec les paquets, mais on y ajoute les paquets bloqués (ce qui n’avait pas sens dans les premiers graphiques qui eux affichent des octets) |
Bien sûr, il y a beaucoup d’autres possibilités, comme grapher les files d’attentes, les états. La page pfstat de l’auteur en montre un bon panel.
Mais revenons à nos affaires. Il nous faut maintenant créer le répertoire ou seront hebergées la page web d’affichage de nos graphiques ainsi que les images:
# mkdir -p /usr/local/www/data/pfstat/images
Puis on vérifie que ça fonctionne:
# pfstat -q -p
Cette commande demande à pfstat de compiler les statistiques de pf(4) pour l’instant t et de créer les graphiques correspondant à l’emplacement renseigné dans notre fichier de configuration. On peut vérifier le bon fonctionnement par la présence d’un fichier /var/db/pfstat.db ainsi que celle des graphiques.
# ls -l /var/db/pfstat.db
-rw——- 1 root wheel 8192 Feb 6 08:41 /var/db/pfstat.db
# ls -l /usr/local/www/data/pfstat/images/
total 846
-rw-r–r– 1 root wheel 24063 Feb 6 08:41 pfstat-bandwidth-day-small.png
-rw-r–r– 1 root wheel 64065 Feb 6 08:41 pfstat-bandwidth-day.png
-rw-r–r– 1 root wheel 27066 Feb 6 08:41 pfstat-packets-day-small.png
-rw-r–r– 1 root wheel 66568 Feb 6 08:41 pfstat-packets-day.png
Maintenant que ça fonctionne, on automatise la récolte des statistiques de pf(4) grâce à une simple tâche cron(8). Ajoutons ceci dans /etc/crontab:
* * * * * root /usr/local/bin/pfstat -q -p -t 31:365
L’option -t, permet à pfstat de compresser les donnés vieilles de plus d’un mois et d’effacer celles de plus d’un an. Ainsi notre base /var/db/pfstat.db ne devrait pas grossir exagérément.
Il ne reste plus qu’à afficher tous ces jolis graphiques sur une page html (ou autre).
Par exemple:
Configuration Apache 2.2
Créer un fichier /usr/local/etc/apache22/Includes/pfstat.conf contenant
| Alias /pfstat /usr/local/www/data/pfstat DocumentRoot “/usr/local/www/data/pfstat” <Directory “/usr/local/www/data/pfstat”> DirectoryIndex index.html Order deny,allow Allow from all Satisfy Any </Directory> |
Créer un fichier /usr/local/www/data/pfstat/index.html contenant
| <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”> <html> <head> <meta http-equiv=”Content-Type” content=”text/html; charset=US-ASCII”> </head> <body text=”#000000″ bgcolor=”#FFFFFF” link=”#1919C0″ vlink=”#101030″ alink=”#FE0000″> <h1>PF Firewall Statistics for sis0 interface</h1> <h2>interface sis0 pass bytes ipv4, Bytes/s</h2> <h2>interface sis0 pass/block packets ipv4, Packets/s</h2> </body> </html> |
N’oublions pas de recharger la configuration d’apache:
# /usr/local/etc/rc.d/apache22 reload
Vous pouvez bien sûr vous inspirer ma de propre page pfstat pour compléter le tout.
A bientôt chers (et de plus en plus nombreux) lecteurs
Tags : OpenBSD PF, pfstat
- Permalien
- laurent
- 11 Feb 2009 2:57 PM
- Commentaires (2)

10 June 2009 à 12:49 am
Merci beaucoup, excellent ce tuto rapide ! Juste une correction sur le cron, vu que j’ai mis mon fichier de conf dans /etc, j’ai du aussi ajouter -c /etc/pfstat.conf
Voila
Bonne continuation
10 June 2009 à 10:09 am
[...] Un petit tutoriel proposé par Laurent Cligny sur son site pour apprendre à PF à faire des graphiques, et voir, comme il le dit si bien “[...]avec tendresse s’ébattre notre pare-feu OpenBSD PF.[...]“. [...]