LINUX.ORG.RU
ФорумAdmin

как сгенерировать report в netflow


0

0

подскажите, как сгенерировать человеческий репорт?

Нужно, чтобы выдавалось:
1) Общее количество входящего трафика извне, т.е. приходящего не из 192.168.0.0/16 в байтах
2) Общее количество исходящего трафика, т.е. идущего не в 192.168.0.0/16 в байтах
3) по каждому внутреннему IP, т. е. принадлежащему 192.168.0.0/16 статистику на вход и на выход в байтах

Уже голова болит от манов, не пойму как это сделать...
если можно соответствующий конфиг, и как его запускать

Спасибо

anonymous

если ты имеешь ввиду flow-tools для работы с netflow, то вот как я
считаю детализацию поконкретному IP. скрипт править лениво, но общий
смысл генерирования acl, думаю, понятен.

#!/bin/sh
## CURRENT v.2.2 16.02.2005;

if [ $# -lt 4 ]; then
  echo "Usage: `basename $0` IP Year Month \"Space seperated list of days\" Filename" >&2
  exit 1
fi

IP=$1
YEAR=$2
MONTH=$3
DAYS=$4
FILENAME=$5

:> det.acl;

echo "ip access-list standard internal deny   10.0.0.0    0.255.255.255"   >> det.acl; #10/8
echo "ip access-list standard internal deny   172.16.0.0  0.15.255.255"    >> det.acl; #172.16/12
echo "ip access-list standard internal deny   192.168.0.0 0.0.255.255"     >> det.acl; #192.168/16
echo "ip access-list standard internal deny   212.X.Y.0  0.0.0.255"       >> det.acl; #our servers
echo "ip access-list standard internal deny   212.X.Z.0  0.0.0.255"       >> det.acl; #our servers
echo "ip access-list standard internal permit 0.0.0.0     255.255.255.255" >> det.acl;
echo "ip access-list standard filter   permit host        $IP"             >> det.acl;

:> $FILENAME.csv;

for day in ${DAYS}
{
    list="/home/netflow/new/ft-v05.${YEAR}-${MONTH}-${day}*";
    echo "${list}";
    flow-cat -p /home/netflow/new/ft-v05.${YEAR}-${MONTH}-${day}* | \
        flow-filter -f det.acl -Sinternal -Dfilter | \
        flow-print -f5 | \
        awk '{ print $4";"$5";"$7";"$8";"$11";"$12&
quot;;"$9";"$1";"$2}' >> $FILENAME.csv;
}

#Start             End               Sif   SrcIPaddress    SrcP  DIf   DstIPaddress    DstP    P  Fl  Pkts       Octets
#0201.18:00:00.409 0201.18:00:00.409 1     10.130.10.195   4913  12    10.130.174.229  445     6  2   1          48
#$1                $2                $3    $4              $5    $6    $7              $8      $9 $10 $11        $12

boatman
()
Ответ на: комментарий от boatman

немного его модифицировав для своих нужд ты получишь то, что тебе нужно

boatman
()
Ответ на: комментарий от anonymous

насколько я понимаю - надо ссумировать netflow поток? простое решение можно предложить - используя утилиты flow-tools http://freshmeat.net/projects/flow-tools/ + perl(awk/php/ и пр.) написать пару скриптов.

я бы валил нетфлоу в промежуточную базу, потом ссумировал, мало ли что...

fortl
()
Ответ на: комментарий от fortl

netflow пишется в файлы, которые меняются каждые 5/15 минут. посмотри на размер файлов - в КАКУЮ базу их писать, и ЗАЧЕМ? они и так уже в своем формате. распаковываются как указано выше.

-rw-r--r-- 1 root wheel 8482942 15 Авг 19:03 ft-v05.2005-08-15.184500+0400 -rw-r--r-- 1 root wheel 8918055 15 Авг 19:18 ft-v05.2005-08-15.190000+0400 -rw-r--r-- 1 root wheel 9633978 15 Авг 19:34 ft-v05.2005-08-15.191500+0400 -rw-r--r-- 1 root wheel 9504713 15 Авг 19:49 ft-v05.2005-08-15.193000+0400 -rw-r--r-- 1 root wheel 10751040 15 Авг 20:04 ft-v05.2005-08-15.194500+0400 -rw-r--r-- 1 root wheel 11187908 15 Авг 20:19 ft-v05.2005-08-15.200000+0400 -rw-r--r-- 1 root wheel 12611726 15 Авг 20:34 ft-v05.2005-08-15.201500+0400 -rw-r--r-- 1 root wheel 11523792 15 Авг 20:49 ft-v05.2005-08-15.203000+0400 -rw-r--r-- 1 root wheel 12504173 15 Авг 21:04 ft-v05.2005-08-15.204500+0400 -rw-r--r-- 1 root wheel 12481598 15 Авг 21:19 ft-v05.2005-08-15.210000+0400

а агрегатор на основе awk - да нужен cat ./212.5.XX.YY-\[2005]-\[03]-\[06-08].csv | sed 's/;/ /g' \ | awk 'BEGIN { total=0 } { total += $6 } END{ print total }'

214296396

boatman
()
Ответ на: комментарий от boatman

млин, долбаное форматирование, сорри...

netflow пишется в файлы, которые меняются каждые 5/15 минут.
посмотри на размер файлов - в КАКУЮ базу их писать, и ЗАЧЕМ?
они и так уже в своем формате. распаковываются как указано выше.

-rw-r--r--  1 root  wheel   8482942 15 Авг 19:03 ft-v05.2005-08-15.184500+0400
-rw-r--r--  1 root  wheel   8918055 15 Авг 19:18 ft-v05.2005-08-15.190000+0400
-rw-r--r--  1 root  wheel   9633978 15 Авг 19:34 ft-v05.2005-08-15.191500+0400
-rw-r--r--  1 root  wheel   9504713 15 Авг 19:49 ft-v05.2005-08-15.193000+0400
-rw-r--r--  1 root  wheel  10751040 15 Авг 20:04 ft-v05.2005-08-15.194500+0400
-rw-r--r--  1 root  wheel  11187908 15 Авг 20:19 ft-v05.2005-08-15.200000+0400
-rw-r--r--  1 root  wheel  12611726 15 Авг 20:34 ft-v05.2005-08-15.201500+0400
-rw-r--r--  1 root  wheel  11523792 15 Авг 20:49 ft-v05.2005-08-15.203000+0400
-rw-r--r--  1 root  wheel  12504173 15 Авг 21:04 ft-v05.2005-08-15.204500+0400
-rw-r--r--  1 root  wheel  12481598 15 Авг 21:19 ft-v05.2005-08-15.210000+0400

а агрегатор на основе awk - да нужен
cat ./212.5.XX.YY-\[2005]-\[03]-\[06-08].csv | sed 's/;/ /g' \
 | awk 'BEGIN { total=0 } { total += $6 } END{ print total }'

214296396

boatman
()
Ответ на: комментарий от boatman

после обработки первым скриптом cvs-файлы имеь такой вот вид
(входящий трафик юзера)

218.104.136.245;80;212.5.XX.YY;8472;1;40;6;0308.22:35:57.665;0308.22:35:57.665
212.54.95.85;3137;212.5.XX.YY;135;1;48;6;0308.22:51:25.289;0308.22:51:25.289
68.150.5.227;4758;212.5.XX.YY;139;1;48;6;0308.23:03:20.112;0308.23:03:20.112
68.150.5.227;4758;212.5.XX.YY;139;1;48;6;0308.23:03:22.900;0308.23:03:22.900
82.103.121.199;1528;212.5.XX.YY;3306;1;48;6;0308.23:08:00.330;0308.23:08:00.330

80.43.70.209;2667;212.5.XX.YY;139;2;96;6;0308.23:25:32.228;0308.23:25:35.260
80.161.8.32;3993;212.5.XX.YY;15118;1;48;6;0308.23:28:28.500;0308.23:28:28.500
80.161.8.32;3993;212.5.XX.YY;15118;1;48;6;0308.23:28:31.410;0308.23:28:31.410
80.161.8.32;4568;212.5.XX.YY;445;2;96;6;0308.23:28:33.543;0308.23:28:36.531
63.18.24.130;4215;212.5.XX.YY;139;2;96;6;0308.23:33:04.774;0308.23:33:07.542

boatman
()
Ответ на: комментарий от boatman

да, если надо будет резолвить имена при разборе детализации - то вот
мой вариант. в качестве параметра указывается имя файла, выданного
првым скриптом. особенность в том, что ДНС постоянно не юзается, а
отрезолвленные имена запоминаются в кэш скрипта.

cat ./ip2name_new.pl
#!/usr/bin/perl -w
# Novaya detalizaciya. S 2005-01-19.

use strict;
use Socket;

##$|=1;

if($#ARGV<0)
{
    print "Error! File name not specified.\n";
    exit();
}

my $FILE = $ARGV[0];
my $srcIP;
my $srcPort;
my $dstIP;
my $dstPort;
my $pkts;
my $count;
my $P;
my $timeStart;
my $timeEnd;
my $ip_addr;
my $host_name;
my %dns = ();

open(IN,$FILE) or die "Error! Can't open file: $!\n";
$FILE =~ s/csv/resolved/;
open(OUT,"> $FILE.csv") or die "Error! Can't open file: $!\n";

while(<IN>)
{
    ($srcIP,$srcPort,$dstIP,$dstPort,$pkts,$count,$P,$timeStart,$timeEnd) = split(';',$_);
    if($srcIP =~ /^([0-9]{1,3})((\.[0-9]{1,3}){3})$/)
    {
        if(exists $dns{ $srcIP })
        {
            $host_name = $dns{ $srcIP };
#           print "!";
        }else{
            $ip_addr = inet_aton($srcIP);
            $host_name = gethostbyaddr($ip_addr, AF_INET);
            $dns{ $srcIP } = $host_name;
#           print "N";
        }
        if($host_name){ $srcIP .= " ($host_name)"; }
    }
    print OUT "$srcIP;$srcPort;$dstIP;$dstPort;$pkts;$count;$P;$timeStart;$timeEnd";

}

close(IN);
close(OUT);
exit();

boatman
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.