Bien que pfSense soit une base FreeBSD il existe des particularités notables qu’il est possible de récupérer avec Zabbix. Nous avons d’abord la table d’états (State Table) qui nous renseigne sur le nombre de connexions ouvertes et le nombre maximal de connexions simultanées, il est intéressant de surveiller ces deux valeurs pour être alerté avant que le pfSense ne puisse plus accepter de nouvelles connexions (effet DDOS). Ensuite nous avons l’état du buffer mémoire utilisé par le réseau (MBUF), une unité mbuf
correspond à un emplacement mémoire que va utiliser le pfSense pour stocker un paquet réseau qui le traverse. Celui-ci nous informe sur le nombre de mbufs
maximal, utilisés, en cache, et total (utilisés+cache), si le nombre de mbufs
total atteint le maximum, le système va paniquer et redémarrer, il est donc impératif de monitorer ces valeurs.
Données systèmes (FreeBSD)
On récupère ici toutes les données relatives au système: processeur, mémoire, système de fichiers, interfaces réseaux, et autres données générales du système. Nous n’allons pas énumérer toutes les valeurs relatives à FreeBSD, nous utiliseront des éléments Zabbix généralistes qui sont quasiment identiques pour chaque système.
Il faut tout de même noter que nous avons étoffé le monitoring de la mémoire et redéfini la majorité des graphiques pour une meilleure visibilité.
Données spécifiques à pfSense
On doit maintenant récupérer les autres valeurs intéressantes du pfSense. Pour commencer par la State Table nous pouvons jeter un coup d’oeil à ces deux fichiers: /tmp/rules.limits
et /tmp/pfctl_si_out
, à l’intérieur desquels nous allons trouver respectivement:
- Max: le nombre maximal de connexions simultanées (« set limit states ») du fichier
rules.limits
- Current: le nombre de connexions ouvertes (« current entries ») du fichier
pfctl_si_out
Pour récupérer les valeurs MBUF il faut utiliser la commande netstat -m
, on peut lire à la ligne 2 dans la sortie de la commande (« mbuf clusters in use »), les valeurs:
- Current: nombre de
mbufs
utilisés - Cache: nombre de
mbufs
en cache - Total: somme des deux précédents
- Max: nombre de
mbufs
maximal que le pfSense peut utiliser
Maintenant que nous avons trouvé les données qui nous intéressent, il va falloir analyser ces différents blocs de texte pour en extraire chaque valeur à l’aide d’une commande bien placée.
Configuration Zabbix (Agent-Serveur-Template)
Le template Zabbix à importer se trouve sur nos dépôts publiques: Template pfSense
Une fois l’hôte créé sur le serveur Zabbix et lié au template, il faut ensuite configurer l’agent Zabbix en définissant des User Parameters dans la configuration avancée sur pfSense:
UserParameter=pfsense.states.max,grep "limit states" /tmp/rules.limits | cut -f4 -d ' ' UserParameter=pfsense.states.current,grep "current entries" /tmp/pfctl_si_out | tr -s ' ' | cut -f4 -d ' ' UserParameter=pfsense.mbuf.current,netstat -m | grep "mbuf clusters" | cut -f1 -d ' ' | cut -d '/' -f1 UserParameter=pfsense.mbuf.cache,netstat -m | grep "mbuf clusters" | cut -f1 -d ' ' | cut -d '/' -f2 UserParameter=pfsense.mbuf.max,netstat -m | grep "mbuf clusters" | cut -f1 -d ' ' | cut -d '/' -f4
Dans la configuration de l’Agent Zabbix (sur pfSense) il faudra certainement augmenter la valeur de timeout (réglée sur 3 secondes par défaut). En cas de soucis pour remonter les données sur le serveur Zabbix, on peut d’abord vérifier et augmenter le timeout qui est souvent la source de problème quand on utilise des commandes particulières dans les User Parameter Zabbix.
Conclusion
Et voilà, les premières mesures devrait commencer à arriver sur le serveur Zabbix ! Il ne reste plus qu’à attendre que les interfaces réseaux soient découvertes (LDD), puis on pourra créer les screens qui nous intéresse.