Pour les versions récentes
Le script principal est tiré de https://github.com/rbicelli/pfsense-zabbix-template
Installer le package sudo
Ajouter une règle sudo pour autoriser zabbix à exécuter certaines commandes
Dans system → sudo, activer l'inclusion des Custom Configuration
Puis, depuis la ligne de commande, créer le fichier /usr/local/etc/sudoers.d/zabbix avec le contenu suivant :
Defaults:zabbix !syslog zabbix ALL=(root) NOPASSWD: /usr/local/bin/php /root/zabbix/*
Installer les scripts additionnels
Ces scripts permettent de remonter des données sur les connexions VPN, les services, les descriptions des interfaces etc. Cette partie se fait en CLI
mkdir /root/zabbix cd /root/zabbix curl -o pfsense_zbx.php https://git.fws.fr/fws/pfsense-zabbix/raw/branch/master/pfsense_zbx.php
UserParameters à ajouter à l'agent Zabbix
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 UserParameter=pfsense.discovery[*],/usr/local/bin/sudo /usr/local/bin/php /root/zabbix/pfsense_zbx.php discovery $1 UserParameter=pfsense.value[*],/usr/local/bin/sudo /usr/local/bin/php /root/zabbix/pfsense_zbx.php $1 $2 $3
Pour les machines sans sudo
Si vous ne voulez pas, ou ne pouvez pas utiliser sudo, il est possible de faire tourner l'agent Zabbix en tant que root (ce n'est pas recommandé cependant) :
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 UserParameter=pfsense.discovery[*],/usr/local/bin/php /root/zabbix/pfsense_zbx.php discovery $1 UserParameter=pfsense.value[*],/usr/local/bin/php /root/zabbix/pfsense_zbx.php $1 $2 $3 AllowRoot=1
Pour les anciennes versions
Pour les anciennes version de PfSense (où il ne serait pas possible d'utiliser le script PHP), on peut utiliser simplement les UserParameters suivants
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 UserParameter=pfsense.discovery[*],if [ "$1" == "interfaces" ]; then ifconfig | awk ' BEGIN { printf "\[" } /^[a-z][a-z0-9]+((\.|_vlan)[0-9]+)?:/ { gsub(/\:/,"",$ 1); printf "{\"{#IFNAME}\":\"" $ 1"\",\"{#IFDESCR}\":\"" $ 1"\"}," } END { print "]" } ' | sed -e 's/,\]/]/'; fi
Ça permettra d'émuler au moins la découverte des interfaces réseaux