Des statistiques sous forme de graphe pour le firewall PF (packet filter) Auteur : aflab@free.fr Site : http://aflab.free.fr Il existe un magnifique petit programme qui permet de mettre sous forme de graphe des statistiques tirées de notre merveilleux firewall packet filter (pf pour les intimes) Ce petit programme ce nomme : pfstat il est présent dans le ports tree d'OpenBSD et de FreeBSD. Pour OpenBSD : # cd /usr/ports/net/pfstat pour FreeBSD : # cd /usr/ports/sysutils/pfstat et ensuite on l'installe : # make install clean sous FreeBSD par défault pfstat est installé dans /usr/local/bin Si vous tapez : # /usr/local/bin/pfstat -q Vous allez voir des nombres s'afficher ce sont les statistiques de pf. Pour générer les graphes nous avons besoin de stocker ces valeurs à des intervalles réguliers. Pour ce faire une petite ligne dans crontab va suffir. # crontab -e ------------------------------------- SNiP ------------------------------------ */5 * * * * /usr/local/bin/pfstat -q >> /var/log/pfstat.log ------------------------------------- SNiP ------------------------------------ Faites un tail -f sur /var/log/pfstat.log et vous verrez qu'une nouvelle ligne est ajoutée à ce fichier toutes les 5 minutes. Bon c'est bien beau mais on a toujours pas de graphes... Pour créer des graphes il faut d'abord créer un fichier de configuration que l'on appellera pfstat.conf par exemple et ensuite spécifier chaque graphe que nous voulons : pfstat est capable de grapher les choses suivantes : bytes_v4_in bytes_v4_out bytes_v6_in bytes_v6_out packets_v4_in_pass packets_v4_in_drop packets_v4_out_pass packets_v4_out_drop packets_v6_in_pass packets_v6_in_drop packets_v6_out_pass packets_v6_out_drop states_entries states_searches states_inserts states_removals counters_match counters_badoffset counters_fragment counters_short counters_normalize counters_memory Voila un petit exemple : # vi /usr/local/etc/pfstat.conf ------------------------------------- SNiP ------------------------------------ image "/var/www/pf/traffic_6h.jpg" { from 6 hours to now width 960 height 300 left graph bytes_v4_in label "inconming" color 0 255 0 filled, graph bytes_v4_out label "outgoing" color 0 0 255 } ------------------------------------- SNiP ------------------------------------ Ce qui permet de faire un graphe entrant et sortant sur une période de 6 heures. Pour tous les détails de la configuration de pfstat je vous laisse consulter la man page très bien expliquée # man pfstat Voila maintenant pour générer vos graphes toutes les 5 minutes et bien une ligne dans contrab va nous aider # crontab -e ------------------------------------- SNiP ------------------------------------ */5 * * * * /usr/local/bin/pfstat -c /usr/local/etc/pfstat.conf -d /var/log/pfstat.log ------------------------------------- SNiP ------------------------------------ Et pour terminer voila un exemple de configuration : ------------------------------------- SNiP ------------------------------------ image "/var/www/pf/traffic_month.jpg" { from 1 months to now width 960 height 300 left graph bytes_v4_in label "inconming" color 255 255 0 filled, graph bytes_v4_out label "outgoing" color 255 0 0 filled } image "/var/www/pf/traffic_week.jpg" { from 1 weeks to now width 960 height 300 left graph bytes_v4_in label "inconming" color 255 255 0 filled, graph bytes_v4_out label "outgoing" color 255 0 0 filled } image "/var/www/pf/traffic_day.jpg" { from 1 days to now width 960 height 300 left graph bytes_v4_in label "inconming" color 255 255 0 filled, graph bytes_v4_out label "outgoing" color 255 0 0 filled } image "/var/www/pf/traffic_12h.jpg" { from 12 hours to now width 960 height 300 left graph bytes_v4_in label "inconming" color 255 255 0 filled, graph bytes_v4_out label "outgoing" color 255 0 0 filled } image "/var/www/pf/traffic_6h.jpg" { from 6 hours to now width 960 height 300 left graph bytes_v4_in label "inconming" color 255 255 0 filled, graph bytes_v4_out label "outgoing" color 255 0 0 filled }image "/var/www/pf/firewall_6h.jpg" { from 6 hours to now width 960 height 300 left graph packets_v4_in_pass label "pass in" color 255 255 0 filled, graph packets_v4_in_drop label "block in" color 255 0 0 filled right graph packets_v4_out_pass label "pass out" color 206 38 255, graph packets_v4_out_drop label "block out" color 206 179 255 } ------------------------------------- SNiP ------------------------------------ Voila voila si vous avez la moindre question n'hésitez pas.