Пробую скинуть сюда, с некоторыми пояснениями:
Сперва надо прописать правила для ipchains:
ipchains -P input ACCEPT
ipchains -P forward DENY
ipchains -P output ACCEPT
ipchains -N traffic
ipchains -A input -j traffic
ipchains -A output -j traffic
ipchains -A forward -s 192.168.0.0/24 -i eth0 -j MASQ ----> выпускаем все из подсетки 192.168.0.0/24
ipchains -A traffic -s 192.168.0.0/24 -d 192.168.0.0/24 -j ACCEPT ----> отсекаем внутренний трафик
ipchains -A traffic -s x.x.x.x/x -d 192.168.0.0/24 -j ACCEPT ----> отсекаем внешний трафик нашей внешней сети
ipchains -A traffic -s 192.168.0.0/24 -d x.x.x.x/x -j ACCEPT ----> и в обратную сторону
ipchains -A traffic -d 192.168.0.20 -j ACCEPT -l ----> а это правило для общета конкретной машины, флаг "-l" указывает на то что все проходящие пакеты буду протоколироваться ядром
А вот собственно сам скрипт, который собирает данные и запихивает в MySQL(!!!! только входящий трафик !!!!):
#!/usr/bin/perl
use DBI();
$ipstuff = `/sbin/ipchains -L traffic -v -x -n`;
my $dbh = DBI->connect("DBI:mysql:database=xxx;host=localhost","user", "passwd",{'RaiseError' => 1});
($min, $hours, $day, $month, $year) = (localtime)[1,2,3,4,5];
$day=sprintf("d",$day);
$month=sprintf("d",$month+1);
$year=$year+1900;
@IPMASS = split(/\n/, $ipstuff);
foreach $ipdata (@IPMASS) {
$ipdata =~ s/\t/ /g;
$ipdata =~ s/\s(\s*|.)\s/ /g;
$ipdata =~ s/^ //g;
$ipdata =~ s/\n//g;
if ($ipdata eq "") { next; }
$bytes = 0;
$ip = "";
if ($ipdata =~ /^\d* (\d*) .* (\d*\.\d*\.\d*\.\d*) \d*\.\d*\.\d*\.\d*\/\d*/ ) {
$ip = $2;
$bytes = $1;
} elsif ($ipdata =~ /^\d* (\d*) .* \d*\.\d*\.\d*\.\d*\/\d* (\d*\.\d*\.\d*\.\d*) /) {
$ip = $2;
$bytes = $1;
} elsif ($ipdata =~ /^\d* (\d*) .* 0\.0\.0\.0\/0 0\.0\.0\.0\/0/) {
$ip = "all";
$bytes = $1;
}
if ($ip =~ /(.*)\.(.*)\.(.*)/ || $ip eq "all") {
$ip =~ s/\n//g;
$bytes =~ s/\n//g;
if($bytes eq 0) {
next;
}
else {
$dbh->do("INSERT INTO ipchains_stat(ip, bytes, rec_date, rec_time) VAL
}
}
}
$dbh->disconnect();
system("/sbin/ipchains -Z");
Все.
Так общитываю трафик для одной конторы, данные с ИП немного рознятся (конечно в его пользу), ну да бог ему судья. Да lavr ?