IP-Accounting

Um den Traffic, der ueber eine pf-Firewall geht, zu loggen (fuer Berechnungszwecke o.ae.) kann man mit den Bordmitteln von pf und ein wenig Perl schnell zum Ziel gelangen.

Folgendes ist in 'ppp.linkup' (oder bei Systemen die nicht ueber Dialup connected sind in die 'rc.local') zu schreiben:

	date >> /etc/Online
	pfctl -F info
	pfctl -l tun0

Folgendes ist in 'ppp.linkdown' (bzw. 'rc.shutdown') zu schreiben:

	pfctl -s info |grep Byte | grep IPv4 >> /etc/Online
	date >> /etc/Online
Damit habe ich nun im File 'Online' den Traffic (und ausserdem noch einen Zeitbezug!). Und nun zur Auswertung. Hierfuer habe ich, wie sollte es anders sein, ein kleines Perlprogramm geschrieben.


--- --- ---

#!/usr/bin/perl
### Auswerten des pfctl-Byte-Counter

use warnings;

system("grep Byte /etc/Online > Counter");

open(F, "Counter");
@all = <F>;
close(F);
foreach(@all){
  /^.+\s+(\d+)\s+.+\s+(\d+)\s+$/;
  $y = $1 + $2;
  $z += $y; 
}
$x = $z / 1024 / 1024;
print "Summe: $z Byte ($x MByte)\n";

--- --- ---


Ab OpenBSD 3.2 hat sich der Output von pfctl -s info sehr geaendert und damit ist das oben genannte Vorgehen nur noch modifiziert nutzbar ... man muesste 'set loginterface IF' setzen und obige Commandline in etwas so anpassen: pfctl -s info | grep Bytes | awk '{print $3}'.


Alternativ besteht die Moeglichkeit ueber 'netstat' zu gehen und diesen neuen Perlhack zu probieren.

Folgendes ist in 'rc.shutdown' zu schreiben:

	netstat -bin | grep tun0 | head -1 > /etc/online

--
I.S.