Установка и настройка Cisco Flow-tools

Часто бывает так в локальной сети  —  резко понадобилось считать трафик и вести статистику по IP адресам ( дело это важно и нужное — как не крути -) и так будем прикрывать тылы -) .

Фактический это выглядит так — в Cisco это реализовано или програмнно или аппартно (в зависимости от трафика , трафика ж может быть и очень много ) ,  фактический через это програмнный модуль проходит весь трафик , далее происходит считывание определенных полей  пакета ( поля которые необходимы для NetFlow version 5 или новой версии 9  — разница между ними в более полном предоставлении данных , за частую достаточно и version 5 — сжатый но информативный обзор) , после чего весь этот поток NetFlow собирается в кэше к примеру около 30 мин. и далее экспортируется на какой нить сервер для дальнейшей обработки (если времени будет не достаточно для хранения данных , данные могут быть затерты).  Да и чуть не забыл Netlow это протокол разработанный Cisco (хотя что то подобное делал каждый более менее большой производитель) .

И так начнем с Cisco на IOS 12.3 и выше Cisco рекомендует делать так :

Не много сделаю ремарку по железу . Как правило есть специализированные платы к примеру для Cisco 7600 Policy Feature Card (PFC-3C or PFC-3CXL) — это спец. карта предназначенная для QoS,ACL,GRE , MPLS и NetFlow   и для всех модульных роутеров ситуация аналогичная  , которые будут выполнять аппаратную ASIC обработку netflow потока (они конечно же стоят не 3 копейки , но при этом снижают нагрузку на CPU , готовы работать с большими обьемами данных и выполнять разного  уровня симплирование — если в 2х словах это когда не каждый пакет ловиться а система может находить похожие или аналогичные пакеты и суммировать их ) .

 

1. Включаем cef (Cisco Express Forwarding)

CEF — Cisco Express Forwarding. Если кратко — то способ ускоренной коммутации пакетов, позволяющий сэкономить процессорное время. Технически это реализовано за счет того, что маршрутизатор составляет единую таблицу, в которую включает все достижимые хосты, и ведет поиск по ней, вместо того, чтобы вести рекурсивный поиск по нескольким таблицам (arp, статика, несколько динамических протоколов и т.д.). CEF включен по умолчанию, если его не отключить принудительно командами

2. Указывем версию , к примеру :

ip flow-export version 5

3. Указуем куда будим отправлять net-flow паток (в моем случае это Freebsd с flow-tools )

ip flow-export destination 172.16.10.205:8888 — IP-адрес Порт

4. И последние штрихи добавляем на все корневые интерфейсы

ip route-cache flow

или если вы хотите что б сливалась статистика только с определенных интерфейсов

ip flow egress

Что можно посмотреть или как проверить :

show ip cache flow – показывает записи флоу на cisco

show ip cache ver flow — тоже самое расширено

show ip flow int — показывает интерфейсы, на которых настроено флоу

show ip flow export — показывает, откуда и куда настроен экспорт флоу, сколько отправлено датаграмм и сколько ошибок

c2801-office#show ip flow export
Flow export v5 is enabled for main cache
Exporting flows to 172.16.10.205 (8888)
Exporting using source interface FastEthernet0/1.1
Version 5 flow records
662988 flows exported in 22099 udp datagrams
0 flows failed due to lack of export packet
0 export packets were sent up to process level
0 export packets were dropped due to no fib
0 export packets were dropped due to adjacency issues
0 export packets were dropped due to fragmentation failures
0 export packets were dropped due to encapsulation fixup failures

Значит все работает ….

Переходим к настройке утилиты flow-tools на базе Freebsd

И так производим инсталляцию из портов (из портов так как это просто и надежно , все что необходимо подтянется — что упрощает сильно жизнь ) , максимум что может потребоваться — это обновить дерево портов

#/usr/local/etc/rc.d/flow_capture start — стартуем коллектор

Проверить прослушивается ли порт , или нет , можно так :

#sockstat | grep 8888

вывод команды

root flow-captu 11495 1 udp4 172.16.10.205:8888 *:*

Это говорит о том , что данный порт UDP 8888 прослушиваться на IP 172.16.10.205 ….

Далее можно наблюдать что к примеру в /var/log/flows/2005/2005-02/2005-02-18 начинают появляться бинарные файлики .

# cat /var/log/flows/* | flow-print | less

— тут * означает что надо обработать все файлы в этой папке (хотя можно и по отдельности каждый файл )

# cat /var/log/netflows/2010/2010-02/2010-02-17/* | flow-print | less

srcIP dstIP prot srcPort dstPort octets packets
172.16.10.149 209.85.135.109 6 1722 995 961 14
209.85.135.109 172.16.10.149 6 995 1722 2600 16
172.16.10.149 193.34.61.106 6 1724 38111 806 6
193.34.61.106 172.16.10.149 6 38111 1724 694 4
172.16.10.149 109.169.141.120 17 47134 5000 112 2
172.16.10.149 109.75.197.74 17 47134 35481 2121 11
109.169.141.120 172.16.10.149 17 5000 47134 51 1
172.16.10.5 217.28.210.10 17 47586 53 58 1
172.16.10.149 194.190.241.48 6 1725 21390 168 4
194.190.241.48 172.16.10.149 6 21390 1725 128 3
109.75.197.74 172.16.10.149 17 35481 47134 1387 11
172.16.10.149 210.166.26.243 17 47134 47877 888 10
172.16.10.149 95.154.134.205 17 47134 53955 479 7
95.154.134.205 172.16.10.149 17 53955 47134 835 5
172.16.10.149 195.239.111.175 6 2155 5222 43 1
195.239.111.175 172.16.10.149 6 5222 2155 40 1
172.16.10.149 209.85.137.125 6 2158 5222 114 1
209.85.137.125 172.16.10.149 6 5222 2158 40 1
172.16.10.126 114.249.22.13 6 8435 80 144 3
89.189.68.10 172.16.10.149 17 35107 47134 131 1

Но утилитой cat большие обьемы данных просматривать будит сложно , так как она работает очень медленно . Более гибкой является комбинация flow-print и flow-cat. (это проги на Cи , и поэтому работают на порядок быстрей)

Выявление активных генераторов трафика:

# сat /netflow/2005/2005-02/2005-02-18/ft-v05.2005-02-18.124221+0500 | flow-stat -f 9 -S 2 | less

# flow-cat /var/log/netflows/2010/2010-02/2010-02-17/* | flow-stat -f 9 -S 2 | less
flow-cat: Warning, partial inflated record before EOF
# — —- —- Report Information — — —
#
# Fields: Total
# Symbols: Disabled
# Sorting: Descending Field 2
# Name: Source IP
#
# Args: flow-stat -f 9 -S 2
#
#
# IPaddr flows octets packets
#
10.255.255.2 56 34384842252 201026942
172.16.16.58 67 33980652327 22667563
10.255.255.6 56 31417883716 201414718
172.16.16.57 67 28698691840 19146134
172.16.16.30 73 17012334655 11355687
172.16.16.32 103 15508777275 10359037
172.16.16.29 72 14095723905 9426520
172.16.16.31 104 12078594807 8088971
172.16.16.22 69 11387239530 7728887
172.16.16.23 69 7134553567 4853984
172.16.10.164 296 1260779500 24145415
172.16.10.162 10127 1144786157 1232225
172.16.16.35 2238 758301988 883434
172.16.10.7 489 511884805 9824660
94.103.80.35 5 414769685 276996
92.241.191.40 538 410011973 275083
172.16.10.8 303 325945849 6259507
83.229.138.70 4 324105739 221224
94.103.80.53 10 265780073 177776

Для гибкой фильтрации можно использовать утилиты flow-filter и flow-nfilter. Последняя является более продвинутой и обеспечивает расширенные возможности.

Для использования flow-nfilter необходимо создать конфигурационный файл с описанием фильтров — filter.acl:

filter-definition www-to-client
match ip-destination-address client-ip
match ip-source-port www

Далее можно использовать фильтрацию. Например, для анализа всего трафика к клиенту:

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

Или для анализа только www трафика клиента.

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

Для выявления фактов сканирования или заражения рекомендуется использование утилиты flow-dscan.

Приведем простейший пример детектирования источников сканирования по 135 порту:

# touch dscan.suppress.src

# touch dscan.suppress.dst

# flow-cat -t «9:00» -T «12:00» /netflow/2006/2006-01/2006-01-06/ | flow-filter -P 135 | flow-dscan -b | less

Flowscan

Среди множества утилит, работающих с NetFlow, невозможно не отметить flowscan [3]. С ее помощью можно получать подробную визуализацию потоков с распределением по протоколам, что облегчает задачу мониторинга и выявления нештатных ситуаций.

Cсылки :

http://www.splintered.net/sw/flow-tools/docs/

http://inetzlo.ru/2009/04/27/mpd5-export-netflow/

http://subnets.ru/blog/?p=124

http://www.xgu.ru/wiki/NetFlow

flow_capture_port=»локальный_порт»  необходимо указать порт , в нашем случае это 8888 — этот порт будит прослушиваться данной утилитой

flow_capture_localip=»IP_локального_принимающего» -интерфейса» — это можно и не указывать …

flow_capture_remoteip=»IP_источника_NETFLOW»  тут указываем IP нашей Cisco 172.16.10.150

flow_capture_datadir=»/var/log/flows»  я тут поменял путь по умолчанию создается папка в /var/db/flows

flow_capture_enable=»YES»

# cat >> /etc/rc.conf

# make && make install && make clean

# cd /usr/ports/net-mgmt/flow-tools

вешаем на них ip flow ingress — это входящий трафик , и ip flow egress — это исходящий и форвард

configure terminal
ip cef

filter-definition all-to-client
match ip-destination-address client-ip

 

filter-definition all-from-client
match ip-source-address client-ip

 

filter-primitive www
type ip-port
permit 80
default deny

 

filter-primitive client-ip
type ip-address
permit 195.10.00.199
default deny

 

ip flow ingress

interface fa 0/1.1

Так же начиная с NetFlow version 8  данный протакол уже умеет делать агрегацию данных , что особо полезно при больших обьемах данных (помогает снизить нагрузку на сервер и на обьем данных на жестком диске) , так же из нововведений  в NetFlow version 9 сделан уклон на более детальную информатизацию BGP , MPLS , IPv6 .

NetFlow version 9  , можно включат на отдельных L3 интерфейсах — что придает определенную гибкость .

Так же стоит отметить , что если вы считаете по SNMP и NetFlow ваши данные могут расходится — в силу того , что NetFlow считает чистый IP , а SNMP  читает все (ARP,DHCP и т.д Layer 2) , и в некоторых случаях эта разница доходит до 10 % , в нормально если это порядка 2-4 %  .

Есть 2 варианта выбора данных ( для Policy Feature Card (PFC) плата PFC-3C or PFC-3CXL ) :

— NetFlow Sampling, which reduces the number of statistics collected  — тут можно  делать выборку данных ( к примеру каждый 1000 пакет будет занесен в кеш )
— NetFlow aggregation, which merges collected statistics — а тут можно суммировать данные ( но если у вас большой обьем то этот метод не совсем вам будет подходить )

Так как обьем трафика может быть большой , а может и очень большой (а иной раз и нет необходимости кешировать весь трафик  , к примеру SYN|ACK  не всем эти данные будут полезны) , к примеру на Nexus под Flow поток выделеновсего  512K flows, а на PFC-3C or PFC-3CXL 256K

Что касаемо загрузки памяти и CPU  — тут как Cisco примерно говорит что может нагрузка быть от 3% до 20 % на CPU  (в зависимости от использования NetFlow ) , но при этом не рекомендует включать NetFlow на устройствах на которых ресурсы CPU или memory  используются более чем на 60%

Что касаемо транспорта flow данных — он происходит по UDP (поэтому чувствителен к перегрузкам на канале , а лучше выделить отдельный канал для этих целей).

Отдельно можно сделать пост — какие поля включать в обработку, а какие нет . Как правило этот вопрос каждый решает самостоятельно , но как правило он выглядит так :

IN_BYTES Incoming counter with length N x 8 bits for number of bytes associated with an IP Flow.
IN_PKTS Incoming counter with length N x 8 bits for the number of packets associated with an IP Flow
FLOWS Number of flows that were aggregated; default for N is 4
PROTOCOL IP protocol byte
TCP_FLAGS Cumulative of all the TCP flags seen for this flow
L4_SRC_PORT TCP/UDP source port number i.e.: FTP, Telnet, or equivalent
IPV4_SRC_ADDR IPv4 source address
L4_DST_PORT TCP/UDP destination port number i.e.: FTP, Telnet, or equivalent
IPV4_DST_ADDR IPv4 destination address
SRC_AS Source BGP autonomous system number where N could be 2 or 4
DST_AS Destination BGP autonomous system number where N could be 2 or 4
OUT_BYTES Outgoing counter with length N x 8 bits for the number of bytes associated with an IP Flow
OUT_PKTS Outgoing counter with length N x 8 bits for the number of packets associated with an IP Flow.
CMP_TYPE Internet Control Message Protocol (ICMP) packet type
IP_PROTOCOL_VERSION Internet Protocol Version Set to 4 for IPv4, set to 6 for IPv6. If not present in the template, then version 4 is assumed.
+ IPv6 (все те же поля что и для IPv4) — IPv6 в последнее время набирает обороты , и его необходимо учитывать .

Можно еще  :
IP_PROTOCOL_VERSION — что б фиксить сколько реально IPv6
SAMPLING_INTERVAL —  это если делать SAMPLING то в это поле будет записываться результат (что к примеру будет собираться каждый 1000 пакет )