Inhaltsverzeichnis

Statistik von einzelnen iptables-Regeln anzeigen

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.

Voraussetzung

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

Mit SUID

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!

Mit sudo

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)

UserParameter für zabbix-agent

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}'

Zabbix Item

Ü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]