Freebsd and NetFlow — Мониторинг сетевого трафика

И так , после очередной DDOS , я решил (  хотя скорей сказать пришлось ) ставить софт для мониторинга трафика  (смотреть с каких IP и на какие порты ломаться ко мне  боты , люди и т.д ) , это необходимо для статистики и анализа сетевого трафика и т.д.  , приступим .

И так нам понадобиться Netflow  :

Netflow предоставляет возможность анализа сетевого трафика на уровне сеансов, делая запись о каждой

транзакции TCP/IP. Информация не столь подробна, как предоставляемая tcpdump’ом, но представляет довольно подробную статистику.

Netflow имеет три основных компонента:

  1. сенсор;
  2. коллектор;
  3. система обработки и представления данных.

Сенсор — демон, который слушает сеть и фиксирует данные сеанса. Также как Snort или любая другая система обнаружения вторжений, сенсор должен иметь возможность подключиться к хабу, «зеркалированному» порту коммутатора или любому другому устройству, для просмотра сетевого трафика. Если вы используете систему пакетной фильтрации на базе BSD или Linux, то это превосходное место для сенсора Netflow, так как весь трафик будет проходить через эту точку. Сенсор будет собирать информацию о сеансах и сбрасывать ее в коллектор.

Коллектор — второй демон, который слушает на UDP порту, указанному вами и осуществляет сбор информации от сенсора. Полученные данные он сбрасывает в файл для дальнейшей обработки. Различные коллекторы сохраняют данные в различных форматах.

Наконец, система обработки читает эти файлы и генерирует отчеты в форме, более удобной для человека. Эта система должна быть совместима с форматом данных, предоставляемых коллектором.

Это именно те основы , что б иметь представление .

Мы рассмотрим связку:

  • softflowd в качестве сенсора
  • flow-capture (из комплекта flow-tools) в качестве коллектора
  • flow-stat (из комплекта flow-tools) для анализа в текстовой строке
  • flowscan для визуализации и представления в Web

 

Инсталляция softflowd:

#cd /usr/ports/

# make search name=»softflowd»
Port:   softflowd-0.9.8_2
Path:   /usr/ports/net-mgmt/softflowd
Info:   Softflowd is flow-based network traffic analyser with export
Maint:  janos.mohacsi@bsd.hu
B-deps: gettext-0.18.1.1 gmake-3.81_4 libiconv-1.13.1_1
R-deps:
WWW:    http://www.mindrot.org/softflowd.html

 

 

#cd /usr/ports/net-mgmt/softflowd

#make all
#install clean

 

Для работы softlflowd требуется наличие libpcap. В FreeBSD может использоваться ng_netflow, в этом случае libpcap не обязателен.

И далее запускаем сенсор командой :

# /usr/local/sbin/softflowd -i igb1 -n 10.90.90.1:8818 (указав имя сетевой карты и ip с портом) После чего проверяем счетчики :

# /usr/local/sbin/softflowctl statistics
softflowd[68771]: Accumulated statistics:
Number of active flows: 8192
Packets processed: 470940
Fragments: 6
Ignored packets: 558749 (558749 non-IP, 0 too short)
Flows expired: 3905 (3905 forced)
Flows exported: 6860 in 952 packets (0 failures)
Packets received by libpcap: 1029870
Packets dropped by libpcap: 0
Packets dropped by interface: 0

Expired flow statistics: minimum average maximum
Flow bytes: 40 3871 2005349
Flow packets: 1 10 2251
Duration: 0.00s 2.14s 58.83s

Expired flow reasons:
tcp = 0 tcp.rst = 0 tcp.fin = 0
udp = 0 icmp = 0 general = 0
maxlife = 0
over 2Gb = 0
maxflows = 3905
flushed = 0

Per-protocol statistics: Octets Packets Avg Life Max Life
icmp (1): 21092 221 2.09s 16.55s
tcp (6): 14456108 32959 2.85s 58.83s
udp (17): 637284 4607 1.41s 21.07s

И так же можно посмотреть пакетную информацию :

 

#/usr/local/sbin/softflowctl dump-flows

ACTIVE seq:44236 [79.139.204.37]:45645 <> [213.219.228.78]:40410 proto:17 octets>:95 packets>:1 octets<:0 packets<:0 start:2010-12-14T08:45:00.684 finish:2010-12-14T08:45:00.684 tcp>:00 tcp<:00 flowlabel>:00000000 flowlabel<:00000000
EXPIRY EVENT for flow 44236 in 298 seconds

ACTIVE seq:44237 [85.141.162.93]:30101 <> [213.219.228.78]:16936 proto:17 octets>:58 packets>:1 octets<:0 packets<:0 start:2010-12-14T08:45:00.690 finish:2010-12-14T08:45:00.690 tcp>:00 tcp<:00 flowlabel>:00000000 flowlabel<:00000000
EXPIRY EVENT for flow 44237 in 298 seconds

ACTIVE seq:44240 [168.61.5.195]:53 <> [213.219.228.11]:2036 proto:17 octets>:82 packets>:1 octets<:82 packets<:1 start:2010-12-14T08:45:00.717 finish:2010-12-14T08:45:00.934 tcp>:00 tcp<:00 flowlabel>:00000000 flowlabel<:00000000
EXPIRY EVENT for flow 44240 in 298 seconds

ACTIVE seq:44242 [10.100.8.6]:61466 <> [213.248.10.102]:53 proto:17 octets>:59 packets>:1 octets<:250 packets<:1 start:2010-12-14T08:45:00.731 finish:2010-12-14T08:45:00.791 tcp>:00 tcp<:00 flowlabel>:00000000 flowlabel<:00000000
EXPIRY EVENT for flow 44242 in 298 seconds

ACTIVE seq:44243 [86.41.106.100]:55703 <> [213.219.229.30]:35318 proto:17 octets>:126 packets>:1 octets<:309 packets<:1 start:2010-12-14T08:45:00.747 finish:2010-12-14T08:45:00.756 tcp>:00 tcp<:00 flowlabel>:00000000 flowlabel<:00000000
EXPIRY EVENT for flow 44243 in 298 seconds

ACTIVE seq:44244 [10.100.0.242]:53191 <> [76.70.137.164]:50325 proto:17 octets>:131 packets>:1 octets<:0 packets<:0 start:2010-12-14T08:45:00.754 finish:2010-12-14T08:45:00.754 tcp>:00 tcp<:00 flowlabel>:00000000 flowlabel<:00000000
EXPIRY EVENT for flow 44244 in 298 seconds

 И далее приступаем к установке и настройки коллектора flow-tools

И так ставим flow-capture ( это и есть наш коллектор ) :

# cd /usr/ports/net-mgmt/flow-tools
# make all install
# # Не делайте make clean !

После чего можно уже пробовать проверять и запускать коллектор :

#/usr/local/bin/flow-capture -p /var/run/flow-capture.pid -n 287 -N 0 -w /usr/netflow/ -S 5 0/0/8818

Предварительно необходимо создать путь /usr/netflow/   (и что б места хватало ..так как за неделю — у меня собирается около 5 гигов ) , после чего в этой папке будут создаваться файлики  примерно такие  ft-v05.2010-12-14.114139+0300 (для работы с этими файлами будем ставить доп софт )

 

Инсталляция модуля Cflow.pm

Информация в этих файлах находится в бинарном формате, требующем для просмотра специальных инструментальных средств. Многие из тех инструментальных средств используют модуль Cflow.pm.

Cflow это perl-модуль, предоставляющий API для чтения двоичных файлов данных NetFlow-коллекторов, таких как argus, cflowd, flow-tools и lfapd.

И так ставим его ^

#cd usr/ports/net-mgmt/p5-Cflow

#make && make install && make clean

После чего можно выполнить следующее :

# /usr/local/bin/flowdumper -s ft-v05.2010-12-14.114500+0300 | more

2010/12/14 11:45:01 213.219.228.98.1941 -> 94.100.189.42.80 6(PUSH|SYN|ACK|RST) 11 1123
2010/12/14 11:45:01 94.100.189.42.80 -> 213.219.228.98.1948 6(PUSH|SYN|ACK|FIN) 7 2073
2010/12/14 11:45:01 213.219.228.98.1948 -> 94.100.189.42.80 6(PUSH|SYN|ACK|RST) 8 782
2010/12/14 11:45:01 94.100.189.42.80 -> 213.219.228.98.1949 6(PUSH|SYN|ACK|FIN) 5 598
2010/12/14 11:45:01 213.219.228.98.1949 -> 94.100.189.42.80 6(PUSH|SYN|ACK|RST) 6 471
2010/12/14 11:45:01 94.100.189.42.80 -> 213.219.228.98.1950 6(PUSH|SYN|ACK|FIN) 5 623
2010/12/14 11:45:01 213.219.228.98.1950 -> 94.100.189.42.80 6(PUSH|SYN|ACK|RST) 6 482
2010/12/14 11:45:01 94.100.189.42.80 -> 213.219.228.98.1951 6(PUSH|SYN|ACK|FIN) 5 598
2010/12/14 11:45:01 213.219.228.98.1951 -> 94.100.189.42.80 6(PUSH|SYN|ACK|RST) 6 471
2010/12/14 11:45:01 94.100.189.42.80 -> 213.219.228.98.1952 6(PUSH|SYN|ACK|FIN) 5 598
2010/12/14 11:45:01 213.219.228.98.1952 -> 94.100.189.42.80 6(PUSH|SYN|ACK|RST) 6 471
2010/12/14 11:45:01 94.100.189.42.80 -> 213.219.228.98.1953 6(PUSH|SYN|ACK|FIN) 5 550
2010/12/14 11:45:01 213.219.228.98.1953 -> 94.100.189.42.80 6(PUSH|SYN|ACK|RST) 6 481
2010/12/14 11:45:01 94.100.187.86.80 -> 213.219.228.98.1954 6(PUSH|SYN|ACK|FIN) 7 3809
2010/12/14 11:45:01 213.219.228.98.1954 -> 94.100.187.86.80 6(PUSH|SYN|ACK|RST) 7 1042
2010/12/14 11:45:01 10.100.8.6.27947 -> 216.163.188.54.25 6(PUSH|SYN|ACK|RST|FIN) 11 1732
2010/12/14 11:45:01 216.163.188.54.25 -> 10.100.8.6.27947 6(PUSH|SYN|ACK|FIN) 11 738
2010/12/14 11:44:39 78.46.44.67.53 -> 213.219.228.42.58021 17 1 58
2010/12/14 11:44:39 213.219.228.42.58021 -> 78.46.44.67.53 17 1 58
2010/12/14 11:44:39 94.100.185.54.80 -> 213.219.228.11.2283 6(PUSH|SYN|ACK|FIN) 5 434
2010/12/14 11:44:39 213.219.228.11.2283 -> 94.100.185.54.80 6(PUSH|SYN|ACK|FIN) 5 541
2010/12/14 11:44:39 118.160.225.224.24036 -> 213.219.228.118.58061 17 1 126
2010/12/14 11:44:39 213.219.228.118.58061 -> 118.160.225.224.24036 17 1 309
2010/12/14 11:44:39 94.100.185.24.80 -> 213.219.228.11.2284 6(PUSH|SYN|ACK|FIN) 5 646
В коротком(short, -s) режиме каждая строка — поток. Она включает в себя адрес источника и назначения, тип транзакции и количество пакетов и байтов в этом потоке в следующем формате:

  • дата;
  • время;
  • IP-адрес.порт отправителя;
  • IP-адрес.порт получателя;
  • флаги;
  • количество пакетов в потоке;
  • количество байтов в потоке.

В показанном выше примере представлено две TCP/IP сессии — первая строка указывает на трафик, исходящий с 172.16.30.247, порт 80, на хост 216.98.200.25. Следующая строка показывает трафик, идущий в обратном направлении.

И далее к примеру , вот такое командой можно определить генераторов трафика :

#cat  /usr/netflow/ft-v05.2010-12-14.114139+0300 | flow-stat -f 9 -S 2 | less

#  — —- —- Report Information — — —
#
# Fields:    Total
# Symbols:   Disabled
# Sorting:   Descending Field 2
# Name:      Source IP
#
# Args:      flow-stat -f 9 -S 2
#
#
# IPaddr         flows                 octets                packets
#
213.219.228.222  1160                  104920921             74764
95.142.194.88    5                     27797875              18533
80.247.32.206    1                     15615845              10436
213.219.229.30   2241                  14529344              22177
77.88.19.68      1                     10477833              7237
213.219.228.50   5895                  10323895              19993
94.100.191.212   44                    8089615               5655
87.242.74.103    5                     7947527               6795
93.186.238.138   1                     7844687               5233
93.158.155.195   1                     6263843               4326
194.186.207.74   1                     6147793               4378
213.219.228.11   1893                  5394804               23132
217.69.134.36    17                    5001740               3824
192.221.107.126  6                     4786590               3228
95.211.98.69     1                     4130458               2811
188.72.68.158    5                     3487500               2472
213.180.204.99   38                    3332557               2526
79.174.68.231    4                     3034931               2342
77.91.226.200    6                     2859170               1940
193.107.211.7    3                     2756871               1869
212.5.126.212    6                     2681031               2009
212.118.62.195   62                    2576192               2298
213.219.228.98   1376                  2413955               10278
10.100.8.10      3328                  2143128               13685
62.152.62.122    1                     2112434               1411

Или так еще будет красивей :

#/usr/local/bin/flow-cat /usr/netflow/ | /usr/local/bin/flow-stat -f10 -p -S3 | less

 

#  — —- —- Report Information — — —
#
# Fields:    Total
# Symbols:   Disabled
# Sorting:   Descending Field 3
# Name:      Source/Destination IP
#
# Args:      /usr/local/bin/flow-stat -f10 -p -S3
#
#
# mode:                 streaming
# compress:             off
# byte order:           little
# stream version:       3
# export version:       5
#
#
# src IPaddr     dst IPaddr       flows                 octets                packets
#
213.219.228.222  82.138.6.138     1                     98357456              65619
95.142.194.88    10.100.5.110     5                     27797875              18533
80.247.32.206    213.219.228.194  1                     15615845              10436
77.88.19.68      213.219.228.29   1                     10477833              7237
87.242.74.103    10.100.5.82      2                     7898132               6750
93.186.238.138   10.100.1.18      1                     7844687               5233
94.100.191.212   10.100.5.42      7                     7355914               4933
93.158.155.195   213.219.228.29   1                     6263843               4326
194.186.207.74   213.219.229.6    1                     6147793               4378
213.219.228.222  178.177.29.80    1                     5469337               3934
217.69.134.36    213.219.228.98   17                    5001740               3824
192.221.107.126  213.219.228.106  6                     4786590               3228
213.219.228.50   188.186.18.37    6                     4549573               3829

 

( тут уже есть sourse и destenation  address , в общем данные можно обраотывать как угодно и выбирать тоже как угодно ….)

или так

#flow-cat -t «9:00» -T «12:00» /usr/netflow/ | flow-nfilter -f filter.acl -F all-to-client | flow-print | less

Что входит в состав FLOW-TOOLS :

flow-cat — конкатенация (склеивание) отдельных файлов flow-tools;
flow-filter — фильтрация NetFlow;
flow-stat — создание отчета;
flow-print — отображение статистики в понятной человеку форме.
flow-nfilter — позволяет строить сложные и информативные отчеты по разным параметрам (к примеру сделать конфиг и на основе этого конфига делать выборку смотрим сюда ).

Стоит отметить , что набор утилит flow-tools достаточно гибок , его используют как малые так и большие компании — существует возможность строить графические отчеты (интегрированые c Cacti)  и т.д.

Обработка данные это всегда трудоемкое занятие — даже для сервера не скупитесь на железо ,если к примеру обьем обьем трафика 1Gb/30 минут  обработка этих данных на Intel Xeon 2400 — занимало порядка 20-30 минут (выявление трафика генератора в сети , sourse , destination , ASN и т.д ) .