Eu já estou fazendo isso, e já faz algum tempo, usando munin e um plugin personalizado que eu mesmo escrevi, que fica dados de iptables
regras de auditoria. Ele está sendo executado em uma caixa C6, então você deve ser capaz de empilhá-lo no lugar se ninguém tiver idéias melhores. Não é o simples one-liner que você queria, mas está funcionando e produz dados como estes:
Opluginésimplesosuficiente,apenaspegadadosdedoisarquivossimplescriadosem/var/tmp
:
#!/bin/bash##(c)GatekeeperTechnologyLtd.,2013#MaybeusedunderthetermsofGPLv3or,atyourdiscretion,anylaterversionif["$1" = "config" ]; then
echo 'graph_title Network Throughput'
echo 'graph_category network'
echo 'graph_info This is the total throughput on the NIC since the beginning of the calendar month, or the last reboot, whichever was mo
st recent.'
echo 'graph_vlabel bytes'
echo 'graph_args --logarithmic'
echo 'in4.label in v4'
echo 'in4.colour ff0000'
echo 'out4.label out v4'
echo 'out4.colour 00ff00'
echo 'in6.label in v6'
echo 'in6.colour aa0088'
echo 'out6.label out v6'
echo 'out6.colour 00aa88'
echo 'total.label total'
echo 'total.colour 0000ff'
exit 0
fi
out='head -3 /var/tmp/audit.out.counts | tail -1 | awk '{print $2}''
echo "out4.value $out"
in='head -3 /var/tmp/audit.in.counts | tail -1 | awk '{print $2}''
echo "in4.value $in"
out6='head -3 /var/tmp/audit.out.v6.counts | tail -1 | awk '{print $2}''
echo "out6.value $out6"
in6='head -3 /var/tmp/audit.in.v6.counts | tail -1 | awk '{print $2}''
echo "in6.value $in6"
total=$(($in+$out+$in6+$out6))
echo "total.value $total"
A entrada do crontab que os torna assim:
# output the audit rule counts for munin purposes
* * * * * /sbin/iptables -L AUDIT-I -n -x -v > /var/tmp/audit.in.counts
* * * * * /sbin/iptables -L AUDIT-O -n -x -v > /var/tmp/audit.out.counts
* * * * * /sbin/ip6tables -L AUDIT-I -n -x -v > /var/tmp/audit.in.v6.counts
* * * * * /sbin/ip6tables -L AUDIT-O -n -x -v > /var/tmp/audit.out.v6.counts
# and zero the counts once a month
0 0 1 * * /sbin/iptables -Z AUDIT-I
0 0 1 * * /sbin/iptables -Z AUDIT-O
0 0 1 * * /sbin/ip6tables -Z AUDIT-I
0 0 1 * * /sbin/ip6tables -Z AUDIT-O
e as regras iptables
são feitas com as seguintes regras /etc/sysconfig/iptables
:
:AUDIT-I - [0:0]
:AUDIT-O - [0:0]
# audit input traffic
-A INPUT -i eth0 -j AUDIT-I
[ALL OTHER INPUT RULES APPEAR HERE, AFTER THE AUDIT RULE]
# audit outbound traffic
-A OUTPUT -o eth0 -j AUDIT-O
[ALL OTHER OUTPUT RULES APPEAR HERE, AFTER THE AUDIT RULE]
# AUDIT rules
-A AUDIT-I -p all
-A AUDIT-O -p all
O motivo crontab
está envolvido é parar o plug-in munin que precisa ser executado com privilégios de root; Se você não se importasse com isso, poderia fazer com que o plugin recebesse as contagens de pacotes diretamente, invocando iptables
em si.
As contagens não sobrevivem a uma reinicialização (daí a queda extra para zero no gráfico acima), mas se você tiver seu servidor configurado para salvar iptables
regras e contagens de pacotes em reinicie, isso não afetaria você.