Ik ga ervan uit dat je geinstalleerd & werkende hebt :
- een of andere versie van linux
- iptables
- perl
- rrdtool (www.rrdtool.org)
- Verstand van CRON/perl/kortom gezond verstand
maak de volgende entry aan in een scriptje dat start bij het opstarten (rc.local bv)
iptables -I FORWARD 1 -i eth1 -s 192.168.0.x
iptables -I FORWARD 1 -i eth0 -d 192.168.0.x
De eerste is de rule voor al het uitgaand verkeer op dat IP, de tweede uiteraard voor inkomend verkeer.
Herhaal dit voor alle ip's die je wilt bijhouden.
Onderaan deze post zet ik een bestandje dat je om de x aantal minuten in de CRON daemon moet aanroepen.
Dit bestandje zul je execute rechten moeten geven (chmod).
Uiteraard even doorlopen op paden (path) die fout staan..
Bij mij staat alles in de /etc/rc.d
PS Het scriptje refereert ook nog naar /etc/rc.d/ips.txt
dit is gewoon een bestandje met op elke regel een ip-adres.
Dat zijn uiteindelijk de ip's die die monitor & opslaat.
Voor vragen opmerkingen hier reageren of email naar got@wps.tmfweb.nl
-----------------------------------------------------------
#!/usr/bin/perl
sub get_ip_counters {
local(@ip) = @_;
my (@rules, @in_bytes, @in_pkts, @out_pkts, @out_bytes, $upTime);
$_=`/sbin/iptables -L FORWARD -nvx | grep -w "@ip" | grep eth0`;
@rules = split;
@in_bytes = split(' ',$rules[1]);
@in_pkts = split(' ', $rules[0]);
$_=`/sbin/iptables -L FORWARD -nvx | grep -w "@ip" | grep eth1`;
@rules = split;
@out_bytes = split(' ',$rules[1]);
@out_pkts = split(' ', $rules[0]);
# uptime of the machine
open(UPTIME,"uptime |cut -b 13-26|");
$upTime=<UPTIME>;
close(UPTIME);
chop $upTime;
if (!$in_bytes[0]) { $in_bytes[0] = 0; }
if (!$out_bytes[0]) { $out_bytes[0] = 0; }
return ($in_bytes[0],$out_bytes[0]);
}
open (FILE,"/etc/rc.d/ips.txt");
@file = <FILE>;
close FILE;
foreach (@file) {
@ipadres = $_;
@ipadres = split(' ',$ipadres[0]);
@resultaat = get_ip_counters(@ipadres);
if (-e "/etc/rc.d/@ipadres.rrd") {
system "/usr/local/rrdtool-1.0.33/bin/rrdtool update /etc/rc.d/@ipadres.rrd N:@resultaat[0]:@resultaat[1]";
}
else {
system "/usr/local/rrdtool-1.0.33/bin/rrdtool create /etc/rc.d/@ipadres.rrd -s 60 DS:input:ABSOLUTE:90:0:U DS:output:AB
system "/usr/local/rrdtool-1.0.33/bin/rrdtool update /etc/rc.d/@ipadres.rrd N:@resultaat[0]:@resultaat[1]";
}
}
system "/sbin/iptables -Z";
- een of andere versie van linux
- iptables
- perl
- rrdtool (www.rrdtool.org)
- Verstand van CRON/perl/kortom gezond verstand
maak de volgende entry aan in een scriptje dat start bij het opstarten (rc.local bv)
iptables -I FORWARD 1 -i eth1 -s 192.168.0.x
iptables -I FORWARD 1 -i eth0 -d 192.168.0.x
De eerste is de rule voor al het uitgaand verkeer op dat IP, de tweede uiteraard voor inkomend verkeer.
Herhaal dit voor alle ip's die je wilt bijhouden.
Onderaan deze post zet ik een bestandje dat je om de x aantal minuten in de CRON daemon moet aanroepen.
Dit bestandje zul je execute rechten moeten geven (chmod).
Uiteraard even doorlopen op paden (path) die fout staan..
Bij mij staat alles in de /etc/rc.d
PS Het scriptje refereert ook nog naar /etc/rc.d/ips.txt
dit is gewoon een bestandje met op elke regel een ip-adres.
Dat zijn uiteindelijk de ip's die die monitor & opslaat.
Voor vragen opmerkingen hier reageren of email naar got@wps.tmfweb.nl
-----------------------------------------------------------
#!/usr/bin/perl
sub get_ip_counters {
local(@ip) = @_;
my (@rules, @in_bytes, @in_pkts, @out_pkts, @out_bytes, $upTime);
$_=`/sbin/iptables -L FORWARD -nvx | grep -w "@ip" | grep eth0`;
@rules = split;
@in_bytes = split(' ',$rules[1]);
@in_pkts = split(' ', $rules[0]);
$_=`/sbin/iptables -L FORWARD -nvx | grep -w "@ip" | grep eth1`;
@rules = split;
@out_bytes = split(' ',$rules[1]);
@out_pkts = split(' ', $rules[0]);
# uptime of the machine
open(UPTIME,"uptime |cut -b 13-26|");
$upTime=<UPTIME>;
close(UPTIME);
chop $upTime;
if (!$in_bytes[0]) { $in_bytes[0] = 0; }
if (!$out_bytes[0]) { $out_bytes[0] = 0; }
return ($in_bytes[0],$out_bytes[0]);
}
open (FILE,"/etc/rc.d/ips.txt");
@file = <FILE>;
close FILE;
foreach (@file) {
@ipadres = $_;
@ipadres = split(' ',$ipadres[0]);
@resultaat = get_ip_counters(@ipadres);
if (-e "/etc/rc.d/@ipadres.rrd") {
system "/usr/local/rrdtool-1.0.33/bin/rrdtool update /etc/rc.d/@ipadres.rrd N:@resultaat[0]:@resultaat[1]";
}
else {
system "/usr/local/rrdtool-1.0.33/bin/rrdtool create /etc/rc.d/@ipadres.rrd -s 60 DS:input:ABSOLUTE:90:0:U DS:output:AB
system "/usr/local/rrdtool-1.0.33/bin/rrdtool update /etc/rc.d/@ipadres.rrd N:@resultaat[0]:@resultaat[1]";
}
}
system "/sbin/iptables -Z";