In iptables kann man mit einem recht einfachen UserParameter
die Paketstatistiken einzelner Regeln abfragen
iptables -L INPUT 3 -nvx | awk '{print $1}'
ergibt die Anzahl Pakete welche von Regel 3 der INPUT Chain getroffen wurden und
iptables -L INPUT 3 -nvx | awk '{print $2}'
die Summe der Grössen dieser Pakete in Bytes.
Um das Ganze jetzt von Zabbix verarbeiten zu lassen, muss der zabbix
User das iptables
Kommando ausführen dürfen. Normalerweise kann das nur root
chgrp zabbix /sbin/iptables chmod o-rwx /sbin/iptables chmod +s /sbin/iptables
hat aber wie immer bei suid
den Nachteil, dass der User dann das komplette Kommando nutzen darf. Also auch Regeln ändern/löschen oder die Firewall deaktivieren!
Hat den Vorteil, dass man das Kommando bzw seine Parameter noch weiter einschränken kann
#/etc/sudoers zabbix ALL=NOPASSWD: /sbin/iptables -L *
und schon darf der Zabbix User ohne Passwort nur Regeln auflisten/anzeigen.
Will man es noch feiner einschränken dann kann man in /etc/sudoers
auch die Shell-glob-Pattern verwenden z.B. so
Cmnd_Alias ZABBIX = /sbin/iptables -L INPUT [1-9] -nvx, /sbin/iptables -L OUTPUT [1-9] -nvx, /sbin/iptables -L FORWARD [1-9] -nvx, /sbin/iptables -L INPUT [1-9][0-9] -nvx, /sbin/iptables -L OUTPUT [1-9][0-9] -nvx, /sbin/iptables -L FORWARD [1-9][0-9] -nvx zabbix ALL=NOPASSWD: ZABBIX
mit dem Cmnd_Alias
kann man das Ganze etwas wiederverwertbarer gestalten In diesem Beispiel darf der Zabbix User also INPUT, FORWARD und OUTPUT anzeigen und daraus jeweils die Regeln 1-99 (das sollte für die meisten home-iptables reichen)
Der UserParameter
für Zabbix kann dann so ausschauen
UserParameter=ipt.pkt.stat[*],sudo /sbin/iptables -L $1 $2 -nvx|awk '{print $$1}' UserParameter=ipt.traffic.stat[*],sudo /sbin/iptables -L $1 $2 -nvx | awk '{print $$2}'
Über den ersten und den zweiten Parameter an das Item
kann man festlegen welche Chain und welche Regel (Nummer) angezeigt werden soll z.B.
ipt.pkt.stat[FORWARD,24] ipt.traffic.stat[OUTPUT,7]