Traffic-flow колектор за събиране на мрежови данни

Cisco: Netflow
Netflow е протокол на Cisco проследяващ потоци от пакети преминаващи през маршрутизатор или комутатор за събиране на статистическа информация, source и destination IP адреси, портове, протоколи и т. н.
Mikrotik: Traffic-flow
Traffic-flow е имплементация на Netflow протокола в RouterOS операционната система на MikroTik.
Linux: flow-tools
Flow-tools е софтуерен пакет с множество инструменти за работа с протокола Netflow в Linux операционна система. Flow-tools разбира се е написан специално за Cisco/Netflow но на практика е съвместим с Traffic-flow на MikroTik версия 5.

Конфигурация на MikroTik Traffic-flow

Маршрутизатора MikroTik от който ще събираме данни е с IP адрес 172.16.100.100 a Linux сървъра който ще поеме и подреди даните е с IP адрес 172.16.200.200

[admin@R1] > ip traffic-flow print 
                enabled: yes
             interfaces: all
          cache-entries: 512k
    active-flow-timeout: 30m
  inactive-flow-timeout: 15s
 
[admin@R1] > ip traffic-flow target print detail 
Flags: X - disabled 
 0   src-address=0.0.0.0 dst-address=172.16.200.200 port=2055 version=5 
     v9-template-refresh=20 v9-template-timeout=30m

Инсталиране на flow-tools в Ubuntu 16.04

sudo apt-get install flow-tools

Стартиране на колектора за събиране на данни

flow-capture
flow-capture е инструмент от пакета flow-tools който събира и подрежда информациония поток от изпращача на Netflow пакети. Събирането се осъществява отдалечено по мрежов порт а записването (подреждането) по дати, часове, минути в директории и компресирани файлове.
sudo flow-capture -p /var/run/flow-capture.pid -n 287 -w /home/samyil/flow/ -V5 -S5 172.16.200.200/172.16.100.100/2055

Проверка дали работи flow-capture

;
samyil@storage:~$ netstat -an | grep 2055
udp        0      0 172.16.200.200:2055      0.0.0.0:*                          
;
samyil@storage:~$ ps axf | grep -v grep | grep flow-capture
 5539 ?        Ss     0:22 flow-capture -p /var/run/flow-capture.pid -n 287 -w /home/samyil/flow/ -V5 -S5 172.16.200.200/172.16.100.100/2055
;
Изясняване на опциите flow-capture

-p pid, идентификатор на процес
-n 278 278 файла за 24 часа
-w Директорията в която ще се записват данните
-V5 Cisco/NetFlow версия 5
-S5 На всеки 5 минути да се записва файл

172.16.200.200/172.16.100.100/2055
Router/Server/Port
Router Рутера или комутатора който изпраща данните
Server Машината която събита данните
Port Порта на който слуша сървъра за да събира данните

Директорията flow/ в която записва flow-capture:

Преглеждане на събраната информация

flow-cat flow/2017/2017-03/2017-03-08/ft-v05.2017-03-08.233500+0200 | flow-print -n | head -10
srcIP            dstIP            prot  srcPort  dstPort  octets      packets
93.155.131.29    84.46.229.37     udp   46482    33522    192         2         
78.159.148.68    93.155.131.53    udp   52661    26328    192         4         
78.63.241.219    93.155.131.100   udp   18887    41664    196         2         
74.125.153.57    93.155.169.6     tcp   https    42632    1742        10        
213.179.239.157  93.155.131.72    udp   8999     20407    96          2         
183.157.160.60   93.155.162.3     udp   iclpv-n  12569    258         2         
93.155.131.10    46.73.23.32      tcp   65348    8621     204         4         
85.118.94.38     86.127.153.136   udp   63349    22310    634         2         
88.203.249.204   116.234.164.74   udp   6881     6881     1567        3
flow-cat Инструмент за претърсване в директории
flow/2017/2017-03/2017-03-08/ Директория flow с под-директории (година, месец, ден)
ft-v05.2017-03-08.233500+0200 Компресиран файл от колектора (версията, датата и часа)
flow-print -n Превръщане на данните в четима информация
head -10 Само първите 10 резултата

По destination port 443

flow-cat flow/2017/2017-03/2017-03-08/ft-v05.2017-03-08.233500+0200 | flow-filter -P443 | flow-print -n | head -10
srcIP            dstIP            prot  srcPort  dstPort  octets      packets
85.118.94.233    95.81.170.22     tcp   54612    https    1708        12        
85.118.94.233    95.81.170.22     tcp   54613    https    1708        12        
85.118.94.233    95.81.170.22     tcp   54610    https    1708        12        
85.118.94.233    95.81.170.22     tcp   54611    https    1708        12        
93.155.130.155   172.217.17.174   tcp   51023    https    2949        26        
88.203.250.35    31.13.92.10      tcp   41747    https    232         2         
88.203.250.10    31.13.93.36      tcp   51484    https    1048        5         
88.203.251.73    62.204.137.81    tcp   6475     https    1724        16        
88.203.250.10    62.204.137.82    tcp   54432    https    5303        84

По destination port 443 с IP 93.155.130.38

flow-cat flow/2017/2017-03/2017-03-08/ft-v05.2017-03-08.233500+0200 | flow-filter -P443 | flow-print -n | grep 93.155.130.38 | head -10
93.155.130.38    40.77.226.194    tcp   49166    https    2309        4         
93.155.130.38    52.184.224.148   tcp   52702    https    293         4         
93.155.130.38    207.200.35.240   tcp   33706    https    120         3         
93.155.130.38    172.224.96.139   tcp   51060    https    1467        14        
93.155.130.38    40.77.226.194    tcp   49166    https    2309        4         
93.155.130.38    162.125.18.133   tcp   56664    https    2064        2         
93.155.130.38    52.184.224.148   tcp   52702    https    293         4         
93.155.130.38    207.200.35.240   tcp   33706    https    80          2         
93.155.130.38    207.200.35.240   tcp   33706    https    80          2         
93.155.130.38    40.77.226.194    tcp   49166    https    2309        4

В точно определено време по секунда

flow-print -f5 < flow/2017/2017-03/2017-03-09/ft-v05.2017-03-09.091500+0200 | head -10
Start             End               Sif   SrcIPaddress    SrcP  DIf   DstIPaddress    DstP    P Fl Pkts       Octets
 
0309.09:14:44.747 0309.09:14:44.747 19    88.203.248.85   57787 17    35.185.22.244   8108  6   2  4          252       
0309.09:14:44.747 0309.09:14:44.747 19    88.203.248.85   57788 18    182.18.194.23   16882 6   2  6          332       
0309.09:14:44.747 0309.09:14:44.747 19    88.203.248.85   57790 17    89.25.24.245    43032 6   2  9          1117      
0309.09:14:44.747 0309.09:14:44.747 7     93.155.130.14   4722  18    208.67.222.222  53    17  0  2          154       
0309.09:14:34.077 0309.09:14:44.747 26    60.214.217.85   16001 19    88.203.248.85   56555 17  0  3          387       
0309.09:14:44.747 0309.09:14:44.747 5     93.155.131.157  36404 7     93.155.130.11   53    17  0  2          118       
0309.09:14:44.747 0309.09:14:44.747 43    88.203.251.105  57822 18    31.13.92.37     443   6   2  7          578       
0309.09:14:44.747 0309.09:14:44.747 7     93.155.130.11   53    5     93.155.131.157  36404 17  0  2          830

Протокола https с destination и source IP адрес

flow-print -f3 -n < flow/2017/2017-03/2017-03-09/ft-v05.2017-03-09.091500+0200 | grep https | grep 216.58.208.106 | grep 88.203.251.71
srcIP            dstIP            prot  srcPort  dstPort  octets      packets
88.203.251.71    216.58.208.106   tcp   57855    https    2940        13        
216.58.208.106   88.203.251.71    tcp   https    57855    4961        11        
216.58.208.106   88.203.251.71    tcp   https    57855    156         3         
88.203.251.71    216.58.208.106   tcp   57855    https    128         2

src IP, dst port 80 и 443, между 17:00 и 18:00 часа

flow-cat flow/2017/2017-03/2017-03-12/ft-v05.2017-03-12.17* | flow-filter -P80,443 | flow-print -n | grep 93.155.130.38 | head -10
srcIP            dstIP            prot  srcPort  dstPort  octets      packets
93.155.130.38    162.125.18.133   tcp   44532    https    2064        2         
93.155.130.38    162.125.18.133   tcp   44532    https    2064        2         
60.191.38.77     93.155.130.38    tcp   15017    https    80          2         
93.155.130.38    162.125.18.133   tcp   44532    https    2064        2         
93.155.130.38    162.125.18.133   tcp   44532    https    2064        2         
93.155.130.38    162.125.18.133   tcp   44532    https    2064        2         
93.155.130.38    162.125.18.133   tcp   44532    https    2064        2         
93.155.130.38    162.125.18.133   tcp   44532    https    2064        2         
93.155.130.38    162.125.18.133   tcp   44532    https    2064        2         
184.105.247.240  93.155.130.38    tcp   43086    http     80          2

По протокол (47-gre)

flow-cat flow/2017/2017-03/2017-03-12/ft-v05.2017-03-12.175500+0200 | flow-filter -r 47 | flow-print -n | grep 93.155.130.38
srcIP            dstIP            prot  srcPort  dstPort  octets      packets
77.238.86.2      93.155.130.38    gre   0        0        144         3         
93.155.130.38    77.238.86.2      gre   0        0        144         3         
93.155.130.38    77.238.86.2      gre   0        0        338         2         
77.238.86.2      93.155.130.38    gre   0        0        64          2         
77.238.86.2      93.155.130.38    gre   0        0        144         3         
93.155.130.38    77.238.86.2      gre   0        0        144         3         
93.155.130.38    77.238.86.2      gre   0        0        338         2         
77.238.86.2      93.155.130.38    gre   0        0        64          2         
93.155.130.38    31.211.159.43    gre   0        0        335722      3536      
31.211.159.43    93.155.130.38    gre   0        0        284196      2373      
77.238.86.2      93.155.130.38    gre   0        0        144         3         
93.155.130.38    77.238.86.2      gre   0        0        144         3         
93.155.130.38    77.238.86.2      gre   0        0        338         2         
77.238.86.2      93.155.130.38    gre   0        0        64          2         
93.155.130.38    77.238.86.2      gre   0        0        144         3         
77.238.86.2      93.155.130.38    gre   0        0        144         3         
93.155.130.38    77.238.86.2      gre   0        0        338         2         
77.238.86.2      93.155.130.38    gre   0        0        64          2         
77.238.86.2      93.155.130.38    gre   0        0        144         3         
93.155.130.38    77.238.86.2      gre   0        0        144         3         
93.155.130.38    77.238.86.2      gre   0        0        338         2         
77.238.86.2      93.155.130.38    gre   0        0        64          2

Web интерфейс за основни справки

След като взех за основа най често изполвата комбинация за справка:

flow-cat /home/samyil/flow/2017/2017-03/2017-03-21/ft-v05.2017-03-21.115500+0200 | flow-filter -P443 | flow-print -n | grep 93.155.130.38 | head -1000

Аз си сглобих прост уеб интерфейс който написах на PHP:

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Flow</title>
</head>
<body>
<form action="flow.php" method="post">
Year: <input type="text" name="year"> Година, формат: 2017<br>
Month: <input type="text" name="month"> Месец, формат: 03<br>
Day: <input type="text" name="day"> Ден, формат: 21<br>
Hour: <input type="text" name="hour"> Час, формат: 22<br>
Min: <input type="text" name="min"> Минути, формат: 10/15/45/*<br>
Port: <input type="text" name="port"> Порт, формат 80/443/80,443<br>
Addr: <input type="text" name="addr"> Адрес, формат, 93.155.130.38<br>
<input type="submit">
</form>
<hr>
<pre>srcIP            dstIP            prot  srcPort  dstPort  octets      packets</pre>
<?php
$output = shell_exec("flow-cat /home/samyil/flow/" . $_POST['year'] . "/" . $_POST['year'] . "-" . $_POST['month'] . "/" . $_POST['year'] . "-" . $_POST['month'] . "-" . $_POST['day'] . "/ft-v05." . $_POST['yea$
echo "<pre>$output</pre>";
?>
<hr>
</body>
</html>

И ето как изглежда една справка:

Важно е да се отбележи, че когато зададем минути, например 10 справката е от 10 до 15 минути, тоест филтрира се резултата в тези 5 минути. При попълане на звездичка * вместо число филтъра приема информацията от целия час (всички минути в рамките на часа).

One comment on “Traffic-flow колектор за събиране на мрежови данни

  1. Много полезна статия. Благодаря на автора.
    Само едно малка неточност има в обяснението на синтаксиса на flow-capture. В края на реда не би трябвало да е Router/Server/Port, а Server/Router/Port. Виждам, че в командата правилно са изредени адресите.
    Между другото, според мен за “Server” можем спокойно да ползваме 0 вместо адреса.

    Поздрави!

Leave a Reply

Your email address will not be published. Required fields are marked *